comparison src/MatchVampPlugin.cpp @ 38:8cce4e13ede3 refactors

Make use of FeatureExtractor in Matcher
author Chris Cannam
date Thu, 13 Nov 2014 12:50:54 +0000
parents 16870e8770ae
children 8cbc15519d2c a540137d393b
comparison
equal deleted inserted replaced
37:91410483228b 38:8cce4e13ede3
55 m_serialise(false), 55 m_serialise(false),
56 m_begin(true), 56 m_begin(true),
57 m_locked(false), 57 m_locked(false),
58 m_smooth(true), 58 m_smooth(true),
59 m_params(inputSampleRate, defaultStepTime, m_blockSize), 59 m_params(inputSampleRate, defaultStepTime, m_blockSize),
60 m_defaultParams(inputSampleRate, defaultStepTime, m_blockSize) 60 m_defaultParams(inputSampleRate, defaultStepTime, m_blockSize),
61 m_feParams(inputSampleRate, m_blockSize),
62 m_defaultFeParams(inputSampleRate, m_blockSize)
61 { 63 {
62 if (inputSampleRate < sampleRateMin) { 64 if (inputSampleRate < sampleRateMin) {
63 std::cerr << "MatchVampPlugin::MatchVampPlugin: input sample rate " 65 std::cerr << "MatchVampPlugin::MatchVampPlugin: input sample rate "
64 << inputSampleRate << " < min supported rate " 66 << inputSampleRate << " < min supported rate "
65 << sampleRateMin << ", plugin will refuse to initialise" 67 << sampleRateMin << ", plugin will refuse to initialise"
155 desc.identifier = "framenorm"; 157 desc.identifier = "framenorm";
156 desc.name = "Frame Normalisation"; 158 desc.name = "Frame Normalisation";
157 desc.description = "Type of normalisation to use for frequency-domain audio features"; 159 desc.description = "Type of normalisation to use for frequency-domain audio features";
158 desc.minValue = 0; 160 desc.minValue = 0;
159 desc.maxValue = 2; 161 desc.maxValue = 2;
160 desc.defaultValue = (int)m_defaultParams.frameNorm; 162 desc.defaultValue = (int)m_defaultFeParams.frameNorm;
161 desc.isQuantized = true; 163 desc.isQuantized = true;
162 desc.quantizeStep = 1; 164 desc.quantizeStep = 1;
163 desc.valueNames.clear(); 165 desc.valueNames.clear();
164 desc.valueNames.push_back("None"); 166 desc.valueNames.push_back("None");
165 desc.valueNames.push_back("Sum To 1"); 167 desc.valueNames.push_back("Sum To 1");
185 desc.identifier = "usespecdiff"; 187 desc.identifier = "usespecdiff";
186 desc.name = "Use Spectral Difference"; 188 desc.name = "Use Spectral Difference";
187 desc.description = "Whether to use half-wave rectified spectral difference instead of straight spectrum"; 189 desc.description = "Whether to use half-wave rectified spectral difference instead of straight spectrum";
188 desc.minValue = 0; 190 desc.minValue = 0;
189 desc.maxValue = 1; 191 desc.maxValue = 1;
190 desc.defaultValue = m_defaultParams.useSpectralDifference ? 1 : 0; 192 desc.defaultValue = m_defaultFeParams.useSpectralDifference ? 1 : 0;
191 desc.isQuantized = true; 193 desc.isQuantized = true;
192 desc.quantizeStep = 1; 194 desc.quantizeStep = 1;
193 list.push_back(desc); 195 list.push_back(desc);
194 196
195 desc.identifier = "usechroma"; 197 desc.identifier = "usechroma";
196 desc.name = "Use Chroma Frequency Map"; 198 desc.name = "Use Chroma Frequency Map";
197 desc.description = "Whether to use a chroma frequency map instead of the default warped spectrogram"; 199 desc.description = "Whether to use a chroma frequency map instead of the default warped spectrogram";
198 desc.minValue = 0; 200 desc.minValue = 0;
199 desc.maxValue = 1; 201 desc.maxValue = 1;
200 desc.defaultValue = m_defaultParams.useChromaFrequencyMap ? 1 : 0; 202 desc.defaultValue = m_defaultFeParams.useChromaFrequencyMap ? 1 : 0;
201 desc.isQuantized = true; 203 desc.isQuantized = true;
202 desc.quantizeStep = 1; 204 desc.quantizeStep = 1;
203 list.push_back(desc); 205 list.push_back(desc);
204 206
205 desc.identifier = "gradientlimit"; 207 desc.identifier = "gradientlimit";
241 MatchVampPlugin::getParameter(std::string name) const 243 MatchVampPlugin::getParameter(std::string name) const
242 { 244 {
243 if (name == "serialise") { 245 if (name == "serialise") {
244 return m_serialise ? 1.0 : 0.0; 246 return m_serialise ? 1.0 : 0.0;
245 } else if (name == "framenorm") { 247 } else if (name == "framenorm") {
246 return (int)m_params.frameNorm; 248 return (int)m_feParams.frameNorm;
247 } else if (name == "distnorm") { 249 } else if (name == "distnorm") {
248 return (int)m_params.distanceNorm; 250 return (int)m_params.distanceNorm;
249 } else if (name == "usespecdiff") { 251 } else if (name == "usespecdiff") {
250 return m_params.useSpectralDifference ? 1.0 : 0.0; 252 return m_feParams.useSpectralDifference ? 1.0 : 0.0;
251 } else if (name == "usechroma") { 253 } else if (name == "usechroma") {
252 return m_params.useChromaFrequencyMap ? 1.0 : 0.0; 254 return m_feParams.useChromaFrequencyMap ? 1.0 : 0.0;
253 } else if (name == "gradientlimit") { 255 } else if (name == "gradientlimit") {
254 return m_params.maxRunCount; 256 return m_params.maxRunCount;
255 } else if (name == "zonewidth") { 257 } else if (name == "zonewidth") {
256 return m_params.blockTime; 258 return m_params.blockTime;
257 } else if (name == "smooth") { 259 } else if (name == "smooth") {
265 MatchVampPlugin::setParameter(std::string name, float value) 267 MatchVampPlugin::setParameter(std::string name, float value)
266 { 268 {
267 if (name == "serialise") { 269 if (name == "serialise") {
268 m_serialise = (value > 0.5); 270 m_serialise = (value > 0.5);
269 } else if (name == "framenorm") { 271 } else if (name == "framenorm") {
270 m_params.frameNorm = (Matcher::FrameNormalisation)(int(value + 0.1)); 272 m_feParams.frameNorm = (FeatureExtractor::FrameNormalisation)(int(value + 0.1));
271 } else if (name == "distnorm") { 273 } else if (name == "distnorm") {
272 m_params.distanceNorm = (DistanceMetric::DistanceNormalisation)(int(value + 0.1)); 274 m_params.distanceNorm = (DistanceMetric::DistanceNormalisation)(int(value + 0.1));
273 } else if (name == "usespecdiff") { 275 } else if (name == "usespecdiff") {
274 m_params.useSpectralDifference = (value > 0.5); 276 m_feParams.useSpectralDifference = (value > 0.5);
275 } else if (name == "usechroma") { 277 } else if (name == "usechroma") {
276 m_params.useChromaFrequencyMap = (value > 0.5); 278 m_feParams.useChromaFrequencyMap = (value > 0.5);
277 } else if (name == "gradientlimit") { 279 } else if (name == "gradientlimit") {
278 m_params.maxRunCount = int(value + 0.1); 280 m_params.maxRunCount = int(value + 0.1);
279 } else if (name == "zonewidth") { 281 } else if (name == "zonewidth") {
280 m_params.blockTime = value; 282 m_params.blockTime = value;
281 } else if (name == "smooth") { 283 } else if (name == "smooth") {
298 void 300 void
299 MatchVampPlugin::createMatchers() 301 MatchVampPlugin::createMatchers()
300 { 302 {
301 m_params.hopTime = m_stepTime; 303 m_params.hopTime = m_stepTime;
302 m_params.fftSize = m_blockSize; 304 m_params.fftSize = m_blockSize;
303 pm1 = new Matcher(m_params, 0); 305 m_feParams.fftSize = m_blockSize;
304 pm2 = new Matcher(m_params, pm1); 306 pm1 = new Matcher(m_params, m_feParams, 0);
307 pm2 = new Matcher(m_params, m_feParams, pm1);
305 pm1->setOtherMatcher(pm2); 308 pm1->setOtherMatcher(pm2);
306 feeder = new MatchFeeder(pm1, pm2); 309 feeder = new MatchFeeder(pm1, pm2);
307 } 310 }
308 311
309 bool 312 bool
418 desc.sampleType = OutputDescriptor::VariableSampleRate; 421 desc.sampleType = OutputDescriptor::VariableSampleRate;
419 desc.sampleRate = outRate; 422 desc.sampleRate = outRate;
420 m_abRatioOutNo = list.size(); 423 m_abRatioOutNo = list.size();
421 list.push_back(desc); 424 list.push_back(desc);
422 425
426 int featureSize = FeatureExtractor(m_feParams).getFeatureSize();
427
423 desc.identifier = "a_features"; 428 desc.identifier = "a_features";
424 desc.name = "A Features"; 429 desc.name = "A Features";
425 desc.description = "Spectral features extracted from performance A"; 430 desc.description = "Spectral features extracted from performance A";
426 desc.unit = ""; 431 desc.unit = "";
427 desc.hasFixedBinCount = true; 432 desc.hasFixedBinCount = true;
428 desc.binCount = Matcher::getFeatureSizeFor(m_params); 433 desc.binCount = featureSize;
429 desc.hasKnownExtents = false; 434 desc.hasKnownExtents = false;
430 desc.isQuantized = false; 435 desc.isQuantized = false;
431 desc.sampleType = OutputDescriptor::FixedSampleRate; 436 desc.sampleType = OutputDescriptor::FixedSampleRate;
432 desc.sampleRate = outRate; 437 desc.sampleRate = outRate;
433 m_aFeaturesOutNo = list.size(); 438 m_aFeaturesOutNo = list.size();
436 desc.identifier = "b_features"; 441 desc.identifier = "b_features";
437 desc.name = "B Features"; 442 desc.name = "B Features";
438 desc.description = "Spectral features extracted from performance B"; 443 desc.description = "Spectral features extracted from performance B";
439 desc.unit = ""; 444 desc.unit = "";
440 desc.hasFixedBinCount = true; 445 desc.hasFixedBinCount = true;
441 desc.binCount = Matcher::getFeatureSizeFor(m_params); 446 desc.binCount = featureSize;
442 desc.hasKnownExtents = false; 447 desc.hasKnownExtents = false;
443 desc.isQuantized = false; 448 desc.isQuantized = false;
444 desc.sampleType = OutputDescriptor::FixedSampleRate; 449 desc.sampleType = OutputDescriptor::FixedSampleRate;
445 desc.sampleRate = outRate; 450 desc.sampleRate = outRate;
446 m_bFeaturesOutNo = list.size(); 451 m_bFeaturesOutNo = list.size();