Mercurial > hg > audio-time-warp
view src/TimeWarp.h @ 17:ffb563f6e4cd tip
Timewarp uncomitted changes
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Fri, 06 Jan 2012 00:20:42 +0000 |
parents | 67ed2c7320ba |
children |
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" //11/2011 //what is similarity and what chromaSimilarity? #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(); void clearVectors(); //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; IntMatrix anchorPoints; void addAnchorPoints(const int& startFrameX, const int& startFrameY); int partBackwardsAlignmentIndex; void createCombinedMatrix(DoubleMatrix myChromaMatrix, DoubleVector energyVector, DoubleMatrix* chromaEnergyMatrix); double getChromaSimilarity(int x, int y, DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix); double getEuclideanDistance(int x, int y, DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix); void calculateChromaSimilarityMatrix(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix); void calculateSimilarityMatrix(); int findMinimumOfMatrixColumn(DoubleMatrix d, int column); //new addition void calculateSimilarityMatrixWithPointers(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix); void calculateJointSimilarityMatrix(DoubleVector* energyVectorOne, DoubleVector* energyVectorTwo, DoubleMatrix* chromaSimilarityMatrix, DoubleMatrix* simMatrix); void calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX, int endY); double getJointChromaAndEnergyDistance(DoubleVector* energyVectorOne, DoubleMatrix* firstChromaMatrix, DoubleVector* energyVectorTwo, DoubleMatrix* secondChromaMatrix, int energyIndexX, int energyIndexY, double energyProportion, double chromaProportion); DoubleMatrix chromaSimilarityMatrix; // DoubleMatrix superAlignmentMeasureMatrix; //for the onset + chromagram alignment // DoubleVector superMinimumAlignmentPath; //end new additions int findStartWidthFrame(); int conversionFactor; void calculateAlignmentMatrix(DoubleMatrix firstMatrix, DoubleMatrix secondMatrix, DoubleMatrix *alignmentMatrix); double getDistance(int i, int j); double getMinimum(int i, int j, float newValue); bool extendAlignmentUp(int endIndexY, DoubleMatrix *alignmentMatrix); bool extendAlignmentAlong(int endIndexX, DoubleMatrix *alignmentMatrix); void calculateMinimumAlignmentPath(DoubleMatrix* alignmentMatrix, IntMatrix* backPath, bool pickMinimumFlag);//writes the backwards laignment path to *backPath bool findPreviousMinimumInBackwardsPath(DoubleMatrix* alignmentMatrix, IntMatrix* backPath); bool testForNewAlignmentMinimum(double *previousMinimum, int i, int j, DoubleMatrix* alignmentMatrix); int findMinimumOfVector(DoubleVector *d); void extendForwardAlignmentPath(int endX, IntMatrix* backPath, int anchorPointX, int anchorPointY);//specify forwards path to extend? void addNewForwardsPath(int indexX, IntMatrix* backPath, int anchorPointX, int anchorPointY); int getMinimumIndexOfColumnFromMatrix(int i, DoubleMatrix* matrix); //PART ALIGNMENT FUNCTIONS void calculatePartSimilarityMatrix(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX); void calculatePartAlignmentMatrix(int endIndexX, int endIndexY, DoubleMatrix* alignmentMatrix, DoubleMatrix* simMatrix); double getDistanceFromMatrix(int i, int j, DoubleMatrix* simMatrix); double getMinimumFromMatrix(int i, int j, float newValue, DoubleMatrix* alignMatrix); void calculatePartMinimumAlignmentPath(int startX, int startY, int endX, int endY, DoubleMatrix alignmentMatrix); // bool findPreviousMinimumInPartBackwardsPath(DoubleMatrix* alignmentMatrix); double getRestrictedMinimum(int i, int j, float newValue, int minX, int minY); bool extendRestrictedAlignmentUp(int endIndexY, DoubleMatrix *alignmentMatrix, DoubleMatrix* simMatrix); bool extendRestrictedAlignmentAlong(int endIndexX, DoubleMatrix* alignmentMatrix, DoubleMatrix* simMatrix); void printBackwardsPath(int startIndex, int endIndex, const IntMatrix* backPath); void copyForwardsPathToBackwardsPath(); float diagonalPenalty; bool useDotProduct; }; #endif