Mercurial > hg > nnls-chroma
diff NNLSChroma.cpp @ 85:ccc0d4b3f867 consonance
implemented consonance
author | matthiasm |
---|---|
date | Thu, 25 Nov 2010 02:26:52 +0900 |
parents | 05e6b8a2fdcd |
children | e5c16976513d |
line wrap: on
line diff
--- a/NNLSChroma.cpp Wed Nov 24 21:58:42 2010 +0900 +++ b/NNLSChroma.cpp Thu Nov 25 02:26:52 2010 +0900 @@ -227,8 +227,8 @@ NNLSChroma::getRemainingFeatures() { - float consonancepattern[] = {0,-1,-1,1,1,1,-1,1,1,1,-1,-1}; - for (int i = 0; i< 12,++i) cerr << consonancepattern[i]<< cerr; + 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; if (debug_on) cerr << "--> getRemainingFeatures" << endl; FeatureSet fsOut; if (m_logSpectrum.size() == 0) return fsOut; @@ -274,6 +274,7 @@ f2.timestamp = f1.timestamp; f2.values.push_back(0.0); f2.values.push_back(0.0); // set lower edge to zero + if (m_tuneLocal) { intShift = floor(m_localTuning[count] * 3); floatShift = m_localTuning[count] * 3 - intShift; // floatShift is a really bad name for this @@ -334,7 +335,8 @@ Feature f4; // treble chromagram Feature f5; // bass chromagram Feature f6; // treble and bass chromagram - + Feature consonance; + f3.hasTimestamp = true; f3.timestamp = f2.timestamp; @@ -347,6 +349,9 @@ f6.hasTimestamp = true; f6.timestamp = f2.timestamp; + consonance.hasTimestamp = true; + consonance.timestamp = f2.timestamp; + float b[nNote]; bool some_b_greater_zero = false; @@ -420,7 +425,20 @@ } else { for (int i = 0; i < 84; ++i) f3.values.push_back(0); } - + + float notesum = 0; + + consonance.values.push_back(0); + for (int iSemitone = 0; iSemitone < 84-24; ++iSemitone) { + notesum += f3.values[iSemitone]; + float tempconsonance = 0; + for (int jSemitone = 1; jSemitone < 24; ++jSemitone) { + tempconsonance += f3.values[iSemitone+jSemitone] * (consonancepattern[jSemitone]); + } + consonance.values[0] += (f3.values[iSemitone] * tempconsonance); + } + if (notesum > 0) consonance.values[0] /= (notesum * notesum); + f4.values = chroma; f5.values = basschroma; chroma.insert(chroma.begin(), basschroma.begin(), basschroma.end()); // just stack the both chromas @@ -483,6 +501,7 @@ fsOut[m_outputChroma].push_back(f4); fsOut[m_outputBassChroma].push_back(f5); fsOut[m_outputBothChroma].push_back(f6); + fsOut[m_outputConsonance].push_back(consonance); count++; } cerr << "done." << endl;