Mercurial > hg > audio-time-warp
view src/TimeWarp.h @ 4:f40577e6b30d
revised this to work with onset and chroma and looking now to do sequential DTW
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Wed, 08 Jun 2011 17:35:56 +0100 |
parents | |
children | 0d51e93bfe74 |
line wrap: on
line source
/* * TimeWarp.h * chromaReader13 * * Created by Andrew on 16/05/2011. * Copyright 2011 QMUL. All rights reserved. * */ #ifndef _TIME_WARP #define _TIME_WARP #include "ofMain.h" #include "chromaGram.h" #include "ChordDetect.h" #include "sndfile.h" #include "ofxFileDialogOSX.h" #define FRAMESIZE 512 #define ENERGY_LENGTH 80000 #define CHROMA_LENGTH 12000 #define CHROMA_CONVERSION_FACTOR 16 //16 times as many frames in energy as in chroma //length in terms of frames (at 512 samples per frame - there are 90 per second) => 900: 10 seconds #define ALIGNMENT_FRAMESIZE 128 class TimeWarp : public ofBaseApp{ public: TimeWarp(); // constructor ~TimeWarp(); void initialiseVariables(); //variables typedef std::vector<double> DoubleVector; typedef std::vector<DoubleVector> DoubleMatrix; DoubleMatrix chromaMatrix; DoubleMatrix secondMatrix; DoubleMatrix* matrixPtr; DoubleVector firstEnergyVector; DoubleVector secondEnergyVector; DoubleMatrix firstChromaEnergyMatrix; DoubleMatrix secondChromaEnergyMatrix; Chromagram chromoGramm; Chromagram secondChromoGramm; DoubleMatrix similarityMatrix; DoubleMatrix tmpSimilarityMatrix; DoubleMatrix alignmentMeasureMatrix; DoubleMatrix tmpAlignmentMeasureMatrix; DoubleVector minimumAlignmentPath; double partAlignmentMeasureMatrix[ALIGNMENT_FRAMESIZE][ALIGNMENT_FRAMESIZE]; typedef std::vector<int> IntVector; typedef std::vector<IntVector> IntMatrix; IntMatrix backwardsAlignmentPath; IntMatrix tmpBackwardsPath; int backwardsAlignmentIndex; IntMatrix partBackwardsAlignmentPath; IntMatrix forwardsAlignmentPath; int partBackwardsAlignmentIndex; void createCombinedMatrix(DoubleMatrix myChromaMatrix, DoubleVector energyVector, DoubleMatrix* chromaEnergyMatrix); void calculateSimilarityMatrix(); //new addition void calculateSimilarityMatrixWithPointers(DoubleMatrix firstChromaMatrix, DoubleMatrix secondChromaMatrix, DoubleMatrix* simMatrix); DoubleMatrix superAlignmentMeasureMatrix; //for the onset + chromagram alignment DoubleVector superMinimumAlignmentPath; //end new additions int findStartWidthFrame(); void calculateAlignmentMatrix(DoubleMatrix firstMatrix, DoubleMatrix secondMatrix, DoubleMatrix *alignmentMatrix); double getDistance(int i, int j); double getRestrictedMinimum(int i, int j, float newValue, int minX, int minY); bool extendRestrictedAlignmentUp(int startX, int startY, int endIndexY, DoubleMatrix *alignmentMatrix); bool extendRestrictedAlignmentAlong(int startX, int startY, int endIndexX, DoubleMatrix* alignmentMatrix); double getMinimum(int i, int j, float newValue); bool extendAlignmentUp(int endIndexY, DoubleMatrix *alignmentMatrix); bool extendAlignmentAlong(int endIndexX, DoubleMatrix *alignmentMatrix); void calculateMinimumAlignmentPath(DoubleMatrix alignmentMatrix); void extendForwardAlignmentPath(int endX); bool findPreviousMinimumInBackwardsPath(); bool testForNewAlignmentMinimum(double *previousMinimum, int i, int j); int findMinimumOfVector(DoubleVector *d); void addNewForwardsPath(int indexX); void calculatePartSimilarityMatrix(DoubleMatrix firstChromaMatrix, DoubleMatrix secondChromaMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX); // void calculatePartAlignmentMatrix(int startIndexX, int startIndexY, int endIndexX, int endIndexY, DoubleMatrix* alignmentMatrix); void calculatePartMinimumAlignmentPath(int startX, int startY, int endX, int endY, DoubleMatrix alignmentMatrix); bool findPreviousMinimumInPartBackwardsPath(); float diagonalPenalty; }; #endif