Remove C++/Cli version and replace with P/Invoke wrapper to support all platforms

This commit is contained in:
Flamefire committed 2014-03-26 19:52:35 +01:00
1 parent e54892391f
commit ae9f8bb30a
9 files changed
+283 -100

No files matched your search

+79 -6
View File
@@ -1,10 +1,82 @@
#include "PitchWrapper.h"
#pragma managed(push, off)
#include "pitchTracker.h"
#pragma managed(pop)
#include "Helper.h"
void PtFast_Init(double baseToneFrequency, int minHalfTone, int maxHalfTone){
PitchTracker::Init(baseToneFrequency, minHalfTone, maxHalfTone);
}
void PtFast_DeInit(){
PitchTracker::DeInit();
}
int PtFast_GetTone(short* samples, int sampleCt, float* weights){
if(sampleCt <= 0)
return -1;
double* dataDouble = short2DoubleArray(samples, sampleCt, false);
int result = PitchTracker::GetTone(dataDouble, sampleCt, weights, true);
freeDoubleArray(dataDouble);
return result;
}
Analyzer* Analyzer_Create(double rate, unsigned step){
return new Analyzer(rate, "", step);
}
void Analyzer_Free(Analyzer* analyzer){
if(analyzer)
delete analyzer;
}
void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt){
if(sampleCt == 0 || !analyzer)
return;
analyzer->input(data, data + sampleCt);
}
void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt){
if(sampleCt == 0 || !analyzer)
return;
float* dataFloat = short2FloatArray(data, sampleCt);
analyzer->input(dataFloat, dataFloat + sampleCt);
freeFloatArray(dataFloat);
}
void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt){
if(sampleCt == 0 || !analyzer)
return;
float* dataFloat = short2FloatArray(static_cast<short*>(static_cast<void*>(data)), sampleCt);
analyzer->input(dataFloat, dataFloat + sampleCt);
freeFloatArray(dataFloat);
}
void Analyzer_Process(Analyzer* analyzer){
if(!analyzer)
return;
analyzer->process();
}
double Analyzer_GetPeak(Analyzer* analyzer){
if(!analyzer)
return -999;
return analyzer->getPeak();
}
double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq){
if(!analyzer)
return -1;
const Tone* tone = analyzer->findTone(minFreq, maxFreq);
return (tone == NULL) ? -1 : ToneToNote(tone);
}
bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate){
if(!analyzer)
return false;
return analyzer->output(data, data + sampleCt, rate);
}
/*
namespace Native{
namespace PitchTracking{
@@ -31,7 +103,7 @@ namespace Native{
if(data->Length == 0)
return;
pin_ptr<Byte> dataPtr = &data[0];
float* dataFloat = short2FloatArray(static_cast<short*>(static_cast<void*>(dataPtr)), data->Length);
float* dataFloat = short2FloatArray(static_cast<short*>(static_cast<void*>(dataPtr)), data->Length / 2);
m_analyzer->input(dataFloat, dataFloat + data->Length);
freeFloatArray(dataFloat);
}
@@ -64,7 +136,7 @@ namespace Native{
CTone^ CAnalyzer::FindTone(double minFreq, double maxFreq){
const Tone* tone = m_analyzer->findTone(minFreq, maxFreq);
return (tone == NULL) ? nullptr : ConvertToneToManaged(*tone);
return (tone == NULL) ? nullptr : ConvertToneToManaged(tone);
}
void CAnalyzer::Output(array<float>^ data, float rate){
@@ -98,4 +170,5 @@ namespace Native{
return result;
}
}
}
}
*/