adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: BTrack - A Real-Time Beat Tracker: src/OnsetDetectionFunction.h Source File adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23:
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23:
adamstark@23:
BTrack - A Real-Time Beat Tracker adamstark@23:
adamstark@23:
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23:
adamstark@24:  All Classes Files Functions Enumerations Pages
adamstark@23: adamstark@23: adamstark@23:
adamstark@23: adamstark@23:
adamstark@23: adamstark@23: adamstark@23:
adamstark@23:
adamstark@23:
adamstark@23:
OnsetDetectionFunction.h
adamstark@23:
adamstark@23:
adamstark@23: Go to the documentation of this file.
1 //=======================================================================
adamstark@23:
20 //=======================================================================
adamstark@23:
21 
adamstark@23:
22 #ifndef __ONSETDETECTIONFUNCTION_H
adamstark@23:
23 #define __ONSETDETECTIONFUNCTION_H
adamstark@23:
24 
adamstark@23:
25 #include "fftw3.h"
adamstark@28:
26 #include <vector>
adamstark@28:
27 
adamstark@28:
28 //=======================================================================
adamstark@28: adamstark@28:
31 {
adamstark@28:
32  EnergyEnvelope,
adamstark@28:
33  EnergyDifference,
adamstark@28:
34  SpectralDifference,
adamstark@28:
35  SpectralDifferenceHWR,
adamstark@28:
36  PhaseDeviation,
adamstark@28:
37  ComplexSpectralDifference,
adamstark@28:
38  ComplexSpectralDifferenceHWR,
adamstark@28:
39  HighFrequencyContent,
adamstark@28:
40  HighFrequencySpectralDifference,
adamstark@28:
41  HighFrequencySpectralDifferenceHWR
adamstark@28:
42 };
adamstark@28:
43 
adamstark@28:
44 //=======================================================================
adamstark@28: adamstark@28:
47 {
adamstark@28:
48  RectangularWindow,
adamstark@28:
49  HanningWindow,
adamstark@28:
50  HammingWindow,
adamstark@28:
51  BlackmanWindow,
adamstark@28:
52  TukeyWindow
adamstark@28:
53 };
adamstark@28:
54 
adamstark@28:
55 //=======================================================================
adamstark@28: adamstark@28:
58 {
adamstark@28:
59 public:
adamstark@28:
60 
adamstark@28:
67  OnsetDetectionFunction(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@28:
68 
adamstark@28: adamstark@28:
71 
adamstark@28:
78  void initialise(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@28:
79 
adamstark@28:
84  double calculateOnsetDetectionFunctionSample(double *buffer);
adamstark@28:
85 
adamstark@28:
89  void setOnsetDetectionFunctionType(int onsetDetectionFunctionType_);
adamstark@28:
90 
adamstark@28:
91 private:
adamstark@28:
92 
adamstark@28:
94  void performFFT();
adamstark@28:
95 
adamstark@28:
96  //=======================================================================
adamstark@28:
98  double energyEnvelope();
adamstark@28:
99 
adamstark@28:
101  double energyDifference();
adamstark@28:
102 
adamstark@28:
104  double spectralDifference();
adamstark@28:
105 
adamstark@28:
107  double spectralDifferenceHWR();
adamstark@28:
108 
adamstark@28:
110  double phaseDeviation();
adamstark@28:
111 
adamstark@28:
113  double complexSpectralDifference();
adamstark@28:
114 
adamstark@28:
116  double complexSpectralDifferenceHWR();
adamstark@28:
117 
adamstark@28:
119  double highFrequencyContent();
adamstark@28:
120 
adamstark@28:
122  double highFrequencySpectralDifference();
adamstark@28:
123 
adamstark@28:
125  double highFrequencySpectralDifferenceHWR();
adamstark@28:
126 
adamstark@28:
127  //=======================================================================
adamstark@28:
129  void calculateRectangularWindow();
adamstark@28:
130 
adamstark@28:
132  void calculateHanningWindow();
adamstark@28:
133 
adamstark@28:
135  void calclulateHammingWindow();
adamstark@28:
136 
adamstark@28:
138  void calculateBlackmanWindow();
adamstark@28:
139 
adamstark@28:
141  void calculateTukeyWindow();
adamstark@28:
142 
adamstark@28:
143  //=======================================================================
adamstark@28:
148  double princarg(double phaseVal);
adamstark@24:
149 
adamstark@28:
150 
adamstark@28:
151  double pi;
adamstark@28:
153  int frameSize;
adamstark@28:
154  int hopSize;
adamstark@28:
155  int onsetDetectionFunctionType;
adamstark@28:
157  fftw_plan p;
adamstark@28:
158  fftw_complex *complexIn;
adamstark@28:
159  fftw_complex *complexOut;
adamstark@28:
161  bool initialised;
adamstark@28:
163  std::vector<double> frame;
adamstark@28:
164  std::vector<double> window;
adamstark@28:
166  double prevEnergySum;
adamstark@28:
168  std::vector<double> magSpec;
adamstark@28:
169  std::vector<double> prevMagSpec;
adamstark@28:
171  std::vector<double> phase;
adamstark@28:
172  std::vector<double> prevPhase;
adamstark@28:
173  std::vector<double> prevPhase2;
adamstark@28:
175 };
adamstark@24:
176 
adamstark@28:
177 
adamstark@28:
178 #endif
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: