diff audioDB.cpp @ 70:c3f7ee73bdde

Fix various off-by-one errors in the radius search (makes tests/0010 pass)
author mas01cr
date Wed, 26 Sep 2007 15:14:54 +0000
parents 4c4c4ca6b59e
children ec349966368c
line wrap: on
line diff
--- a/audioDB.cpp	Wed Sep 26 15:12:49 2007 +0000
+++ b/audioDB.cpp	Wed Sep 26 15:14:54 2007 +0000
@@ -1937,13 +1937,13 @@
   unsigned processedTracks=0;
   for(i=0; i<dbH->numFiles; i++){
     if(trackTable[i]>sequenceLength-1){
-      w = trackTable[i]-sequenceLength;
+      w = trackTable[i]-sequenceLength+1;
       pn = sMeanL2+i;
       *pn=0;
       while(w--)
 	if(*ps>0)
 	  *pn+=*ps++;
-      *pn/=trackTable[i]-sequenceLength;
+      *pn/=trackTable[i]-sequenceLength+1;
       SILENCE_THRESH+=*pn;
       processedTracks++;
     }
@@ -2118,7 +2118,7 @@
     trackOffset=trackOffsetTable[track];     // numDoubles offset
     trackIndexOffset=trackOffset/dbH->dim; // numVectors offset
 
-    if(sequenceLength<trackTable[track]){  // test for short sequences
+    if(sequenceLength<=trackTable[track]){  // test for short sequences
       
       if(verbosity>7) {
 	cerr << track << "." << trackIndexOffset << "." << trackTable[track] << " | ";cerr.flush();
@@ -2192,8 +2192,8 @@
 	}
 
 	// Search for minimum distance by shingles (concatenated vectors)
-	for(j=0;j<numVectors-wL;j+=HOP_SIZE)
-	  for(k=0;k<trackTable[track]-wL;k+=HOP_SIZE){
+	for(j=0;j<=numVectors-wL;j+=HOP_SIZE)
+	  for(k=0;k<=trackTable[track]-wL;k+=HOP_SIZE){
 	    thisDist=2-(2/(qNorm[j]*sNorm[trackIndexOffset+k]))*DD[j][k];
 	    if(verbosity>10) {
 	      cerr << thisDist << " " << qNorm[j] << " " << sNorm[trackIndexOffset+k] << endl;