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