d@0
|
1 /*
|
d@0
|
2 ==============================================================================
|
d@0
|
3
|
d@0
|
4 AudioSourceFeatureExtractor.h
|
d@0
|
5 Created: 11 Aug 2014 10:41:02am
|
d@0
|
6 Author: david.ronan
|
d@0
|
7
|
d@0
|
8 ==============================================================================
|
d@0
|
9 */
|
d@0
|
10
|
d@0
|
11 #ifndef AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED
|
d@0
|
12 #define AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED
|
d@0
|
13
|
d@0
|
14 #include <vector>
|
d@0
|
15
|
d@0
|
16 #include "FFT.h"
|
d@0
|
17 #include "MFCC.h"
|
d@0
|
18 #include "ObservationData.h"
|
d@0
|
19
|
d@0
|
20 #define MAGNITUDESIZE 512
|
d@0
|
21 #define FFTSIZE 1024
|
d@0
|
22 #define PI 3.14159265359
|
d@0
|
23
|
d@0
|
24 class AudioSourceFeatureExtractor
|
d@0
|
25 {
|
d@0
|
26
|
d@0
|
27 public:
|
d@0
|
28
|
d@0
|
29 AudioSourceFeatureExtractor();
|
d@0
|
30 ~AudioSourceFeatureExtractor();
|
d@0
|
31
|
d@0
|
32 void Initialise ( float fSampleRate);
|
d@0
|
33 std::vector<ObservationData> Process (const float* data, size_t numSamples);
|
d@0
|
34 void Finalize();
|
d@0
|
35
|
d@0
|
36 private:
|
d@0
|
37 //Computes the magnitude of FFT
|
d@0
|
38 void VectorDistance(const float* vIn1, int stride1, const float* vIn2, int stride2, float* &vOut, int strideOut, size_t nElements);
|
d@0
|
39
|
d@0
|
40 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
|
41
|
d@0
|
42 void MFCCs(float* &magnitude, size_t windowSize, float sampleRate);
|
d@0
|
43
|
d@0
|
44 float EstimatePerdiodicity(float* data, size_t numSamples);
|
d@0
|
45
|
d@0
|
46 void ConvolveFunction(float* &z, float *x, float *y, size_t &lenz, size_t lenx, size_t leny);
|
d@0
|
47
|
d@0
|
48 void DownSampler(float* data, float* &out, size_t lenIn, size_t &lenOut, float currentSampleRate, float futureSampleRate);
|
d@0
|
49
|
d@0
|
50 void EnvelopeCurve(float* data, float* &out, size_t dataLen, float sampleRate);
|
d@0
|
51
|
d@0
|
52 void Normalise(float* data, float* &out, size_t len);
|
d@0
|
53
|
d@0
|
54 void XCorr(float *&output, float* input1, float* input2, size_t &outputlen, size_t input1len, size_t maxLag);
|
d@0
|
55
|
d@0
|
56 float EntropyOfEnergy(float* data, size_t numSamples);
|
d@0
|
57
|
d@0
|
58 void AudioSourceFeatureExtractor::PDF_getResampleKrnl(std::vector<float> freqVec, float fsProc, int nfft, int nBin, std::vector<float> &outLogFreqVec, std::vector<std::vector<float>> &outKrnl);
|
d@0
|
59
|
d@0
|
60 float Log2(float n);
|
d@0
|
61
|
d@0
|
62 int Sign(float x);
|
d@0
|
63
|
d@0
|
64 std::vector<float> LinSpace(float min, float max, int n);
|
d@0
|
65
|
d@0
|
66 std::vector<float> LogSpace(float min, float max, int n);
|
d@0
|
67
|
d@0
|
68 size_t m_iWriteIdx;
|
d@0
|
69 size_t m_iFlucIdx;
|
d@0
|
70 float m_fSampleRate;
|
d@0
|
71 FFTW *m_fft;
|
d@0
|
72 float *m_OutReal;
|
d@0
|
73 float *m_OutImag;
|
d@0
|
74 MFCC m_MFCC;
|
d@0
|
75 float* m_fInputBuffer;
|
d@0
|
76 float* m_fMagnitudeSpectrum;
|
d@0
|
77 float* m_fPreviousMagnitudeSpectrum;
|
d@0
|
78 std::vector<float> m_fFreqBins;
|
d@0
|
79 };
|
d@0
|
80
|
d@0
|
81 #endif // AUDIOSOURCEFEATUREXTRACTOR_H_INCLUDED
|