adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: adamstark@23: BTrack - A Real-Time Beat Tracker: src/BTrack.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:
BTrack.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 __BTRACK_H
adamstark@23:
23 #define __BTRACK_H
adamstark@23:
24 
adamstark@23:
25 #include "OnsetDetectionFunction.h"
adamstark@28:
26 #include <vector>
adamstark@28:
27 
adamstark@28:
28 //=======================================================================
adamstark@28:
34 class BTrack {
adamstark@28:
35 
adamstark@28:
36 public:
adamstark@28:
37 
adamstark@28:
38  //=======================================================================
adamstark@28:
40  BTrack();
adamstark@28:
41 
adamstark@28:
45  BTrack(int hopSize_);
adamstark@28:
46 
adamstark@28:
51  BTrack(int hopSize_,int frameSize_);
adamstark@28:
52 
adamstark@28:
53  //=======================================================================
adamstark@28:
58  void updateHopAndFrameSize(int hopSize_,int frameSize_);
adamstark@28:
59 
adamstark@28:
60  //=======================================================================
adamstark@28:
65  void processAudioFrame(double *frame);
adamstark@28:
66 
adamstark@28:
70  void processOnsetDetectionFunctionSample(double sample);
adamstark@28:
71 
adamstark@28:
72  //=======================================================================
adamstark@28:
74  int getHopSize();
adamstark@28:
75 
adamstark@28:
77  bool beatDueInCurrentFrame();
adamstark@28:
78 
adamstark@28:
80  double getCurrentTempoEstimate();
adamstark@28:
81 
adamstark@28: adamstark@28:
84 
adamstark@28:
85  //=======================================================================
adamstark@28:
89  void setTempo(double tempo);
adamstark@28:
90 
adamstark@28:
95  void fixTempo(double tempo);
adamstark@28:
96 
adamstark@28:
98  void doNotFixTempo();
adamstark@28:
99 
adamstark@28:
100  //=======================================================================
adamstark@28:
108  static double getBeatTimeInSeconds(long frameNumber,int hopSize,int fs);
adamstark@28:
109 
adamstark@28:
117  static double getBeatTimeInSeconds(int frameNumber,int hopSize,int fs);
adamstark@28:
118 
adamstark@28:
119 
adamstark@28:
120 private:
adamstark@28:
121 
adamstark@28:
126  void initialise(int hopSize_,int frameSize_);
adamstark@23:
127 
adamstark@28:
131  void setHopSize(int hopSize_);
adamstark@23:
132 
adamstark@28:
134  void resampleOnsetDetectionFunction();
adamstark@23:
135 
adamstark@28:
139  void updateCumulativeScore(double odfSample);
adamstark@28:
140 
adamstark@28:
142  void predictBeat();
adamstark@28:
143 
adamstark@28:
145  void calculateTempo();
adamstark@28:
146 
adamstark@28:
152  void adaptiveThreshold(double *x,int N);
adamstark@23:
153 
adamstark@28:
160  double calculateMeanOfArray(double *array,int startIndex,int endIndex);
adamstark@28:
161 
adamstark@28:
166  void normaliseArray(double *array,int N);
adamstark@23:
167 
adamstark@28:
171  void calculateBalancedACF(double *onsetDetectionFunction);
adamstark@23:
172 
adamstark@28:
174  void calculateOutputOfCombFilterBank();
adamstark@28:
175 
adamstark@28:
176  //=======================================================================
adamstark@28:
177 
adamstark@28: adamstark@28:
180 
adamstark@28:
181  //=======================================================================
adamstark@28:
182  // buffers
adamstark@28:
183 
adamstark@28:
184  std::vector<double> onsetDF;
adamstark@28:
185  std::vector<double> cumulativeScore;
adamstark@28:
187  double resampledOnsetDF[512];
adamstark@28:
189  double acf[512];
adamstark@28:
191  double weightingVector[128];
adamstark@28:
193  double combFilterBankOutput[128];
adamstark@28:
194  double tempoObservationVector[41];
adamstark@28:
196  double delta[41];
adamstark@28:
197  double prevDelta[41];
adamstark@28:
198  double prevDeltaFixed[41];
adamstark@28:
200  double tempoTransitionMatrix[41][41];
adamstark@28:
203  //=======================================================================
adamstark@28:
204  // parameters
adamstark@28:
205 
adamstark@28:
206 
adamstark@28:
207  double tightness;
adamstark@28:
209  double alpha;
adamstark@28:
211  double beatPeriod;
adamstark@28:
213  double tempo;
adamstark@28:
215  double estimatedTempo;
adamstark@28:
217  double latestCumulativeScoreValue;
adamstark@28:
219  double tempoToLagFactor;
adamstark@28:
221  int m0;
adamstark@28:
223  int beatCounter;
adamstark@28:
225  int hopSize;
adamstark@28:
227  int onsetDFBufferSize;
adamstark@28:
229  bool tempoFixed;
adamstark@28:
231  bool beatDueInFrame;
adamstark@28:
233 };
adamstark@28:
234 
adamstark@28:
235 #endif
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: