changeset 9:9adcffbdc16d

fixed bug with switching and make sure alignIndex never goes to zero, added in limit to the joint matrix that gets created.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Mon, 07 Nov 2011 18:08:43 +0000
parents 166bece5922c
children 69419f188284
files src/TimeWarp.cpp src/TimeWarp.h src/testApp.cpp src/timeWarp.cpp src/timeWarp.h
diffstat 5 files changed, 28 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/TimeWarp.cpp	Mon Nov 07 17:24:52 2011 +0000
+++ b/src/TimeWarp.cpp	Mon Nov 07 18:08:43 2011 +0000
@@ -428,7 +428,7 @@
 
 
 
-void TimeWarp::calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX){
+void TimeWarp::calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX, int endY){
 	printf("PART SIM CALC Calculate similarity : pointers : size %i x %i  ", startX, startY);//(int) (*firstEnergyVector).size(), (int) (*secondEnergyVector).size());
 	
 	conversionFactor = (int) round((*firstEnergyVector).size() / (*chromaSimMatrix).size() );
@@ -443,7 +443,8 @@
 	for (int x = startX;x <= endX;x++){
 		DoubleVector d;
 		
-		for (int y = startY;y < (*secondEnergyVector).size();y++){
+		for (int y = startY;y < min( endY+1, (int)(*secondEnergyVector).size());y++){
+			//was thinking to restrict the y part too, but not working yet
 			
 			distance = (*firstEnergyVector)[x] * (*secondEnergyVector)[y];//energy similarity
 			
--- a/src/TimeWarp.h	Mon Nov 07 17:24:52 2011 +0000
+++ b/src/TimeWarp.h	Mon Nov 07 18:08:43 2011 +0000
@@ -89,7 +89,7 @@
 
 	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);
+	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);
--- a/src/testApp.cpp	Mon Nov 07 17:24:52 2011 +0000
+++ b/src/testApp.cpp	Mon Nov 07 18:08:43 2011 +0000
@@ -183,7 +183,8 @@
 	//	tw.calculatePartSimilarityMatrix(&tw.firstChromaEnergyMatrix, &tw.secondChromaEnergyMatrix, &tw.tmpSimilarityMatrix, startFrameX, startFrameY, startFrameX+frameSize);
 
 	//NEW FUNCTION - calls only the energy and uses the stored chromagram	
-	tw.calculatePartJointSimilarityMatrix(&tw.firstEnergyVector, &tw.secondEnergyVector, &tw.chromaSimilarityMatrix, &tw.tmpSimilarityMatrix, startFrameX, startFrameY, startFrameX+frameSize);
+	tw.calculatePartJointSimilarityMatrix(&tw.firstEnergyVector, &tw.secondEnergyVector, &tw.chromaSimilarityMatrix, &tw.tmpSimilarityMatrix, 
+										  startFrameX, startFrameY, startFrameX+frameSize, startFrameY + 3*frameSize);
 
 							
 		
@@ -212,11 +213,11 @@
 	tw.calculateMinimumAlignmentPath(&tw.tmpAlignmentMeasureMatrix, &tw.tmpBackwardsPath, true);//true is for greedy calculation
 	printf("\n PART ALIGNMENT GENERATES THIS BACKWARDS PATH:: \n");
 	tw.extendForwardAlignmentPath(hopsize, &tw.tmpBackwardsPath, startFrameX, startFrameY);
-		printf("forwards path printed\n");
+	
 		startFrameY = tw.forwardsAlignmentPath[1][(tw.forwardsAlignmentPath[0].size()-1)];
 		
-		
-		tw.printBackwardsPath(0, tw.forwardsAlignmentPath[0].size(), &tw.forwardsAlignmentPath);	
+		//printf("forwards path printed\n");
+	//	tw.printBackwardsPath(0, tw.forwardsAlignmentPath[0].size(), &tw.forwardsAlignmentPath);	
 		//pushSimCode()?
 		
 	}//end for startFrameX
@@ -306,12 +307,17 @@
 
 void testApp::updateAlignmentPathIndex(int identifier){
 
+	
 	if (tw.backwardsAlignmentPath.size() > 0){
+		
+		if (backwardsAlignmentIndex >= tw.backwardsAlignmentPath[identifier].size())
+			backwardsAlignmentIndex = tw.backwardsAlignmentPath[identifier].size()-1;
+		
 	//this is the alignment where we are currently playing - i.e. switching between files
 	
 		int chromaPosition = audioPosition;///conversionFactor;//CHROMA_CONVERSION_FACTOR;
 	
-	while (tw.backwardsAlignmentPath[identifier][backwardsAlignmentIndex] < chromaPosition)
+	while (tw.backwardsAlignmentPath[identifier][backwardsAlignmentIndex] < chromaPosition && backwardsAlignmentIndex > 0)
 	{
 		backwardsAlignmentIndex--;
 	}
@@ -628,7 +634,7 @@
 	//	printf("DRAW SIM SIZE start frames  %i x %i \n", startingXframe, startingYframe);
 	if (tw.backwardsAlignmentPath.size() > 0 ){ 
 		startingXframe = (tw.backwardsAlignmentPath[0][backwardsAlignmentIndex]/ scrollWidth);
-		startingYframe = max(0, (int)(tw.backwardsAlignmentPath[1][backwardsAlignmentIndex]/ scrollWidth));//*conversionFactor 
+		startingYframe = max(0	, (int)(tw.backwardsAlignmentPath[1][backwardsAlignmentIndex]/ scrollWidth));//*conversionFactor 
 		//FIX THE 1 - ASDDED AS DEBUG
 	//	printf("alignment index %i, VERSUS DRAW SIM SIZE %i x %i \n", backwardsAlignmentIndex, startingXframe, startingYframe);
 	}
@@ -1409,7 +1415,7 @@
 	//swapping between files
 	//printf("current playing (energy scale) frame was %i \n", currentPlayingFrame); 
 	float oldPosition = (*playingAudio).getPosition();
-	printf("\n playing position is %f and c onv factor %f \n", (*playingAudio).getPosition(), conversionFactor);
+	printf("\n playing position is %f and conv factor %f \n", (*playingAudio).getPosition(), conversionFactor);
 
 	//(*playingAudio).stop(); 
 	(*playingAudio).setPaused(true);
@@ -1430,7 +1436,7 @@
 	
 //	currentChromaFrame = oldPosition * (float) tw.backwardsAlignmentPath[1-newIndicator][0];
 	currentChromaFrame = currentPlayingFrame;// / conversionFactor;
-	printf("current chroma frame %i and using energy frames would have been %i \n", currentChromaFrame, currentPlayingFrame / conversionFactor);//CHROMA_CONVERSION_FACTOR);
+	printf("current chroma frame %i \n", currentChromaFrame);//and using energy frames would have been %i \n", currentChromaFrame, currentPlayingFrame / conversionFactor);//CHROMA_CONVERSION_FACTOR);
 
 	int matchingFrame = findMatchFromAlignment(firstAudioFilePlaying);		
 	float relativePosition = matchingFrame / (float) tw.backwardsAlignmentPath[newIndicator][0];
@@ -1440,7 +1446,7 @@
 	(*playingAudio).setPosition(relativePosition);
 	
 	printf("matching frame is %i and length is %i \n", matchingFrame, tw.backwardsAlignmentPath[newIndicator][0]);
-	printf("new playing position is %f \n", (*playingAudio).getPosition());
+	printf("new playing position is %f and back align index %i \n", (*playingAudio).getPosition(), backwardsAlignmentIndex);
 	
 	firstAudioFilePlaying = !firstAudioFilePlaying;
 	
@@ -1458,10 +1464,13 @@
 
 	int oppositeIndicator = 1 - indicator;
   
-	int frame = tw.backwardsAlignmentPath[indicator].size()-1;
+	int frame = backwardsAlignmentIndex;//	tw.backwardsAlignmentPath[indicator].size()-1;
 
+	while (tw.backwardsAlignmentPath[indicator][frame] > currentChromaFrame && backwardsAlignmentIndex < tw.backwardsAlignmentPath[indicator].size()-1){
+		frame++;
+	}
 	
-	while (tw.backwardsAlignmentPath[indicator][frame] < currentChromaFrame){
+	while (tw.backwardsAlignmentPath[indicator][frame] < currentChromaFrame && frame > 0){
 		frame--;
 	}
 	//printf("frame found is %i \n", frame);
--- a/src/timeWarp.cpp	Mon Nov 07 17:24:52 2011 +0000
+++ b/src/timeWarp.cpp	Mon Nov 07 18:08:43 2011 +0000
@@ -428,7 +428,7 @@
 
 
 
-void TimeWarp::calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX){
+void TimeWarp::calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX, int endY){
 	printf("PART SIM CALC Calculate similarity : pointers : size %i x %i  ", startX, startY);//(int) (*firstEnergyVector).size(), (int) (*secondEnergyVector).size());
 	
 	conversionFactor = (int) round((*firstEnergyVector).size() / (*chromaSimMatrix).size() );
@@ -443,7 +443,8 @@
 	for (int x = startX;x <= endX;x++){
 		DoubleVector d;
 		
-		for (int y = startY;y < (*secondEnergyVector).size();y++){
+		for (int y = startY;y < min( endY+1, (int)(*secondEnergyVector).size());y++){
+			//was thinking to restrict the y part too, but not working yet
 			
 			distance = (*firstEnergyVector)[x] * (*secondEnergyVector)[y];//energy similarity
 			
--- a/src/timeWarp.h	Mon Nov 07 17:24:52 2011 +0000
+++ b/src/timeWarp.h	Mon Nov 07 18:08:43 2011 +0000
@@ -89,7 +89,7 @@
 
 	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);
+	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);