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