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@60:
26 
adamstark@60:
27 //=======================================================================
adamstark@60: adamstark@60:
30 {
adamstark@60:
31  EnergyEnvelope,
adamstark@60:
32  EnergyDifference,
adamstark@60:
33  SpectralDifference,
adamstark@60:
34  SpectralDifferenceHWR,
adamstark@60:
35  PhaseDeviation,
adamstark@60:
36  ComplexSpectralDifference,
adamstark@60:
37  ComplexSpectralDifferenceHWR,
adamstark@60:
38  HighFrequencyContent,
adamstark@60:
39  HighFrequencySpectralDifference,
adamstark@60:
40  HighFrequencySpectralDifferenceHWR
adamstark@60:
41 };
adamstark@60:
42 
adamstark@60:
43 //=======================================================================
adamstark@60: adamstark@60:
46 {
adamstark@60:
47  RectangularWindow,
adamstark@60:
48  HanningWindow,
adamstark@60:
49  HammingWindow,
adamstark@60:
50  BlackmanWindow,
adamstark@60:
51  TukeyWindow
adamstark@60:
52 };
adamstark@60:
53 
adamstark@61:
54 //=======================================================================
adamstark@61: adamstark@61:
57 {
adamstark@61:
58 public:
adamstark@61:
59 
adamstark@61:
66  OnsetDetectionFunction(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@61:
67 
adamstark@61: adamstark@61:
70 
adamstark@61:
77  void initialise(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@61:
78 
adamstark@61:
83  double calculateOnsetDetectionFunctionSample(double *buffer);
adamstark@61:
84 
adamstark@61:
88  void setOnsetDetectionFunctionType(int onsetDetectionFunctionType_);
adamstark@60:
89 
adamstark@61:
90 private:
adamstark@61:
91 
adamstark@61:
93  void performFFT();
adamstark@61:
94 
adamstark@61:
95  //=======================================================================
adamstark@61:
97  double energyEnvelope();
adamstark@60:
98 
adamstark@61:
100  double energyDifference();
adamstark@60:
101 
adamstark@61:
103  double spectralDifference();
adamstark@60:
104 
adamstark@61:
106  double spectralDifferenceHWR();
adamstark@60:
107 
adamstark@61:
109  double phaseDeviation();
adamstark@60:
110 
adamstark@61:
112  double complexSpectralDifference();
adamstark@61:
113 
adamstark@61:
115  double complexSpectralDifferenceHWR();
adamstark@61:
116 
adamstark@61:
118  double highFrequencyContent();
adamstark@61:
119 
adamstark@61:
121  double highFrequencySpectralDifference();
adamstark@61:
122 
adamstark@61:
124  double highFrequencySpectralDifferenceHWR();
adamstark@61:
125 
adamstark@61:
126  //=======================================================================
adamstark@61:
128  void calculateRectangularWindow();
adamstark@61:
129 
adamstark@61:
131  void calculateHanningWindow();
adamstark@61:
132 
adamstark@61:
134  void calclulateHammingWindow();
adamstark@61:
135 
adamstark@61:
137  void calculateBlackmanWindow();
adamstark@61:
138 
adamstark@61:
140  void calculateTukeyWindow();
adamstark@61:
141 
adamstark@61:
142  //=======================================================================
adamstark@61:
147  double princarg(double phaseVal);
adamstark@61:
148 
adamstark@61:
149 
adamstark@61:
150  double pi;
adamstark@61:
152  int frameSize;
adamstark@61:
153  int hopSize;
adamstark@61:
154  int onsetDetectionFunctionType;
adamstark@61:
156  fftw_plan p;
adamstark@61:
157  fftw_complex *complexIn;
adamstark@61:
158  fftw_complex *complexOut;
adamstark@61:
160  int initialised;
adamstark@61:
162  double *frame;
adamstark@61:
163  double *window;
adamstark@61:
165  double prevEnergySum;
adamstark@61:
167  double *magSpec;
adamstark@61:
168  double *prevMagSpec;
adamstark@61:
170  double *phase;
adamstark@61:
171  double *prevPhase;
adamstark@61:
172  double *prevPhase2;
adamstark@61:
174 };
adamstark@61:
175 
adamstark@61:
176 
adamstark@61:
177 #endif
adamstark@60:
adamstark@60: adamstark@60: adamstark@60: adamstark@60: