andrew@2: /* andrew@2: * BayesDrumTracker.h andrew@2: * bayesianTempoInitialiser5 andrew@2: * andrew@2: * Created by Andrew on 14/07/2011. andrew@2: * Copyright 2011 QMUL. All rights reserved. andrew@2: * andrew@2: */ andrew@2: andrew@2: #include "ofxOsc.h" andrew@2: #include "bayesianArray.h" andrew@2: #include "beatTempo.h" andrew@2: andrew@2: class BayesDrumTracker{ andrew@2: andrew@2: #ifndef _BAYES_DRUM_TRACKER andrew@2: #define _BAYES_DRUM_TRACKER andrew@10: //#define ARRAY_SIZE 240 andrew@2: //#define BAYES_ARRAY_SIZE 240 andrew@2: andrew@2: public: andrew@2: andrew@2: BayesDrumTracker(); andrew@2: ~BayesDrumTracker(); andrew@2: andrew@2: void initialiseTracker(); andrew@2: void resetParameters(); andrew@2: void decayDistributions();//on update andrew@2: andrew@2: void setBeatDistribution(int beatPosition); andrew@2: andrew@2: void newKickError(const float& error, const double& cpuEventTime, const string& onsetTypeString); andrew@2: void startTatum(const float& startTatum); andrew@2: void setNewClickIndex(const int& clickIndex, const float& clickTime); andrew@2: void sendMaxTempo(); andrew@2: void sendMaxPhase(); andrew@2: void newBeat(int& beatIndex); andrew@2: andrew@2: void setUniformTempo(); andrew@2: void setUniformPhase(); andrew@2: void setBeatNow(const double& beatTime); andrew@2: void doBeatCorrection(const float& beatCorrFloat); andrew@2: andrew@2: andrew@2: bool filterBeatTime(double newBeatTime); andrew@2: void crossUpdateArrays(float timeInterval); andrew@2: bool updateTempoIfWithinRange(double timeInterval); andrew@2: void calculateTempoUpdate(double tempoInterval); andrew@2: void updateTempoProcess(const double& cpuTime, const string& onsetDescription); andrew@2: andrew@2: andrew@2: float beatIndexToMsec(const int& index); andrew@2: float tempoIndexToMsec(const int& index); andrew@2: andrew@2: andrew@2: float kickError, snareError; andrew@2: double cpuBeatTime; andrew@2: float testArray[5]; andrew@2: andrew@2: double setBeatToNowTime; andrew@2: andrew@10: static const int arraySize = 240; andrew@10: andrew@10: float prior [arraySize]; andrew@10: float posterior [arraySize]; andrew@10: float likelihood [arraySize]; andrew@2: float likelihoodMean, likelihoodStdDev, likelihoodNoise, stepSize; andrew@2: float maximumEstimate; andrew@2: float maximumTest, posteriorDecayRate, maximumIndex; andrew@2: float eighthNoteProportion; andrew@2: andrew@2: bool paused; andrew@2: double maxPhase, maxTempo; andrew@2: andrew@10: float tmpArray[arraySize]; andrew@2: andrew@2: float correctionFactor; andrew@2: float beatCorrection; andrew@2: int correctBeatBy; andrew@2: andrew@2: bayesianArray beatDistribution; andrew@2: bayesianArray tempoDistribution; andrew@2: double tempoMinimum, tempoMaximum; andrew@2: double tempoInterval; andrew@2: beatTempo beatTimes; andrew@2: andrew@2: string onsetType; andrew@2: string timeString; andrew@2: //double cpuBeatTime; andrew@2: andrew@2: ofxOscSender sender; andrew@2: andrew@2: double posteriorMaximum; andrew@2: bool adaptiveStandardDeviationMode; andrew@2: double tempoStdDev; andrew@2: bool accompanimentStarted; andrew@2: bool setDistributionOnStartTempo; andrew@2: int integerMultipleOfTatum; andrew@2: andrew@2: double recentClickTime; andrew@2: andrew@2: string kickString;//for info andrew@2: andrew@2: float debugArray [4]; andrew@2: string tempoUpdateStrings[16]; andrew@2: string tempoDataString; andrew@11: andrew@11: double generalLikelihoodToNoiseRatio; andrew@2: }; andrew@2: andrew@2: #endif