Mercurial > hg > match-vamp
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(); |