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