diff NNLSChroma.cpp @ 100:d1398182a072 matthiasm-plugin

s parameter setting now has an effect
author Matthias Mauch <mail@matthiasmauch.net>
date Tue, 07 Dec 2010 10:56:55 +0900
parents b56dde3417d4
children 96769283f836 be2e5d44ce79
line wrap: on
line diff
--- a/NNLSChroma.cpp	Fri Dec 03 19:10:09 2010 +0900
+++ b/NNLSChroma.cpp	Tue Dec 07 10:56:55 2010 +0900
@@ -226,9 +226,18 @@
 NNLSChroma::FeatureSet
 NNLSChroma::getRemainingFeatures()
 {
+    static const int nConsonance = 24;
+    float consonancepattern[nConsonance] = {0,-1,-1,1,1,1,-1,1,1,1,-1,-1,1,-1,-1,1,1,1,-1,1,1,1,-1,-1};
+    float consonancemean = 0;
+    for (int i = 0; i< nConsonance; ++i) {
+        consonancemean += consonancepattern[i]/nConsonance;
+    }
     
-    float consonancepattern[24] = {0,-1,-1,1,1,1,-1,1,1,1,-1,-1,1,-1,-1,1,1,1,-1,1,1,1,-1,-1};
-    // for (int i = 0; i< 12; ++i) cerr << consonancepattern[i]<< endl; 
+    cerr << "consonancemean = " << consonancemean << endl;
+    
+    for (int i = 0; i< nConsonance; ++i) {
+        consonancepattern[i] -= consonancemean;
+    }
     if (debug_on) cerr << "--> getRemainingFeatures" << endl;
     FeatureSet fsOut;
     if (m_logSpectrum.size() == 0) return fsOut;
@@ -430,12 +439,12 @@
         
         consonance.values.push_back(0);
         for (int iSemitone = 0; iSemitone < 84-24; ++iSemitone) {            
-            notesum += f3.values[iSemitone] * f3.values[iSemitone];
+            notesum += f3.values[iSemitone] * f3.values[iSemitone] * treblewindow[iSemitone] * treblewindow[iSemitone];
             float tempconsonance = 0;
             for (int jSemitone = 1; jSemitone < 24; ++jSemitone) {
-                tempconsonance += f3.values[iSemitone+jSemitone] * (consonancepattern[jSemitone]);
+                tempconsonance += f3.values[iSemitone+jSemitone] * (consonancepattern[jSemitone]) * treblewindow[iSemitone+jSemitone];
             }
-            consonance.values[0] += (f3.values[iSemitone] * tempconsonance);
+            consonance.values[0] += (f3.values[iSemitone] * tempconsonance * treblewindow[iSemitone]);
         }
         if (notesum > 0) consonance.values[0] /= notesum;