comparison FChTransformF0gram.cpp @ 22:a1879532385e spect

Connect up an interesting parameter that was exposed but not connected
author Chris Cannam
date Thu, 04 Oct 2018 14:56:41 +0100
parents 37917af73ae9
children 2c54d83a196f
comparison
equal deleted inserted replaced
21:37917af73ae9 22:a1879532385e
353 f0s_per_oct.quantizeStep = 1.0; 353 f0s_per_oct.quantizeStep = 1.0;
354 list.push_back(f0s_per_oct); 354 list.push_back(f0s_per_oct);
355 355
356 ParameterDescriptor f0_prefer_fun; 356 ParameterDescriptor f0_prefer_fun;
357 f0_prefer_fun.identifier = "f0_prefer_fun"; 357 f0_prefer_fun.identifier = "f0_prefer_fun";
358 f0_prefer_fun.name = "f0 preference function"; 358 f0_prefer_fun.name = "Use f0 weighting";
359 f0_prefer_fun.description = "Whether to use a f0 weighting function."; 359 f0_prefer_fun.description = "Whether to use a f0 weighting function to prefer frequencies nearer a mean value.";
360 f0_prefer_fun.unit = ""; 360 f0_prefer_fun.unit = "";
361 f0_prefer_fun.minValue = 0; 361 f0_prefer_fun.minValue = 0;
362 f0_prefer_fun.maxValue = 1; 362 f0_prefer_fun.maxValue = 1;
363 f0_prefer_fun.defaultValue = 1; 363 f0_prefer_fun.defaultValue = 1;
364 f0_prefer_fun.isQuantized = true; 364 f0_prefer_fun.isQuantized = true;
365 f0_prefer_fun.quantizeStep = 1.0; 365 f0_prefer_fun.quantizeStep = 1.0;
366 list.push_back(f0_prefer_fun); 366 list.push_back(f0_prefer_fun);
367 367
368 ParameterDescriptor f0_prefer_mean; 368 ParameterDescriptor f0_prefer_mean;
369 f0_prefer_mean.identifier = "f0_prefer_mean"; 369 f0_prefer_mean.identifier = "f0_prefer_mean";
370 f0_prefer_mean.name = "mean f0 preference function"; 370 f0_prefer_mean.name = "Mean pitch for f0 weighting";
371 f0_prefer_mean.description = "Mean value for f0 weighting function (MIDI number)."; 371 f0_prefer_mean.description = "Mean value for f0 weighting function (MIDI number).";
372 f0_prefer_mean.unit = ""; 372 f0_prefer_mean.unit = "";
373 f0_prefer_mean.minValue = 1; 373 f0_prefer_mean.minValue = 1;
374 f0_prefer_mean.maxValue = 127; 374 f0_prefer_mean.maxValue = 127;
375 f0_prefer_mean.defaultValue = 60; 375 f0_prefer_mean.defaultValue = 60;
377 f0_prefer_mean.quantizeStep = 1.0; 377 f0_prefer_mean.quantizeStep = 1.0;
378 list.push_back(f0_prefer_mean); 378 list.push_back(f0_prefer_mean);
379 379
380 ParameterDescriptor f0_prefer_stdev; 380 ParameterDescriptor f0_prefer_stdev;
381 f0_prefer_stdev.identifier = "f0_prefer_stdev"; 381 f0_prefer_stdev.identifier = "f0_prefer_stdev";
382 f0_prefer_stdev.name = "stdev of f0 preference function"; 382 f0_prefer_stdev.name = "Stdev for f0 weighting";
383 f0_prefer_stdev.description = "Stdev for f0 weighting function (MIDI number)."; 383 f0_prefer_stdev.description = "Standard deviation for f0 weighting function (MIDI number).";
384 f0_prefer_stdev.unit = ""; 384 f0_prefer_stdev.unit = "";
385 f0_prefer_stdev.minValue = 1; 385 f0_prefer_stdev.minValue = 1;
386 f0_prefer_stdev.maxValue = 127; 386 f0_prefer_stdev.maxValue = 127;
387 f0_prefer_stdev.defaultValue = 18; 387 f0_prefer_stdev.defaultValue = 18;
388 f0_prefer_stdev.isQuantized = true; 388 f0_prefer_stdev.isQuantized = true;
426 } else if (identifier == "f0s_per_oct") { 426 } else if (identifier == "f0s_per_oct") {
427 return m_f0_params.num_f0s_per_oct; 427 return m_f0_params.num_f0s_per_oct;
428 } else if (identifier == "num_f0_hyps") { 428 } else if (identifier == "num_f0_hyps") {
429 return m_f0_params.num_f0_hyps; 429 return m_f0_params.num_f0_hyps;
430 } else if (identifier == "f0_prefer_fun") { 430 } else if (identifier == "f0_prefer_fun") {
431 return m_f0_params.prefer; 431 return m_f0_params.prefer ? 1.0 : 0.0;
432 } else if (identifier == "f0_prefer_mean") { 432 } else if (identifier == "f0_prefer_mean") {
433 return m_f0_params.prefer_mean; 433 return m_f0_params.prefer_mean;
434 } else if (identifier == "f0_prefer_stdev") { 434 } else if (identifier == "f0_prefer_stdev") {
435 return m_f0_params.prefer_stdev; 435 return m_f0_params.prefer_stdev;
436 } else if (identifier == "f0gram_mode") { 436 } else if (identifier == "f0gram_mode") {
462 } else if (identifier == "f0s_per_oct") { 462 } else if (identifier == "f0s_per_oct") {
463 m_f0_params.num_f0s_per_oct = value; 463 m_f0_params.num_f0s_per_oct = value;
464 } else if (identifier == "num_f0_hyps") { 464 } else if (identifier == "num_f0_hyps") {
465 m_f0_params.num_f0_hyps = value; 465 m_f0_params.num_f0_hyps = value;
466 } else if (identifier == "f0_prefer_fun") { 466 } else if (identifier == "f0_prefer_fun") {
467 m_f0_params.prefer = value; 467 m_f0_params.prefer = (value > 0.5);
468 } else if (identifier == "f0_prefer_mean") { 468 } else if (identifier == "f0_prefer_mean") {
469 m_f0_params.prefer_mean = value; 469 m_f0_params.prefer_mean = value;
470 } else if (identifier == "f0_prefer_stdev") { 470 } else if (identifier == "f0_prefer_stdev") {
471 m_f0_params.prefer_stdev = value; 471 m_f0_params.prefer_stdev = value;
472 } else if (identifier == "f0gram_mode") { 472 } else if (identifier == "f0gram_mode") {
663 m_glogs_f0_preference_weights = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct); 663 m_glogs_f0_preference_weights = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct);
664 m_glogs_median_correction = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct); 664 m_glogs_median_correction = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct);
665 m_glogs_sigma_correction = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct); 665 m_glogs_sigma_correction = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct);
666 double MIDI_value; 666 double MIDI_value;
667 for (int i = 0; i < m_f0_params.num_octs*m_f0_params.num_f0s_per_oct; i++) { 667 for (int i = 0; i < m_f0_params.num_octs*m_f0_params.num_f0s_per_oct; i++) {
668 MIDI_value = 69.0 + 12.0 * log2(m_glogs_f0[i + m_glogs_init_f0s]/440.0); 668 if (m_f0_params.prefer) {
669 m_glogs_f0_preference_weights[i] = 1.0/sqrt(2.0*M_PI*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev)*exp(-(MIDI_value-m_f0_params.prefer_mean)*(MIDI_value-m_f0_params.prefer_mean)/(2.0*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev)); 669 MIDI_value = 69.0 + 12.0 * log2(m_glogs_f0[i + m_glogs_init_f0s]/440.0);
670 m_glogs_f0_preference_weights[i] = (0.01 + m_glogs_f0_preference_weights[i]) / (1.01); 670 m_glogs_f0_preference_weights[i] = 1.0/sqrt(2.0*M_PI*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev)*exp(-(MIDI_value-m_f0_params.prefer_mean)*(MIDI_value-m_f0_params.prefer_mean)/(2.0*m_f0_params.prefer_stdev*m_f0_params.prefer_stdev));
671 m_glogs_f0_preference_weights[i] = (0.01 + m_glogs_f0_preference_weights[i]) / (1.01);
672 } else {
673 m_glogs_f0_preference_weights[i] = 1.0;
674 }
671 675
672 m_glogs_median_correction[i] = m_glogs_params.median_poly_coefs[0]*(i+1.0)*(i+1.0) + m_glogs_params.median_poly_coefs[1]*(i+1.0) + m_glogs_params.median_poly_coefs[2]; 676 m_glogs_median_correction[i] = m_glogs_params.median_poly_coefs[0]*(i+1.0)*(i+1.0) + m_glogs_params.median_poly_coefs[1]*(i+1.0) + m_glogs_params.median_poly_coefs[2];
673 m_glogs_sigma_correction[i] = 1.0 / (m_glogs_params.sigma_poly_coefs[0]*(i+1.0)*(i+1.0) + m_glogs_params.sigma_poly_coefs[1]*(i+1.0) + m_glogs_params.sigma_poly_coefs[2]); 677 m_glogs_sigma_correction[i] = 1.0 / (m_glogs_params.sigma_poly_coefs[0]*(i+1.0)*(i+1.0) + m_glogs_params.sigma_poly_coefs[1]*(i+1.0) + m_glogs_params.sigma_poly_coefs[2]);
674 } 678 }
675 } 679 }