diff 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
line wrap: on
line diff
--- a/FChTransformF0gram.cpp	Thu Oct 04 14:46:41 2018 +0100
+++ b/FChTransformF0gram.cpp	Thu Oct 04 14:56:41 2018 +0100
@@ -355,8 +355,8 @@
 
     ParameterDescriptor f0_prefer_fun;
     f0_prefer_fun.identifier = "f0_prefer_fun";
-    f0_prefer_fun.name = "f0 preference function";
-    f0_prefer_fun.description = "Whether to use a f0 weighting function.";
+    f0_prefer_fun.name = "Use f0 weighting";
+    f0_prefer_fun.description = "Whether to use a f0 weighting function to prefer frequencies nearer a mean value.";
     f0_prefer_fun.unit = "";
     f0_prefer_fun.minValue = 0;
     f0_prefer_fun.maxValue = 1;
@@ -367,7 +367,7 @@
 
     ParameterDescriptor f0_prefer_mean;
     f0_prefer_mean.identifier = "f0_prefer_mean";
-    f0_prefer_mean.name = "mean f0 preference function";
+    f0_prefer_mean.name = "Mean pitch for f0 weighting";
     f0_prefer_mean.description = "Mean value for f0 weighting function (MIDI number).";
     f0_prefer_mean.unit = "";
     f0_prefer_mean.minValue = 1;
@@ -379,8 +379,8 @@
 
     ParameterDescriptor f0_prefer_stdev;
     f0_prefer_stdev.identifier = "f0_prefer_stdev";
-    f0_prefer_stdev.name = "stdev of f0 preference function";
-    f0_prefer_stdev.description = "Stdev for f0 weighting function (MIDI number).";
+    f0_prefer_stdev.name = "Stdev for f0 weighting";
+    f0_prefer_stdev.description = "Standard deviation for f0 weighting function (MIDI number).";
     f0_prefer_stdev.unit = "";
     f0_prefer_stdev.minValue = 1;
     f0_prefer_stdev.maxValue = 127;
@@ -428,7 +428,7 @@
     } else if (identifier == "num_f0_hyps") {
         return m_f0_params.num_f0_hyps;
     } else if (identifier == "f0_prefer_fun") {
-        return m_f0_params.prefer;
+        return m_f0_params.prefer ? 1.0 : 0.0;
     } else if (identifier == "f0_prefer_mean") {
         return m_f0_params.prefer_mean;
     } else if (identifier == "f0_prefer_stdev") {
@@ -464,7 +464,7 @@
     } else if (identifier == "num_f0_hyps") {
         m_f0_params.num_f0_hyps = value;
     } else if (identifier == "f0_prefer_fun") {
-        m_f0_params.prefer = value;
+        m_f0_params.prefer = (value > 0.5);
     } else if (identifier == "f0_prefer_mean") {
         m_f0_params.prefer_mean = value;
     } else if (identifier == "f0_prefer_stdev") {
@@ -665,9 +665,13 @@
     m_glogs_sigma_correction = allocate<double>(m_f0_params.num_octs*m_f0_params.num_f0s_per_oct);
     double MIDI_value;
     for (int i = 0; i < m_f0_params.num_octs*m_f0_params.num_f0s_per_oct; i++) {
-        MIDI_value = 69.0 + 12.0 * log2(m_glogs_f0[i + m_glogs_init_f0s]/440.0);
-        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));
-        m_glogs_f0_preference_weights[i] = (0.01 + m_glogs_f0_preference_weights[i]) / (1.01);
+        if (m_f0_params.prefer) {
+            MIDI_value = 69.0 + 12.0 * log2(m_glogs_f0[i + m_glogs_init_f0s]/440.0);
+            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));
+            m_glogs_f0_preference_weights[i] = (0.01 + m_glogs_f0_preference_weights[i]) / (1.01);
+        } else {
+            m_glogs_f0_preference_weights[i] = 1.0;
+        }
 		
         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];
         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]);