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@19: #define NUMBER_OF_CHANNELS 3 andrew@19: andrew@19: #include "ofMain.h" andrew@19: #include "DynamicVector.h" andrew@19: #include "ofxWindowRegion.h" 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@19: andrew@19: void reset(); andrew@19: andrew@19: //TEMPO STUFF andrew@19: andrew@19: typedef std::vector DoubleVector; andrew@19: typedef std::vector DoubleMatrix; andrew@19: typedef std::vector DoubleCube; andrew@19: DoubleCube tempoIntervals;//channel, event index, vector of interval times andrew@19: andrew@19: andrew@19: typedef std::vector IntVector; andrew@19: typedef std::vector IntMatrix; andrew@19: IntMatrix eventTimes; 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@19: }; andrew@19: #endif