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@23:
26 
adamstark@23:
27 //=======================================================================
adamstark@23:
33 class BTrack {
adamstark@23:
34 
adamstark@23:
35 public:
adamstark@23:
36 
adamstark@23:
37  //=======================================================================
adamstark@23:
39  BTrack();
adamstark@23:
40 
adamstark@23:
44  BTrack(int hopSize_);
adamstark@23:
45 
adamstark@23:
50  BTrack(int hopSize_,int frameSize_);
adamstark@23:
51 
adamstark@23:
52  //=======================================================================
adamstark@23:
57  void processAudioFrame(double *frame);
adamstark@23:
58 
adamstark@23:
62  void processOnsetDetectionFunctionSample(double sample);
adamstark@23:
63 
adamstark@23:
64  //=======================================================================
adamstark@23:
66  int getHopSize();
adamstark@23:
67 
adamstark@23:
69  bool beatDueInCurrentFrame();
adamstark@23:
70 
adamstark@23:
72  double getCurrentTempoEstimate();
adamstark@23:
73 
adamstark@23: adamstark@23:
76 
adamstark@23:
77  //=======================================================================
adamstark@23:
81  void setTempo(double tempo);
adamstark@23:
82 
adamstark@23:
87  void fixTempo(double tempo);
adamstark@23:
88 
adamstark@23:
90  void doNotFixTempo();
adamstark@23:
91 
adamstark@23:
92  //=======================================================================
adamstark@23:
100  static double getBeatTimeInSeconds(long frameNumber,int hopSize,int fs);
adamstark@23:
101 
adamstark@23:
109  static double getBeatTimeInSeconds(int frameNumber,int hopSize,int fs);
adamstark@23:
110 
adamstark@23:
111 
adamstark@23:
112 private:
adamstark@23:
113 
adamstark@23:
118  void initialise(int hopSize_,int frameSize_);
adamstark@23:
119 
adamstark@23:
123  void setHopSize(int hopSize_);
adamstark@23:
124 
adamstark@23:
126  void resampleOnsetDetectionFunction();
adamstark@23:
127 
adamstark@23:
131  void updateCumulativeScore(double odfSample);
adamstark@23:
132 
adamstark@23:
134  void predictBeat();
adamstark@23:
135 
adamstark@23:
137  void calculateTempo();
adamstark@23:
138 
adamstark@23:
144  void adaptiveThreshold(double *x,int N);
adamstark@23:
145 
adamstark@23:
152  double calculateMeanOfArray(double *array,int startIndex,int endIndex);
adamstark@23:
153 
adamstark@23:
158  void normaliseArray(double *array,int N);
adamstark@23:
159 
adamstark@23:
163  void calculateBalancedACF(double *onsetDetectionFunction);
adamstark@23:
164 
adamstark@23:
166  void calculateOutputOfCombFilterBank();
adamstark@23:
167 
adamstark@23:
168  //=======================================================================
adamstark@23:
169 
adamstark@23: adamstark@23:
172 
adamstark@23:
173  //=======================================================================
adamstark@23:
174  // buffers
adamstark@23:
175  double *onsetDF;
adamstark@23:
176  double resampledOnsetDF[512];
adamstark@23:
177  double *cumulativeScore;
adamstark@23:
179  double acf[512];
adamstark@23:
181  double weightingVector[128];
adamstark@23:
183  double combFilterBankOutput[128];
adamstark@23:
184  double tempoObservationVector[41];
adamstark@23:
186  double delta[41];
adamstark@23:
187  double prevDelta[41];
adamstark@23:
188  double prevDeltaFixed[41];
adamstark@23:
190  double tempoTransitionMatrix[41][41];
adamstark@23:
193  //=======================================================================
adamstark@23:
194  // parameters
adamstark@23:
195 
adamstark@23:
196 
adamstark@23:
197  double tightness;
adamstark@23:
199  double alpha;
adamstark@23:
201  double beatPeriod;
adamstark@23:
203  double tempo;
adamstark@23:
205  double estimatedTempo;
adamstark@23:
207  double latestCumulativeScoreValue;
adamstark@23:
209  double tempoToLagFactor;
adamstark@23:
211  int m0;
adamstark@23:
213  int beatCounter;
adamstark@23:
215  int hopSize;
adamstark@23:
217  int onsetDFBufferSize;
adamstark@23:
219  bool tempoFixed;
adamstark@23:
221  bool beatDueInFrame;
adamstark@23:
223 };
adamstark@23:
224 
adamstark@23:
225 #endif
adamstark@23:
adamstark@23: adamstark@23: adamstark@23: adamstark@23: