Mercurial > hg > drum-timing-analyser
view DrumTimingLoader_OF/PerformanceAnalyserSrc/TimingAnalyser.h @ 3:303edbbcf1bd tip
updated ofxAubioOnsetDetection file
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Sun, 24 Nov 2013 08:15:17 +0000 |
parents | 50ba55abea8c |
children |
line wrap: on
line source
/* * TimingAnalyser.h * performanceTimingAnalyser * * Created by Andrew on 17/12/2011. * Copyright 2011 QMUL. All rights reserved. * */ #ifndef TIMING_ANALYSER #define TIMING_ANALYSER #include "ofMain.h" #include <vector> #include <cstdlib> using namespace std; //big matrix stores cost struct Route { int tempoIndex, phaseIndex; double addedCost, totalCost; int previousTempoIndex; int previousPhaseIndex; int phaseHop, tempoHop; double previousCost; double preHopCost; double phaseHopCost, tempoHopCost; // int currentTempoIndex, currentPhaseIndex; // int globalPhaseOffset; // int tempoMinimumOffset; }; typedef std::vector<Route> RouteVector; typedef std::vector<RouteVector> RouteMatrix; typedef std::vector<RouteMatrix> RouteHistory; typedef std::vector<double> DoubleVector; typedef std::vector<DoubleVector> DoubleMatrix; struct Path{ RouteMatrix currentRoute; int bestTempo, bestPhase; // int globalPhaseOffset; int tempoOffset, phaseOffset; int phaseShiftApplied; int tempoShiftApplied; int eventTimeObserved; DoubleMatrix costMatrix; }; typedef std::vector<Path> PathVector; class TimingAnalyser{ public: TimingAnalyser(); //size of matrix and mean tempo determined here static const int tempoRange = 47; static const int phaseRange = 57; int meanGlobalTempo ; std::string timingDataFilepath; std::string processedBeatTimesFilepath; void setTempoLimits(const int& newGlobalTempo); DoubleMatrix previousLogMatrix; typedef std::vector<int> IntVector; typedef std::vector<IntVector> IntMatrix; IntMatrix timingData; IntVector basicInterOnsetInterval; void updatePlayIndex(const double& seconds); double getNoteTime(const int& index); void printCostMatrix(const RouteMatrix& m); //NEW COST METHODS: void updateCostToPoint(const int& eventTime, const int& eventBeatLocation); double getBestMinimumCost(const int& newTempoInUnits, const int& newPhaseInUnits, Route& r); double getPhaseIndexFromEventTime(const double& eventTime); double getTempoInUnits(const double& tempoInMs); PathVector pathHistory; void setBestTempoAndPhase(Path& newPath); void printPathHistory(); void printIOIdata(); void processPathHistory(); // RouteMatrix routes; // RouteHistory history; int playingIndex; // void printHistory(); //void printBestPath(); int phaseMinimumOffset; int globalTimeOffset; int tempoMinimumOffset; double maximumTempo, minimumTempo; double screenHeight, screenWidth ; void drawTempoCurve(); int getHeightPoint(float f); int numberOfPointsPerPage; bool printHistory; double tempoCost, phaseCost; DoubleMatrix logProbabilityMatrix; double lastBeatPosition; int minimumPhaseHop, maximumPhaseHop ; // double getCost(const int& eventTime, const int& interval, const int& tempoIndex, const int& phaseIndex); void updateCost(const int& eventTime, const int& eventBeatLocation); void updateMatrixOffsets(const int& eventTime); void checkShiftMatrix(); void shiftMatrixToMatchBestPhase(const int& bestPhaseIndex); void shiftMatrixToMatchBestTempo(const int& bestTempoIndex); int recentPhaseShift, recentTempoShift; bool moveMatrixToOptimalCostPosition; int startPoint;//for drawing float movementFactor; // static const double tempoMinimumOffset = meanGlobalTempo - (tempoRange-1)/2; bool checkPhaseRange(const int& phaseToCheck); bool checkTempoRange(const int& tempoToCheck); double phaseHopCost(const int& phaseHop); double tempoHopCost(const int& tempoHop); double tempoScalar, phaseScalar; int meanTempo; int meanTempoIndex, meanPhaseIndex; int currentBestTempo, currentBestPhase; double getPhase(const int& phaseIndex); double getTempo(const int& tempoIndex); double getTempo(const int& tempoIndex, const int& tempoOffset); double getPhase(const int& phaseIndex, const int& phaseOffset); int getTempoIndex(const double& tempo); int getPhaseIndex(const double& location); double getBestPreviousCost(const int& tempoIndex, const int& phaseIndex, Route& r); //double getlocation(const int& tempoIndex, const int& phaseIndex); void getLocation(const int& tempoIndex, const int& phaseIndex, const int& interval); void drawCostMatrix(); double getMaximum(); double getMinimumTransitionCost(const int& interval, const int& tempoIndex, const int& phaseIndex); //int getBeatLocation(const int& phaseIndex); //int getProjectedBeatLocation(const int& tempoIndex, const int& phaseIndex, const int& interval); void initialiseRoutes(); void printLogMatrix(); void printMatrix(DoubleMatrix& logMatrix); void exportTimingData(); void importTimingData(std::string importFileName); void exportProcessedBeatTimes(const double& firstBeatTime); bool drawIOIintervals; void calculateTempoLimits(); void clearData(); int getIndexAtMouseXposition(const int& Xpos); int minDrawTempo, maxDrawTempo; bool drawBPM; double msToBpm(const double& ms); void moveDrawWindowUp(); void moveDrawWindowDown(); void widenDrawWindow(); void narrowDrawWindow(); bool blackAndWhite; DoubleVector beatPosition; IntMatrix timingHistogram; void clearHistogram(); void getHistogramResults(); bool drawExpressiveTimingData; bool mozartTriplets; int tempoVariationStartIndex; int tempoVariationEndIndex; double calculateTempoVariation(); ofTrueTypeFont timesFont;//FONT //vars added since new project on Drum Timing double offsetToFirstPoint;//this set at beginning - when we load in beat times that do not start at zero; void zoomIn(); void zoomOut(); }; #endif