d@0: /* d@0: ============================================================================== d@0: d@0: AudioSourceFeatureExtractor.h d@0: Created: 11 Aug 2014 10:41:02am d@0: Author: david.ronan d@0: d@0: ============================================================================== d@0: */ d@0: d@0: #ifndef AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED d@0: #define AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED d@0: d@0: #include d@0: d@0: #include "FFT.h" d@0: #include "MFCC.h" d@0: #include "ObservationData.h" d@0: d@0: #define MAGNITUDESIZE 512 d@0: #define FFTSIZE 1024 d@0: #define PI 3.14159265359 d@0: d@0: class AudioSourceFeatureExtractor d@0: { d@0: d@0: public: d@0: d@0: AudioSourceFeatureExtractor(); d@0: ~AudioSourceFeatureExtractor(); d@0: d@0: void Initialise ( float fSampleRate); d@0: std::vector Process (const float* data, size_t numSamples); d@0: void Finalize(); d@0: d@0: private: d@0: //Computes the magnitude of FFT d@0: void VectorDistance(const float* vIn1, int stride1, const float* vIn2, int stride2, float* &vOut, int strideOut, size_t nElements); d@0: d@0: void SpectralFeatures(float* &magnitude, float* &previousmagnitude, size_t windowSize, float ¢roid, float &spread, float &skew, float &kurtosis, float &brightness, float &rolloff95, float &rolloff85, float &spectralentropy, float &flatness, float &spectralcf, float &spectralflux); d@0: d@0: void MFCCs(float* &magnitude, size_t windowSize, float sampleRate); d@0: d@0: float EstimatePerdiodicity(float* data, size_t numSamples); d@0: d@0: void ConvolveFunction(float* &z, float *x, float *y, size_t &lenz, size_t lenx, size_t leny); d@0: d@0: void DownSampler(float* data, float* &out, size_t lenIn, size_t &lenOut, float currentSampleRate, float futureSampleRate); d@0: d@0: void EnvelopeCurve(float* data, float* &out, size_t dataLen, float sampleRate); d@0: d@0: void Normalise(float* data, float* &out, size_t len); d@0: d@0: void XCorr(float *&output, float* input1, float* input2, size_t &outputlen, size_t input1len, size_t maxLag); d@0: d@0: float EntropyOfEnergy(float* data, size_t numSamples); d@0: d@0: void AudioSourceFeatureExtractor::PDF_getResampleKrnl(std::vector freqVec, float fsProc, int nfft, int nBin, std::vector &outLogFreqVec, std::vector> &outKrnl); d@0: d@0: float Log2(float n); d@0: d@0: int Sign(float x); d@0: d@0: std::vector LinSpace(float min, float max, int n); d@0: d@0: std::vector LogSpace(float min, float max, int n); d@0: d@0: size_t m_iWriteIdx; d@0: size_t m_iFlucIdx; d@0: float m_fSampleRate; d@0: FFTW *m_fft; d@0: float *m_OutReal; d@0: float *m_OutImag; d@0: MFCC m_MFCC; d@0: float* m_fInputBuffer; d@0: float* m_fMagnitudeSpectrum; d@0: float* m_fPreviousMagnitudeSpectrum; d@0: std::vector m_fFreqBins; d@0: }; d@0: d@0: #endif // AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED