adamstark@5: //======================================================================= adamstark@5: /** @file BTrack.h adamstark@6: * @brief BTrack - a real-time beat tracker adamstark@5: * @author Adam Stark adamstark@5: * @copyright Copyright (C) 2008-2014 Queen Mary University of London adamstark@5: * adamstark@5: * This program is free software: you can redistribute it and/or modify adamstark@5: * it under the terms of the GNU General Public License as published by adamstark@5: * the Free Software Foundation, either version 3 of the License, or adamstark@5: * (at your option) any later version. adamstark@5: * adamstark@5: * This program is distributed in the hope that it will be useful, adamstark@5: * but WITHOUT ANY WARRANTY; without even the implied warranty of adamstark@5: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the adamstark@5: * GNU General Public License for more details. adamstark@5: * adamstark@5: * You should have received a copy of the GNU General Public License adamstark@5: * along with this program. If not, see . adamstark@5: */ adamstark@5: //======================================================================= adamstark@5: adamstark@5: #ifndef __BTRACK_H adamstark@5: #define __BTRACK_H adamstark@5: adamstark@5: //#include "fftw3.h" adamstark@5: adamstark@5: class BTrack { adamstark@5: adamstark@5: public: adamstark@5: BTrack(); // constructor adamstark@5: ~BTrack(); // destructor adamstark@5: adamstark@5: void initialise(int fsize); adamstark@5: void process(float df_sample); adamstark@5: void plotdfbuffer(); adamstark@5: void updatecumscore(float df_sample); adamstark@5: void predictbeat(); adamstark@5: void dfconvert(); adamstark@5: void calcTempo(); adamstark@5: void adapt_thresh(float x[],int N); adamstark@5: float mean_array(float array[],int start,int end); adamstark@5: void normalise(float array[],int N); adamstark@5: void acf_bal(float df_thresh[]); adamstark@5: void getrcfoutput(); adamstark@5: void settempo(float tempo); adamstark@5: void fixtempo(float tempo); adamstark@5: void unfixtempo(); adamstark@5: adamstark@5: int playbeat; adamstark@5: float cscoreval; adamstark@5: float est_tempo; adamstark@5: adamstark@5: private: adamstark@5: adamstark@5: // buffers adamstark@5: float *dfbuffer; // to hold detection function adamstark@5: float df512[512]; // to hold resampled detection function adamstark@5: float *cumscore; // to hold cumulative score adamstark@5: adamstark@5: float acf[512]; // to hold autocorrelation function adamstark@5: adamstark@5: float wv[128]; // to hold weighting vector adamstark@5: adamstark@5: float rcf[128]; // to hold comb filter output adamstark@5: float t_obs[41]; // to hold tempo version of comb filter output adamstark@5: adamstark@5: float delta[41]; // to hold final tempo candidate array adamstark@5: float prev_delta[41]; // previous delta adamstark@5: float prev_delta_fix[41]; // fixed tempo version of previous delta adamstark@5: adamstark@5: float t_tmat[41][41]; // transition matrix adamstark@5: adamstark@5: adamstark@5: // parameters adamstark@5: float tightness; adamstark@5: float alpha; adamstark@5: float bperiod; adamstark@5: float tempo; adamstark@5: adamstark@5: adamstark@5: float p_fact; adamstark@5: adamstark@5: adamstark@5: // adamstark@5: int m0; // indicates when the next point to predict the next beat is adamstark@5: int beat; adamstark@5: adamstark@5: int dfbuffer_size; adamstark@5: adamstark@5: adamstark@5: int framesize; adamstark@5: adamstark@5: adamstark@5: int tempofix; adamstark@5: adamstark@5: adamstark@5: }; adamstark@5: adamstark@5: #endif