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@23:  All Classes Files Functions Enumerations
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@23:
26 
adamstark@23:
27 //=======================================================================
adamstark@23: adamstark@23:
30 {
adamstark@23:
31  EnergyEnvelope,
adamstark@23:
32  EnergyDifference,
adamstark@23:
33  SpectralDifference,
adamstark@23:
34  SpectralDifferenceHWR,
adamstark@23:
35  PhaseDeviation,
adamstark@23:
36  ComplexSpectralDifference,
adamstark@23:
37  ComplexSpectralDifferenceHWR,
adamstark@23:
38  HighFrequencyContent,
adamstark@23:
39  HighFrequencySpectralDifference,
adamstark@23:
40  HighFrequencySpectralDifferenceHWR
adamstark@23:
41 };
adamstark@23:
42 
adamstark@23:
43 //=======================================================================
adamstark@23: adamstark@23:
46 {
adamstark@23:
47  RectangularWindow,
adamstark@23:
48  HanningWindow,
adamstark@23:
49  HammingWindow,
adamstark@23:
50  BlackmanWindow,
adamstark@23:
51  TukeyWindow
adamstark@23:
52 };
adamstark@23:
53 
adamstark@23: adamstark@23:
55 {
adamstark@23:
56 public:
adamstark@23:
57 
adamstark@23:
64  OnsetDetectionFunction(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@23:
65 
adamstark@23: adamstark@23:
68 
adamstark@23:
70  void initialise(int hopSize_,int frameSize_,int onsetDetectionFunctionType_,int windowType);
adamstark@23:
71 
adamstark@23:
73  double calculateOnsetDetectionFunctionSample(double *buffer);
adamstark@23:
74 
adamstark@23:
76  void setOnsetDetectionFunctionType(int onsetDetectionFunctionType_);
adamstark@23:
77 
adamstark@23:
78 private:
adamstark@23:
79 
adamstark@23:
81  void performFFT();
adamstark@23:
82 
adamstark@23:
83  //=======================================================================
adamstark@23:
85  double energyEnvelope();
adamstark@23:
86 
adamstark@23:
88  double energyDifference();
adamstark@23:
89 
adamstark@23:
91  double spectralDifference();
adamstark@23:
92 
adamstark@23:
94  double spectralDifferenceHWR();
adamstark@23:
95 
adamstark@23:
97  double phaseDeviation();
adamstark@23:
98 
adamstark@23:
100  double complexSpectralDifference();
adamstark@23:
101 
adamstark@23:
103  double complexSpectralDifferenceHWR();
adamstark@23:
104 
adamstark@23:
106  double highFrequencyContent();
adamstark@23:
107 
adamstark@23:
109  double highFrequencySpectralDifference();
adamstark@23:
110 
adamstark@23:
112  double highFrequencySpectralDifferenceHWR();
adamstark@23:
113 
adamstark@23:
114  //=======================================================================
adamstark@23:
116  void calculateRectangularWindow();
adamstark@23:
117 
adamstark@23:
119  void calculateHanningWindow();
adamstark@23:
120 
adamstark@23:
122  void calclulateHammingWindow();
adamstark@23:
123 
adamstark@23:
125  void calculateBlackmanWindow();
adamstark@23:
126 
adamstark@23:
128  void calculateTukeyWindow();
adamstark@23:
129 
adamstark@23:
130  //=======================================================================
adamstark@23:
132  double princarg(double phaseVal);
adamstark@23:
133 
adamstark@23:
134 
adamstark@23:
135  double pi;
adamstark@23:
137  int frameSize;
adamstark@23:
138  int hopSize;
adamstark@23:
139  int onsetDetectionFunctionType;
adamstark@23:
141  fftw_plan p;
adamstark@23:
142  fftw_complex *complexIn;
adamstark@23:
143  fftw_complex *complexOut;
adamstark@23:
145  int initialised;
adamstark@23:
147  double *frame;
adamstark@23:
148  double *window;
adamstark@23:
150  double prevEnergySum;
adamstark@23:
152  double *magSpec;
adamstark@23:
153  double *prevMagSpec;
adamstark@23:
155  double *phase;
adamstark@23:
156  double *prevPhase;
adamstark@23:
157  double *prevPhase2;
adamstark@23:
159 };
adamstark@23:
160 
adamstark@23:
161 
adamstark@23:
162 #endif
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: