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