Gist
Gist.h
Go to the documentation of this file.
1 //=======================================================================
22 //=======================================================================
23 
24 #ifndef __GISTHEADER__
25 #define __GISTHEADER__
26 
27 //=======================================================================
28 // core
29 #include "CoreTimeDomainFeatures.h"
31 
32 // onset detection functions
33 #include "OnsetDetectionFunction.h"
34 
35 // pitch detection
36 #include "Yin.h"
37 
38 // MFCC
39 #include "MFCC.h"
40 
41 //=======================================================================
42 // fft
43 #ifdef USE_FFTW
44 #include "fftw3.h"
45 #endif
46 
47 #ifdef USE_KISS_FFT
48 #include "kiss_fft.h"
49 #endif
50 
51 #ifdef USE_ACCELERATE_FFT
52 #include "AccelerateFFT.h"
53 #endif
54 
55 #if !(defined(USE_FFTW) ^ defined(USE_KISS_FFT) ^ defined (USE_ACCELERATE_FFT))
56 #error "You must define one FFT macro to ensure you select a FFT implementation - either USE_FFTW, USE_KISS_FFT or USE_ACCELERATE_FFT. You have either not defined one of these macros or you have defined more than one of them."
57 #endif
58 
59 #include "WindowFunctions.h"
60 
61 //=======================================================================
63 template <class T>
64 class Gist
65 {
66 public:
67 
68  //=======================================================================
74  Gist (int audioFrameSize, int fs, WindowType windowType = HanningWindow);
75 
77  ~Gist();
78 
79  //=======================================================================
83  void setAudioFrameSize (int audioFrameSize);
84 
88  void setSamplingFrequency (int fs);
89 
90  //=======================================================================
92  int getAudioFrameSize();
93 
96 
97  //=======================================================================
101  void processAudioFrame (const std::vector<T>& audioFrame);
102 
107  void processAudioFrame (const T* frame, int numSamples);
108 
111  const std::vector<T>& getMagnitudeSpectrum();
112 
113  //================= CORE TIME DOMAIN FEATURES =================
114 
116  T rootMeanSquare();
117 
119  T peakEnergy();
120 
122  T zeroCrossingRate();
123 
124  //=============== CORE FREQUENCY DOMAIN FEATURES ==============
125 
127  T spectralCentroid();
128 
130  T spectralCrest();
131 
133  T spectralFlatness();
134 
136  T spectralRolloff();
137 
139  T spectralKurtosis();
140 
141  //================= ONSET DETECTION FUNCTIONS =================
142 
144  T energyDifference();
145 
147  T spectralDifference();
148 
151 
154 
157 
158  //=========================== PITCH ============================
159 
161  T pitch();
162 
163  //=========================== MFCCs =============================
164 
166  const std::vector<T>& getMelFrequencySpectrum();
167 
169  const std::vector<T>& getMelFrequencyCepstralCoefficients();
170 
171 private:
172  //=======================================================================
173 
175  void configureFFT();
176 
178  void freeFFT();
179 
181  void performFFT();
182 
183  //=======================================================================
184 
185 #ifdef USE_FFTW
186  fftw_plan p;
187  fftw_complex* fftIn;
188  fftw_complex* fftOut;
189 #endif
190 
191 #ifdef USE_KISS_FFT
192  kiss_fft_cfg cfg;
193  kiss_fft_cpx* fftIn;
194  kiss_fft_cpx* fftOut;
195 #endif
196 
197 #ifdef USE_ACCELERATE_FFT
198  AccelerateFFT<T> accelerateFFT;
199 #endif
200 
201  int frameSize;
202  int samplingFrequency;
203  WindowType windowType;
205  std::vector<T> audioFrame;
206  std::vector<T> windowFunction;
207  std::vector<T> fftReal;
208  std::vector<T> fftImag;
209  std::vector<T> magnitudeSpectrum;
211  bool fftConfigured;
212 
214  CoreTimeDomainFeatures<T> coreTimeDomainFeatures;
215 
217  CoreFrequencyDomainFeatures<T> coreFrequencyDomainFeatures;
218 
220  OnsetDetectionFunction<T> onsetDetectionFunction;
221 
223  Yin<T> yin;
224 
226  MFCC<T> mfcc;
227 };
228 
229 #endif
Gist::spectralDifferenceHWR
T spectralDifferenceHWR()
Definition: Gist.cpp:198
AccelerateFFT
Definition: AccelerateFFT.h:36
Gist::setSamplingFrequency
void setSamplingFrequency(int fs)
Definition: Gist.cpp:72
OnsetDetectionFunction.h
Implementations of onset detection functions.
Gist::getAudioFrameSize
int getAudioFrameSize()
Definition: Gist.cpp:81
Gist
Definition: Gist.h:65
Gist::rootMeanSquare
T rootMeanSquare()
Definition: Gist.cpp:128
Gist::getMelFrequencyCepstralCoefficients
const std::vector< T > & getMelFrequencyCepstralCoefficients()
Definition: Gist.cpp:234
Gist::~Gist
~Gist()
Definition: Gist.cpp:42
Gist::peakEnergy
T peakEnergy()
Definition: Gist.cpp:135
Gist::spectralCrest
T spectralCrest()
Definition: Gist.cpp:156
Gist::pitch
T pitch()
Definition: Gist.cpp:219
AccelerateFFT.h
Performs the FFT using the Apple Accelerate Framework.
Gist::zeroCrossingRate
T zeroCrossingRate()
Definition: Gist.cpp:142
Gist::energyDifference
T energyDifference()
Definition: Gist.cpp:184
Gist::setAudioFrameSize
void setAudioFrameSize(int audioFrameSize)
Definition: Gist.cpp:52
Gist::spectralKurtosis
T spectralKurtosis()
Definition: Gist.cpp:177
WindowFunctions.h
A Collection of Window Functions.
CoreTimeDomainFeatures.h
Implementations of common time domain audio features.
Gist::spectralDifference
T spectralDifference()
Definition: Gist.cpp:191
MFCC
Definition: MFCC.h:38
Yin
Definition: Yin.h:36
Gist::spectralFlatness
T spectralFlatness()
Definition: Gist.cpp:163
Gist::getMelFrequencySpectrum
const std::vector< T > & getMelFrequencySpectrum()
Definition: Gist.cpp:226
Gist::spectralRolloff
T spectralRolloff()
Definition: Gist.cpp:170
Gist::complexSpectralDifference
T complexSpectralDifference()
Definition: Gist.cpp:205
Gist::spectralCentroid
T spectralCentroid()
Definition: Gist.cpp:149
Gist::getSamplingFrequency
int getSamplingFrequency()
Definition: Gist.cpp:88
MFCC.h
Calculates Mel Frequency Cepstral Coefficients.
CoreFrequencyDomainFeatures.h
Implementations of common frequency domain audio features.
CoreTimeDomainFeatures
Definition: CoreTimeDomainFeatures.h:35
Gist::getMagnitudeSpectrum
const std::vector< T > & getMagnitudeSpectrum()
Definition: Gist.cpp:121
Gist::Gist
Gist(int audioFrameSize, int fs, WindowType windowType=HanningWindow)
Definition: Gist.cpp:29
Yin.h
Implementation of the YIN pitch detection algorithm (de Cheveigné and Kawahara,2002)
OnsetDetectionFunction
Definition: OnsetDetectionFunction.h:36
WindowType
WindowType
Definition: WindowFunctions.h:34
Gist::highFrequencyContent
T highFrequencyContent()
Definition: Gist.cpp:212
Gist::processAudioFrame
void processAudioFrame(const std::vector< T > &audioFrame)
Definition: Gist.cpp:95
CoreFrequencyDomainFeatures
Definition: CoreFrequencyDomainFeatures.h:36