adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: BTrack - A Real-Time Beat Tracker: src/OnsetDetectionFunction.h Source File adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
BTrack - A Real-Time Beat Tracker adamstark@60:
adamstark@60:
adamstark@60:
adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60:
adamstark@61:  All Classes Files Functions Enumerations Pages
adamstark@60: adamstark@60: adamstark@60:
adamstark@60: adamstark@60:
adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
adamstark@60:
adamstark@60:
OnsetDetectionFunction.h
adamstark@60:
adamstark@60:
adamstark@60: Go to the documentation of this file.
1 //=======================================================================
adamstark@60:
20 //=======================================================================
adamstark@60:
21 
adamstark@60:
22 #ifndef __ONSETDETECTIONFUNCTION_H
adamstark@60:
23 #define __ONSETDETECTIONFUNCTION_H
adamstark@60:
24 
adamstark@60:
25 #include "fftw3.h"
adamstark@65:
26 #include <vector>
adamstark@65:
27 
adamstark@65:
28 //=======================================================================
adamstark@65: adamstark@65:
31 {
adamstark@65:
32  EnergyEnvelope,
adamstark@65:
33  EnergyDifference,
adamstark@65:
34  SpectralDifference,
adamstark@65:
35  SpectralDifferenceHWR,
adamstark@65:
36  PhaseDeviation,
adamstark@65:
37  ComplexSpectralDifference,
adamstark@65:
38  ComplexSpectralDifferenceHWR,
adamstark@65:
39  HighFrequencyContent,
adamstark@65:
40  HighFrequencySpectralDifference,
adamstark@65:
41  HighFrequencySpectralDifferenceHWR
adamstark@65:
42 };
adamstark@65:
43 
adamstark@65:
44 //=======================================================================
adamstark@65: adamstark@65:
47 {
adamstark@65:
48  RectangularWindow,
adamstark@65:
49  HanningWindow,
adamstark@65:
50  HammingWindow,
adamstark@65:
51  BlackmanWindow,
adamstark@65:
52  TukeyWindow
adamstark@65:
53 };
adamstark@65:
54 
adamstark@65:
55 //=======================================================================
adamstark@65: adamstark@65:
58 {
adamstark@65:
59 public:
adamstark@65:
60 
adamstark@67:
66  OnsetDetectionFunction(int hopSize_,int frameSize_);
adamstark@67:
67 
adamstark@65:
68 
adamstark@67:
75  OnsetDetectionFunction(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType_);
adamstark@67:
76 
adamstark@67: adamstark@65:
79 
adamstark@67:
85  void initialise(int hopSize_,int frameSize_);
adamstark@67:
86 
adamstark@67:
93  void initialise(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType_);
adamstark@67:
94 
adamstark@67:
99  double calculateOnsetDetectionFunctionSample(double *buffer);
adamstark@67:
100 
adamstark@67:
104  void setOnsetDetectionFunctionType(int onsetDetectionFunctionType_);
adamstark@65:
105 
adamstark@67:
106 private:
adamstark@67:
107 
adamstark@67:
109  void performFFT();
adamstark@67:
110 
adamstark@67:
111  //=======================================================================
adamstark@67:
113  double energyEnvelope();
adamstark@65:
114 
adamstark@67:
116  double energyDifference();
adamstark@65:
117 
adamstark@67:
119  double spectralDifference();
adamstark@65:
120 
adamstark@67:
122  double spectralDifferenceHWR();
adamstark@65:
123 
adamstark@67:
125  double phaseDeviation();
adamstark@67:
126 
adamstark@67:
128  double complexSpectralDifference();
adamstark@67:
129 
adamstark@67:
131  double complexSpectralDifferenceHWR();
adamstark@67:
132 
adamstark@67:
134  double highFrequencyContent();
adamstark@67:
135 
adamstark@67:
137  double highFrequencySpectralDifference();
adamstark@67:
138 
adamstark@67:
140  double highFrequencySpectralDifferenceHWR();
adamstark@67:
141 
adamstark@67:
142  //=======================================================================
adamstark@67:
144  void calculateRectangularWindow();
adamstark@67:
145 
adamstark@67:
147  void calculateHanningWindow();
adamstark@67:
148 
adamstark@67:
150  void calclulateHammingWindow();
adamstark@67:
151 
adamstark@67:
153  void calculateBlackmanWindow();
adamstark@67:
154 
adamstark@67:
156  void calculateTukeyWindow();
adamstark@67:
157 
adamstark@67:
158  //=======================================================================
adamstark@67:
163  double princarg(double phaseVal);
adamstark@67:
164 
adamstark@67:
165 
adamstark@67:
166  double pi;
adamstark@67:
168  int frameSize;
adamstark@67:
169  int hopSize;
adamstark@67:
170  int onsetDetectionFunctionType;
adamstark@67:
171  int windowType;
adamstark@67:
173  fftw_plan p;
adamstark@67:
174  fftw_complex *complexIn;
adamstark@67:
175  fftw_complex *complexOut;
adamstark@67:
177  bool initialised;
adamstark@67:
179  std::vector<double> frame;
adamstark@67:
180  std::vector<double> window;
adamstark@67:
182  double prevEnergySum;
adamstark@67:
184  std::vector<double> magSpec;
adamstark@67:
185  std::vector<double> prevMagSpec;
adamstark@67:
187  std::vector<double> phase;
adamstark@67:
188  std::vector<double> prevPhase;
adamstark@67:
189  std::vector<double> prevPhase2;
adamstark@67:
191 };
adamstark@67:
192 
adamstark@67:
193 
adamstark@67:
194 #endif
adamstark@60:
adamstark@60: adamstark@60: adamstark@60: adamstark@60: