adamstark@114: adamstark@114: adamstark@60: adamstark@60: adamstark@114: adamstark@114: adamstark@114: adamstark@60: BTrack - A Real-Time Beat Tracker: src/OnsetDetectionFunction.h Source File adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@114: adamstark@60: adamstark@60: adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
adamstark@60: adamstark@60: adamstark@114: adamstark@114: adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
BTrack - A Real-Time Beat Tracker adamstark@60:
adamstark@60:
adamstark@60:
adamstark@60: adamstark@114: adamstark@60: adamstark@114: adamstark@114: adamstark@114: adamstark@114: adamstark@60: adamstark@60:
adamstark@114:
adamstark@60: adamstark@60: adamstark@60:
adamstark@114:
adamstark@114:
adamstark@114:
adamstark@114:
adamstark@114:
Loading...
adamstark@114:
Searching...
adamstark@114:
No Matches
adamstark@114:
adamstark@114:
adamstark@114:
adamstark@60:
adamstark@60: adamstark@60: adamstark@60:
adamstark@60:
adamstark@114:
OnsetDetectionFunction.h
adamstark@60:
adamstark@60:
adamstark@114: Go to the documentation of this file.
1//=======================================================================
adamstark@114:
20//=======================================================================
adamstark@114:
21
adamstark@114:
22#ifndef __ONSETDETECTIONFUNCTION_H
adamstark@114:
23#define __ONSETDETECTIONFUNCTION_H
adamstark@114:
24
adamstark@114:
25#ifdef USE_FFTW
adamstark@114:
26#include "fftw3.h"
adamstark@114:
27#endif
adamstark@114:
28
adamstark@114:
29#ifdef USE_KISS_FFT
adamstark@114:
30#include "kiss_fft.h"
adamstark@114:
31#endif
adamstark@114:
32
adamstark@114:
33#include <vector>
adamstark@114:
34
adamstark@114:
35//=======================================================================
adamstark@114: adamstark@114:
38{
adamstark@114:
39 EnergyEnvelope,
adamstark@114:
40 EnergyDifference,
adamstark@114:
41 SpectralDifference,
adamstark@114:
42 SpectralDifferenceHWR,
adamstark@114:
43 PhaseDeviation,
adamstark@114:
44 ComplexSpectralDifference,
adamstark@114:
45 ComplexSpectralDifferenceHWR,
adamstark@114:
46 HighFrequencyContent,
adamstark@114:
47 HighFrequencySpectralDifference,
adamstark@114:
48 HighFrequencySpectralDifferenceHWR
adamstark@114:
49};
adamstark@114:
50
adamstark@114:
51//=======================================================================
adamstark@114: adamstark@114:
54{
adamstark@114:
55 RectangularWindow,
adamstark@114:
56 HanningWindow,
adamstark@114:
57 HammingWindow,
adamstark@114:
58 BlackmanWindow,
adamstark@114:
59 TukeyWindow
adamstark@114:
60};
adamstark@114:
61
adamstark@114:
62//=======================================================================
adamstark@114: adamstark@114:
65{
adamstark@114:
66public:
adamstark@114:
67
adamstark@114:
73 OnsetDetectionFunction (int hopSize, int frameSize);
adamstark@114:
74
adamstark@114:
75
adamstark@114:
82 OnsetDetectionFunction (int hopSize, int frameSize, int onsetDetectionFunctionType, int windowType);
adamstark@114:
83
adamstark@114: adamstark@114:
86
adamstark@114:
92 void initialise (int hopSize, int frameSize);
adamstark@114:
93
adamstark@114:
100 void initialise (int hopSize, int frameSize, int onsetDetectionFunctionType, int windowType);
adamstark@114:
101
adamstark@114:
106 double calculateOnsetDetectionFunctionSample (double* buffer);
adamstark@114:
107
adamstark@114:
111 void setOnsetDetectionFunctionType (int onsetDetectionFunctionType);
adamstark@114:
112
adamstark@114:
113private:
adamstark@114:
114
adamstark@114:
116 void performFFT();
adamstark@114:
117
adamstark@114:
118 //=======================================================================
adamstark@114:
120 double energyEnvelope();
adamstark@114:
121
adamstark@114:
123 double energyDifference();
adamstark@114:
124
adamstark@114:
126 double spectralDifference();
adamstark@114:
127
adamstark@114:
129 double spectralDifferenceHWR();
adamstark@114:
130
adamstark@114:
132 double phaseDeviation();
adamstark@114:
133
adamstark@114:
135 double complexSpectralDifference();
adamstark@114:
136
adamstark@114:
138 double complexSpectralDifferenceHWR();
adamstark@114:
139
adamstark@114:
141 double highFrequencyContent();
adamstark@114:
142
adamstark@114:
144 double highFrequencySpectralDifference();
adamstark@114:
145
adamstark@114:
147 double highFrequencySpectralDifferenceHWR();
adamstark@114:
148
adamstark@114:
149 //=======================================================================
adamstark@114:
151 void calculateRectangularWindow();
adamstark@114:
152
adamstark@114:
154 void calculateHanningWindow();
adamstark@114:
155
adamstark@114:
157 void calclulateHammingWindow();
adamstark@114:
158
adamstark@114:
160 void calculateBlackmanWindow();
adamstark@114:
161
adamstark@114:
163 void calculateTukeyWindow();
adamstark@114:
164
adamstark@114:
165 //=======================================================================
adamstark@114:
170 double princarg(double phaseVal);
adamstark@114:
171
adamstark@114:
172 void initialiseFFT();
adamstark@114:
173 void freeFFT();
adamstark@114:
174
adamstark@114:
175 double pi;
adamstark@114:
177 int frameSize;
adamstark@114:
178 int hopSize;
adamstark@114:
179 int onsetDetectionFunctionType;
adamstark@114:
180 int windowType;
adamstark@114:
182 //=======================================================================
adamstark@114:
183#ifdef USE_FFTW
adamstark@114:
184 fftw_plan p;
adamstark@114:
185 fftw_complex* complexIn;
adamstark@114:
186 fftw_complex* complexOut;
adamstark@114:
187#endif
adamstark@114:
188
adamstark@114:
189#ifdef USE_KISS_FFT
adamstark@114:
190 kiss_fft_cfg cfg;
adamstark@114:
191 kiss_fft_cpx* fftIn;
adamstark@114:
192 kiss_fft_cpx* fftOut;
adamstark@114:
193 std::vector<std::vector<double> > complexOut;
adamstark@114:
194#endif
adamstark@114:
195
adamstark@114:
196 //=======================================================================
adamstark@114:
197 bool initialised;
adamstark@114:
199 std::vector<double> frame;
adamstark@114:
200 std::vector<double> window;
adamstark@114:
202 double prevEnergySum;
adamstark@114:
204 std::vector<double> magSpec;
adamstark@114:
205 std::vector<double> prevMagSpec;
adamstark@114:
207 std::vector<double> phase;
adamstark@114:
208 std::vector<double> prevPhase;
adamstark@114:
209 std::vector<double> prevPhase2;
adamstark@114:
210};
adamstark@114:
211
adamstark@114:
212
adamstark@114:
213#endif
adamstark@114:
OnsetDetectionFunctionType
Definition OnsetDetectionFunction.h:38
adamstark@114:
WindowType
Definition OnsetDetectionFunction.h:54
adamstark@114:
Definition OnsetDetectionFunction.h:65
adamstark@114:
void initialise(int hopSize, int frameSize)
Definition OnsetDetectionFunction.cpp:64
adamstark@114:
double calculateOnsetDetectionFunctionSample(double *buffer)
Definition OnsetDetectionFunction.cpp:179
adamstark@114:
~OnsetDetectionFunction()
Definition OnsetDetectionFunction.cpp:55
adamstark@114:
void setOnsetDetectionFunctionType(int onsetDetectionFunctionType)
Definition OnsetDetectionFunction.cpp:173
adamstark@60:
adamstark@60: adamstark@60: adamstark@60: adamstark@60: