andrew@19: /* andrew@19: * TempoFollower.h andrew@19: * MultipleAudioMathcher andrew@19: * andrew@19: * Created by Andrew on 09/02/2012. andrew@19: * Copyright 2012 QMUL. All rights reserved. andrew@19: * andrew@19: */ andrew@19: andrew@19: #ifndef TEMPO_FOLLOWER_H andrew@19: #define TEMPO_FOLLOWER_H andrew@19: andrew@41: #define NUMBER_OF_CHANNELS 4 andrew@19: andrew@19: #include "ofMain.h" andrew@19: #include "DynamicVector.h" andrew@19: #include "ofxWindowRegion.h" andrew@20: #include "ofxAubioOnsetDetection.h" andrew@20: andrew@20: typedef std::vector DoubleVector; andrew@20: typedef std::vector DoubleMatrix; andrew@20: typedef std::vector DoubleCube; andrew@20: andrew@20: andrew@20: typedef std::vector IntVector; andrew@20: typedef std::vector IntMatrix; andrew@20: typedef std::vector IntCube; andrew@20: andrew@20: /* andrew@20: struct RecordedTempoData { andrew@20: DoubleCube recordedIntervals; andrew@20: IntCube recordedDivisions; andrew@20: IntMatrix recordedTimes; andrew@20: DoubleMatrix recordedTempo; andrew@20: }; andrew@20: */ andrew@19: andrew@19: class TempoFollower{ andrew@19: andrew@19: public: andrew@19: TempoFollower(); andrew@19: andrew@19: DynamicVector tempoPrior; andrew@19: DynamicVector tempoPosterior; andrew@19: DynamicVector tempoLikelihood; andrew@19: int tempoArraySize; andrew@19: int minimumTempoInterval, maximumTempoInterval; andrew@19: andrew@19: double playingTempo; andrew@20: void zero(); andrew@19: void reset(); andrew@19: andrew@19: //TEMPO STUFF andrew@19: andrew@20: andrew@19: DoubleCube tempoIntervals;//channel, event index, vector of interval times andrew@20: andrew@20: IntCube divisions; andrew@19: andrew@20: IntMatrix eventTimes; andrew@20: DoubleMatrix tempo; andrew@19: andrew@20: DoubleVector globalTempo; andrew@20: IntVector globalTempoTimes; andrew@20: andrew@20: andrew@19: void setUpEventTimeMatrix(); andrew@19: void printEventTimes(); andrew@19: andrew@19: void updateTempo(const int& channel, const int& timeIn); andrew@19: bool testTempoInterval(const int& channel, const double& testTempoInterval, DoubleVector& d); andrew@19: void updateTempoDistribution(const DoubleVector& d); andrew@19: void calculatePosterior(); andrew@19: void drawTempoArray(ofxWindowRegion& window); andrew@19: andrew@20: double intervalsToTest[4]; andrew@20: andrew@20: double tempoLikelihoodStdDev; andrew@20: andrew@20: void printTempoTimes();//prints global tempo - the playing tempo sequence andrew@50: bool printOutput; andrew@20: andrew@19: }; andrew@19: #endif