75 lines
2.5 KiB
C++
75 lines
2.5 KiB
C++
#pragma once
|
|
|
|
#include "performous/pitch.hh"
|
|
#include "ptAKF.h"
|
|
|
|
#define DllExport extern "C" __declspec(dllexport)
|
|
|
|
DllExport Analyzer* Analyzer_Create(unsigned step);
|
|
DllExport void Analyzer_Free(Analyzer* analyzer);
|
|
DllExport void Analyzer_InputFloat(Analyzer* analyzer, float* data, int sampleCt);
|
|
DllExport void Analyzer_InputShort(Analyzer* analyzer, short* data, int sampleCt);
|
|
DllExport void Analyzer_InputByte(Analyzer* analyzer, char* data, int sampleCt);
|
|
DllExport void Analyzer_Process(Analyzer* analyzer);
|
|
DllExport double Analyzer_GetPeak(Analyzer* analyzer);
|
|
DllExport double Analyzer_FindNote(Analyzer* analyzer, double minFreq, double maxFreq);
|
|
DllExport bool Analyzer_OutputFloat(Analyzer* analyzer, float* data, int sampleCt, float rate);
|
|
|
|
DllExport PtAKF* PtAKF_Create();
|
|
DllExport void PtAKF_Free(PtAKF* analyzer);
|
|
DllExport int PtAKF_GetNumHalfTones();
|
|
DllExport void PtAKF_InputByte(PtAKF* analyzer, char* data, int sampleCt);
|
|
DllExport int PtAKF_GetNote(PtAKF* analyzer, double* maxVolume, float* weights);
|
|
|
|
/*
|
|
public ref class CTone {
|
|
public:
|
|
static const int MAXHARM = 48; ///< The maximum number of harmonics tracked
|
|
static const int MINAGE = 2; ///< The minimum age required for a tone to be output
|
|
double Freq; ///< Frequency (Hz)
|
|
double DB; ///< Level (dB)
|
|
double Stabledb; ///< Stable level, useful for graphics rendering
|
|
int Age; ///< How many times the tone has been detected in row
|
|
double NoteExact;
|
|
int Note;
|
|
/// Less-than compare by levels (instead of frequencies like operator< does)
|
|
static bool dbCompare(CTone l, CTone r) { return l.DB < r.DB; }
|
|
};
|
|
|
|
public ref class CAnalyzer {
|
|
public:
|
|
CAnalyzer(double rate, String^ id) {
|
|
m_analyzer = new Analyzer(rate,"");
|
|
m_id = id;
|
|
}
|
|
CAnalyzer(double rate, String^ id, unsigned step) {
|
|
m_analyzer = new Analyzer(rate,"",step);
|
|
m_id = id;
|
|
}
|
|
~CAnalyzer() { this->!CAnalyzer(); }
|
|
!CAnalyzer() { delete m_analyzer; }
|
|
|
|
void Input(array<float>^ data);
|
|
void Input(array<short>^ data);
|
|
void Input(array<Byte>^ data);
|
|
void Process();
|
|
double GetPeak();
|
|
array<CTone^>^ GetTones();
|
|
CTone^ FindTone();
|
|
CTone^ FindTone(double minFreq);
|
|
CTone^ FindTone(double minFreq, double maxFreq);
|
|
void Output(array<float>^ data, float rate);
|
|
String^ GetId();
|
|
|
|
private:
|
|
Analyzer* m_analyzer;
|
|
String^ m_id;
|
|
};
|
|
|
|
public ref class CPitchTracker abstract sealed{
|
|
public:
|
|
static void Init(double baseToneFrequency, int minHalfTone, int maxHalfTone);
|
|
static void DeInit();
|
|
static int GetTone(array<short>^ samples, array<float>^ weights);
|
|
};
|
|
*/ |