src/pitch/pitchyin.c, src/pitch/pitchyinfft.c: avoid producing NaN on silence (closes #7)
authorPaul Brossier <piem@piem.org>
Sat, 1 Aug 2015 08:28:38 +0000 (10:28 +0200)
committerPaul Brossier <piem@piem.org>
Sat, 1 Aug 2015 08:28:38 +0000 (10:28 +0200)
src/pitch/pitchyin.c
src/pitch/pitchyinfft.c

index 33e9882..6061f91 100644 (file)
@@ -145,7 +145,11 @@ aubio_pitchyin_do (aubio_pitchyin_t * o, fvec_t * input, fvec_t * out)
       yin->data[tau] += SQR (tmp);
     }
     tmp2 += yin->data[tau];
-    yin->data[tau] *= tau / tmp2;
+    if (tmp2 != 0) {
+      yin->data[tau] *= tau / tmp2;
+    } else {
+      yin->data[tau] = 1.;
+    }
     period = tau - 3;
     if (tau > 4 && (yin->data[period] < tol) &&
         (yin->data[period] < yin->data[period + 1])) {
index 3608b29..940ae4f 100644 (file)
@@ -135,7 +135,11 @@ aubio_pitchyinfft_do (aubio_pitchyinfft_t * p, fvec_t * input, fvec_t * output)
     yin->data[tau] = sum - fftout->data[tau];
     // and the cumulative mean normalized difference function
     tmp += yin->data[tau];
-    yin->data[tau] *= tau / tmp;
+    if (tmp != 0) {
+      yin->data[tau] *= tau / tmp;
+    } else {
+      yin->data[tau] = 1.;
+    }
   }
   // find best candidates
   tau = fvec_min_elem (yin);