Mercurial > hg > match-vamp
diff src/FeatureExtractor.cpp @ 178:1440773da492 tuning-rescale
Merge from refactors branch
author | Chris Cannam |
---|---|
date | Mon, 16 Feb 2015 14:47:43 +0000 |
parents | 001db4c32eb0 50bf5c5bca34 |
children | d1bc89794cd4 |
line wrap: on
line diff
--- a/src/FeatureExtractor.cpp Thu Feb 05 16:26:41 2015 +0000 +++ b/src/FeatureExtractor.cpp Mon Feb 16 14:47:43 2015 +0000 @@ -24,7 +24,7 @@ using namespace std; -#define DEBUG_FEATURE_EXTRACTOR 1 +//#define DEBUG_FEATURE_EXTRACTOR 1 FeatureExtractor::FeatureExtractor(Parameters parameters) : m_params(parameters) @@ -95,21 +95,36 @@ int i = 0; while (i <= crossoverBin) { - m_freqMap[i] = i; - ++i; + double freq = i * binWidth; + if (freq < m_params.minFrequency || freq > m_params.maxFrequency) { + m_freqMap[i++] = -1; + } else { + m_freqMap[i] = i; + i++; + } } while (i <= m_params.fftSize/2) { - double midi = log(i * binWidth / refFreq) / log(2.0) * 12 + 69; - if (midi > 127) midi = 127; - int target = crossoverBin + lrint(midi) - crossoverMidi; - if (target >= m_featureSize) target = m_featureSize - 1; - m_freqMap[i++] = target; + double freq = i * binWidth; + if (freq < m_params.minFrequency || freq > m_params.maxFrequency) { + m_freqMap[i++] = -1; + } else { + double midi = log(freq / refFreq) / log(2.0) * 12 + 69; + if (midi > 127) midi = 127; + int target = crossoverBin + lrint(midi) - crossoverMidi; + if (target >= m_featureSize) target = m_featureSize - 1; + m_freqMap[i++] = target; + } } #ifdef DEBUG_FEATURE_EXTRACTOR cerr << "FeatureExtractor: crossover bin is " << crossoverBin << " for midi " << crossoverMidi << endl; + cerr << "FeatureExtractor: map is:" << endl; + for (i = 0; i <= m_params.fftSize/2; ++i) { + cerr << i << ": " << m_freqMap[i] << ", "; + } + cerr << endl; #endif } @@ -121,11 +136,21 @@ int crossoverBin = (int)(1 / (pow(2, 1/12.0) - 1)); int i = 0; while (i <= crossoverBin) { - m_freqMap[i++] = 0; + double freq = i * binWidth; + if (freq < m_params.minFrequency || freq > m_params.maxFrequency) { + m_freqMap[i++] = -1; + } else { + m_freqMap[i++] = 0; + } } while (i <= m_params.fftSize/2) { - double midi = log(i * binWidth / refFreq) / log(2.0) * 12 + 69; - m_freqMap[i++] = (lrint(midi)) % 12 + 1; + double freq = i * binWidth; + if (freq < m_params.minFrequency || freq > m_params.maxFrequency) { + m_freqMap[i++] = -1; + } else { + double midi = log(freq / refFreq) / log(2.0) * 12 + 69; + m_freqMap[i++] = (lrint(midi)) % 12 + 1; + } } } @@ -165,12 +190,18 @@ vector<double> scaled = scaleMags(mags); for (int i = 0; i <= m_params.fftSize/2; i++) { - frame[m_freqMap[i]] += scaled[i]; + int index = m_freqMap[i]; + if (index >= 0) { + frame[index] += scaled[i]; + } } } else { for (int i = 0; i <= m_params.fftSize/2; i++) { - frame[m_freqMap[i]] += mags[i]; + int index = m_freqMap[i]; + if (index >= 0) { + frame[index] += mags[i]; + } } }