Mercurial > hg > match-vamp
comparison src/MatchVampPlugin.cpp @ 180:d1bc89794cd4 tuning-rescale
Build with -Wconversion
author | Chris Cannam |
---|---|
date | Thu, 19 Feb 2015 16:14:33 +0000 |
parents | 937951e66c5b |
children | a17b22abd551 |
comparison
equal
deleted
inserted
replaced
179:9ab52cb6baa3 | 180:d1bc89794cd4 |
---|---|
207 desc.identifier = "usespecdiff"; | 207 desc.identifier = "usespecdiff"; |
208 desc.name = "Use feature difference"; | 208 desc.name = "Use feature difference"; |
209 desc.description = "Whether to use half-wave rectified feature-to-feature difference instead of straight spectral or chroma feature"; | 209 desc.description = "Whether to use half-wave rectified feature-to-feature difference instead of straight spectral or chroma feature"; |
210 desc.minValue = 0; | 210 desc.minValue = 0; |
211 desc.maxValue = 1; | 211 desc.maxValue = 1; |
212 desc.defaultValue = (int)m_defaultFcParams.order; | 212 desc.defaultValue = (float)m_defaultFcParams.order; |
213 desc.isQuantized = true; | 213 desc.isQuantized = true; |
214 desc.quantizeStep = 1; | 214 desc.quantizeStep = 1; |
215 list.push_back(desc); | 215 list.push_back(desc); |
216 | 216 |
217 desc.identifier = "framenorm"; | 217 desc.identifier = "framenorm"; |
218 desc.name = "Frame normalisation"; | 218 desc.name = "Frame normalisation"; |
219 desc.description = "Type of normalisation to use for features"; | 219 desc.description = "Type of normalisation to use for features"; |
220 desc.minValue = 0; | 220 desc.minValue = 0; |
221 desc.maxValue = 2; | 221 desc.maxValue = 2; |
222 desc.defaultValue = (int)m_defaultFcParams.norm; | 222 desc.defaultValue = (float)m_defaultFcParams.norm; |
223 desc.isQuantized = true; | 223 desc.isQuantized = true; |
224 desc.quantizeStep = 1; | 224 desc.quantizeStep = 1; |
225 desc.valueNames.clear(); | 225 desc.valueNames.clear(); |
226 desc.valueNames.push_back("None"); | 226 desc.valueNames.push_back("None"); |
227 desc.valueNames.push_back("Sum to 1"); | 227 desc.valueNames.push_back("Sum to 1"); |
233 desc.identifier = "metric"; | 233 desc.identifier = "metric"; |
234 desc.name = "Distance metric"; | 234 desc.name = "Distance metric"; |
235 desc.description = "Metric for distance calculations."; | 235 desc.description = "Metric for distance calculations."; |
236 desc.minValue = 0; | 236 desc.minValue = 0; |
237 desc.maxValue = 2; | 237 desc.maxValue = 2; |
238 desc.defaultValue = (int)m_defaultDParams.metric; | 238 desc.defaultValue = (float)m_defaultDParams.metric; |
239 desc.isQuantized = true; | 239 desc.isQuantized = true; |
240 desc.quantizeStep = 1; | 240 desc.quantizeStep = 1; |
241 desc.valueNames.clear(); | 241 desc.valueNames.clear(); |
242 desc.valueNames.push_back("Manhattan"); | 242 desc.valueNames.push_back("Manhattan"); |
243 desc.valueNames.push_back("Euclidean"); | 243 desc.valueNames.push_back("Euclidean"); |
248 desc.identifier = "distnorm"; | 248 desc.identifier = "distnorm"; |
249 desc.name = "Distance normalisation"; | 249 desc.name = "Distance normalisation"; |
250 desc.description = "Type of normalisation to use for distance metric"; | 250 desc.description = "Type of normalisation to use for distance metric"; |
251 desc.minValue = 0; | 251 desc.minValue = 0; |
252 desc.maxValue = 2; | 252 desc.maxValue = 2; |
253 desc.defaultValue = (int)m_defaultDParams.norm; | 253 desc.defaultValue = (float)m_defaultDParams.norm; |
254 desc.isQuantized = true; | 254 desc.isQuantized = true; |
255 desc.quantizeStep = 1; | 255 desc.quantizeStep = 1; |
256 desc.valueNames.clear(); | 256 desc.valueNames.clear(); |
257 desc.valueNames.push_back("None"); | 257 desc.valueNames.push_back("None"); |
258 desc.valueNames.push_back("Sum of frames"); | 258 desc.valueNames.push_back("Sum of frames"); |
272 desc.identifier = "noise"; | 272 desc.identifier = "noise"; |
273 desc.name = "Add noise"; | 273 desc.name = "Add noise"; |
274 desc.description = "Whether to mix in a small constant white noise term when calculating feature distance. This can improve alignment against sources containing cleanly synthesised audio."; | 274 desc.description = "Whether to mix in a small constant white noise term when calculating feature distance. This can improve alignment against sources containing cleanly synthesised audio."; |
275 desc.minValue = 0; | 275 desc.minValue = 0; |
276 desc.maxValue = 1; | 276 desc.maxValue = 1; |
277 desc.defaultValue = (int)m_defaultDParams.noise; | 277 desc.defaultValue = (float)m_defaultDParams.noise; |
278 desc.isQuantized = true; | 278 desc.isQuantized = true; |
279 desc.quantizeStep = 1; | 279 desc.quantizeStep = 1; |
280 list.push_back(desc); | 280 list.push_back(desc); |
281 | 281 |
282 desc.identifier = "gradientlimit"; | 282 desc.identifier = "gradientlimit"; |
283 desc.name = "Gradient limit"; | 283 desc.name = "Gradient limit"; |
284 desc.description = "Limit of number of frames that will be accepted from one source without a frame from the other source being accepted"; | 284 desc.description = "Limit of number of frames that will be accepted from one source without a frame from the other source being accepted"; |
285 desc.minValue = 1; | 285 desc.minValue = 1; |
286 desc.maxValue = 10; | 286 desc.maxValue = 10; |
287 desc.defaultValue = m_defaultParams.maxRunCount; | 287 desc.defaultValue = (float)m_defaultParams.maxRunCount; |
288 desc.isQuantized = true; | 288 desc.isQuantized = true; |
289 desc.quantizeStep = 1; | 289 desc.quantizeStep = 1; |
290 list.push_back(desc); | 290 list.push_back(desc); |
291 | 291 |
292 desc.identifier = "zonewidth"; | 292 desc.identifier = "zonewidth"; |
338 MatchVampPlugin::getParameter(std::string name) const | 338 MatchVampPlugin::getParameter(std::string name) const |
339 { | 339 { |
340 if (name == "serialise") { | 340 if (name == "serialise") { |
341 return m_serialise ? 1.0 : 0.0; | 341 return m_serialise ? 1.0 : 0.0; |
342 } else if (name == "framenorm") { | 342 } else if (name == "framenorm") { |
343 return (int)m_fcParams.norm; | 343 return (float)m_fcParams.norm; |
344 } else if (name == "distnorm") { | 344 } else if (name == "distnorm") { |
345 return (int)m_dParams.norm; | 345 return (float)m_dParams.norm; |
346 } else if (name == "usespecdiff") { | 346 } else if (name == "usespecdiff") { |
347 return (int)m_fcParams.order; | 347 return (float)m_fcParams.order; |
348 } else if (name == "usechroma") { | 348 } else if (name == "usechroma") { |
349 return m_feParams.useChromaFrequencyMap ? 1.0 : 0.0; | 349 return m_feParams.useChromaFrequencyMap ? 1.0 : 0.0; |
350 } else if (name == "gradientlimit") { | 350 } else if (name == "gradientlimit") { |
351 return m_params.maxRunCount; | 351 return (float)m_params.maxRunCount; |
352 } else if (name == "diagonalweight") { | 352 } else if (name == "diagonalweight") { |
353 return m_params.diagonalWeight; | 353 return m_params.diagonalWeight; |
354 } else if (name == "zonewidth") { | 354 } else if (name == "zonewidth") { |
355 return (float)m_params.blockTime; | 355 return (float)m_params.blockTime; |
356 } else if (name == "smooth") { | 356 } else if (name == "smooth") { |
357 return m_smooth ? 1.0 : 0.0; | 357 return m_smooth ? 1.0 : 0.0; |
358 } else if (name == "silencethreshold") { | 358 } else if (name == "silencethreshold") { |
359 return (float)m_fcParams.silenceThreshold; | 359 return (float)m_fcParams.silenceThreshold; |
360 } else if (name == "metric") { | 360 } else if (name == "metric") { |
361 return (int)m_dParams.metric; | 361 return (float)m_dParams.metric; |
362 } else if (name == "noise") { | 362 } else if (name == "noise") { |
363 return m_dParams.noise; | 363 return m_dParams.noise; |
364 } else if (name == "freq1") { | 364 } else if (name == "freq1") { |
365 return (float)m_feParams.referenceFrequency; | 365 return (float)m_feParams.referenceFrequency; |
366 } else if (name == "freq2") { | 366 } else if (name == "freq2") { |
446 if (channels < getMinChannelCount() || | 446 if (channels < getMinChannelCount() || |
447 channels > getMaxChannelCount()) return false; | 447 channels > getMaxChannelCount()) return false; |
448 if (stepSize > blockSize/2 || | 448 if (stepSize > blockSize/2 || |
449 blockSize != getPreferredBlockSize()) return false; | 449 blockSize != getPreferredBlockSize()) return false; |
450 | 450 |
451 m_stepSize = stepSize; | 451 m_stepSize = (int)stepSize; |
452 m_stepTime = float(stepSize) / m_inputSampleRate; | 452 m_stepTime = float(stepSize) / m_inputSampleRate; |
453 m_blockSize = blockSize; | 453 m_blockSize = (int)blockSize; |
454 | 454 |
455 createMatchers(); | 455 createMatchers(); |
456 m_begin = true; | 456 m_begin = true; |
457 m_locked = false; | 457 m_locked = false; |
458 | 458 |
487 desc.hasKnownExtents = false; | 487 desc.hasKnownExtents = false; |
488 desc.isQuantized = true; | 488 desc.isQuantized = true; |
489 desc.quantizeStep = 1; | 489 desc.quantizeStep = 1; |
490 desc.sampleType = OutputDescriptor::VariableSampleRate; | 490 desc.sampleType = OutputDescriptor::VariableSampleRate; |
491 desc.sampleRate = outRate; | 491 desc.sampleRate = outRate; |
492 m_pathOutNo = list.size(); | 492 m_pathOutNo = int(list.size()); |
493 list.push_back(desc); | 493 list.push_back(desc); |
494 | 494 |
495 desc.identifier = "a_b"; | 495 desc.identifier = "a_b"; |
496 desc.name = "A-B Timeline"; | 496 desc.name = "A-B Timeline"; |
497 desc.description = "Timing in performance B corresponding to moments in performance A"; | 497 desc.description = "Timing in performance B corresponding to moments in performance A"; |
500 desc.binCount = 1; | 500 desc.binCount = 1; |
501 desc.hasKnownExtents = false; | 501 desc.hasKnownExtents = false; |
502 desc.isQuantized = false; | 502 desc.isQuantized = false; |
503 desc.sampleType = OutputDescriptor::VariableSampleRate; | 503 desc.sampleType = OutputDescriptor::VariableSampleRate; |
504 desc.sampleRate = outRate; | 504 desc.sampleRate = outRate; |
505 m_abOutNo = list.size(); | 505 m_abOutNo = int(list.size()); |
506 list.push_back(desc); | 506 list.push_back(desc); |
507 | 507 |
508 desc.identifier = "b_a"; | 508 desc.identifier = "b_a"; |
509 desc.name = "B-A Timeline"; | 509 desc.name = "B-A Timeline"; |
510 desc.description = "Timing in performance A corresponding to moments in performance B"; | 510 desc.description = "Timing in performance A corresponding to moments in performance B"; |
513 desc.binCount = 1; | 513 desc.binCount = 1; |
514 desc.hasKnownExtents = false; | 514 desc.hasKnownExtents = false; |
515 desc.isQuantized = false; | 515 desc.isQuantized = false; |
516 desc.sampleType = OutputDescriptor::VariableSampleRate; | 516 desc.sampleType = OutputDescriptor::VariableSampleRate; |
517 desc.sampleRate = outRate; | 517 desc.sampleRate = outRate; |
518 m_baOutNo = list.size(); | 518 m_baOutNo = int(list.size()); |
519 list.push_back(desc); | 519 list.push_back(desc); |
520 | 520 |
521 desc.identifier = "a_b_divergence"; | 521 desc.identifier = "a_b_divergence"; |
522 desc.name = "A-B Divergence"; | 522 desc.name = "A-B Divergence"; |
523 desc.description = "Difference between timings in performances A and B"; | 523 desc.description = "Difference between timings in performances A and B"; |
526 desc.binCount = 1; | 526 desc.binCount = 1; |
527 desc.hasKnownExtents = false; | 527 desc.hasKnownExtents = false; |
528 desc.isQuantized = false; | 528 desc.isQuantized = false; |
529 desc.sampleType = OutputDescriptor::VariableSampleRate; | 529 desc.sampleType = OutputDescriptor::VariableSampleRate; |
530 desc.sampleRate = outRate; | 530 desc.sampleRate = outRate; |
531 m_abDivOutNo = list.size(); | 531 m_abDivOutNo = int(list.size()); |
532 list.push_back(desc); | 532 list.push_back(desc); |
533 | 533 |
534 desc.identifier = "a_b_temporatio"; | 534 desc.identifier = "a_b_temporatio"; |
535 desc.name = "A-B Tempo Ratio"; | 535 desc.name = "A-B Tempo Ratio"; |
536 desc.description = "Ratio of tempi between performances A and B"; | 536 desc.description = "Ratio of tempi between performances A and B"; |
539 desc.binCount = 1; | 539 desc.binCount = 1; |
540 desc.hasKnownExtents = false; | 540 desc.hasKnownExtents = false; |
541 desc.isQuantized = false; | 541 desc.isQuantized = false; |
542 desc.sampleType = OutputDescriptor::VariableSampleRate; | 542 desc.sampleType = OutputDescriptor::VariableSampleRate; |
543 desc.sampleRate = outRate; | 543 desc.sampleRate = outRate; |
544 m_abRatioOutNo = list.size(); | 544 m_abRatioOutNo = int(list.size()); |
545 list.push_back(desc); | 545 list.push_back(desc); |
546 | 546 |
547 int featureSize = FeatureExtractor(m_feParams).getFeatureSize(); | 547 int featureSize = FeatureExtractor(m_feParams).getFeatureSize(); |
548 | 548 |
549 desc.identifier = "a_features"; | 549 desc.identifier = "a_features"; |
554 desc.binCount = featureSize; | 554 desc.binCount = featureSize; |
555 desc.hasKnownExtents = false; | 555 desc.hasKnownExtents = false; |
556 desc.isQuantized = false; | 556 desc.isQuantized = false; |
557 desc.sampleType = OutputDescriptor::FixedSampleRate; | 557 desc.sampleType = OutputDescriptor::FixedSampleRate; |
558 desc.sampleRate = outRate; | 558 desc.sampleRate = outRate; |
559 m_aFeaturesOutNo = list.size(); | 559 m_aFeaturesOutNo = int(list.size()); |
560 list.push_back(desc); | 560 list.push_back(desc); |
561 | 561 |
562 desc.identifier = "b_features"; | 562 desc.identifier = "b_features"; |
563 desc.name = "Raw B Features"; | 563 desc.name = "Raw B Features"; |
564 desc.description = "Spectral features extracted from performance B"; | 564 desc.description = "Spectral features extracted from performance B"; |
567 desc.binCount = featureSize; | 567 desc.binCount = featureSize; |
568 desc.hasKnownExtents = false; | 568 desc.hasKnownExtents = false; |
569 desc.isQuantized = false; | 569 desc.isQuantized = false; |
570 desc.sampleType = OutputDescriptor::FixedSampleRate; | 570 desc.sampleType = OutputDescriptor::FixedSampleRate; |
571 desc.sampleRate = outRate; | 571 desc.sampleRate = outRate; |
572 m_bFeaturesOutNo = list.size(); | 572 m_bFeaturesOutNo = int(list.size()); |
573 list.push_back(desc); | 573 list.push_back(desc); |
574 | 574 |
575 desc.identifier = "a_cfeatures"; | 575 desc.identifier = "a_cfeatures"; |
576 desc.name = "Conditioned A Features"; | 576 desc.name = "Conditioned A Features"; |
577 desc.description = "Spectral features extracted from performance A, after normalisation and conditioning"; | 577 desc.description = "Spectral features extracted from performance A, after normalisation and conditioning"; |
580 desc.binCount = featureSize; | 580 desc.binCount = featureSize; |
581 desc.hasKnownExtents = false; | 581 desc.hasKnownExtents = false; |
582 desc.isQuantized = false; | 582 desc.isQuantized = false; |
583 desc.sampleType = OutputDescriptor::FixedSampleRate; | 583 desc.sampleType = OutputDescriptor::FixedSampleRate; |
584 desc.sampleRate = outRate; | 584 desc.sampleRate = outRate; |
585 m_caFeaturesOutNo = list.size(); | 585 m_caFeaturesOutNo = int(list.size()); |
586 list.push_back(desc); | 586 list.push_back(desc); |
587 | 587 |
588 desc.identifier = "b_cfeatures"; | 588 desc.identifier = "b_cfeatures"; |
589 desc.name = "Conditioned B Features"; | 589 desc.name = "Conditioned B Features"; |
590 desc.description = "Spectral features extracted from performance B, after norrmalisation and conditioning"; | 590 desc.description = "Spectral features extracted from performance B, after norrmalisation and conditioning"; |
593 desc.binCount = featureSize; | 593 desc.binCount = featureSize; |
594 desc.hasKnownExtents = false; | 594 desc.hasKnownExtents = false; |
595 desc.isQuantized = false; | 595 desc.isQuantized = false; |
596 desc.sampleType = OutputDescriptor::FixedSampleRate; | 596 desc.sampleType = OutputDescriptor::FixedSampleRate; |
597 desc.sampleRate = outRate; | 597 desc.sampleRate = outRate; |
598 m_cbFeaturesOutNo = list.size(); | 598 m_cbFeaturesOutNo = int(list.size()); |
599 list.push_back(desc); | 599 list.push_back(desc); |
600 | 600 |
601 desc.identifier = "overall_cost"; | 601 desc.identifier = "overall_cost"; |
602 desc.name = "Overall Cost"; | 602 desc.name = "Overall Cost"; |
603 desc.description = "Normalised overall path cost for the cheapest path"; | 603 desc.description = "Normalised overall path cost for the cheapest path"; |
606 desc.binCount = 1; | 606 desc.binCount = 1; |
607 desc.hasKnownExtents = false; | 607 desc.hasKnownExtents = false; |
608 desc.isQuantized = false; | 608 desc.isQuantized = false; |
609 desc.sampleType = OutputDescriptor::FixedSampleRate; | 609 desc.sampleType = OutputDescriptor::FixedSampleRate; |
610 desc.sampleRate = 1; | 610 desc.sampleRate = 1; |
611 m_overallCostOutNo = list.size(); | 611 m_overallCostOutNo = int(list.size()); |
612 list.push_back(desc); | 612 list.push_back(desc); |
613 | 613 |
614 return list; | 614 return list; |
615 } | 615 } |
616 | 616 |
702 | 702 |
703 int x = pathx[i]; | 703 int x = pathx[i]; |
704 int y = pathy[i]; | 704 int y = pathy[i]; |
705 | 705 |
706 Vamp::RealTime xt = Vamp::RealTime::frame2RealTime | 706 Vamp::RealTime xt = Vamp::RealTime::frame2RealTime |
707 (x * m_stepSize, lrintf(m_inputSampleRate)); | 707 (x * m_stepSize, int(m_inputSampleRate + 0.5)); |
708 Vamp::RealTime yt = Vamp::RealTime::frame2RealTime | 708 Vamp::RealTime yt = Vamp::RealTime::frame2RealTime |
709 (y * m_stepSize, lrintf(m_inputSampleRate)); | 709 (y * m_stepSize, int(m_inputSampleRate + 0.5)); |
710 | 710 |
711 Feature feature; | 711 Feature feature; |
712 feature.hasTimestamp = true; | 712 feature.hasTimestamp = true; |
713 feature.timestamp = m_startTime + xt; | 713 feature.timestamp = m_startTime + xt; |
714 feature.values.clear(); | 714 feature.values.clear(); |