X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=pitch.cpp;h=36be752bbd66e87163e71921348a95644ebf8b6b;hb=cbf0d7c43e3aa06886d425c4d26c99592eb35ba6;hp=8aff1485a1e9e44091263aef52b7195cf12479e2;hpb=19a95dfd3794695d80fe9eae0ba777def80dc3fc;p=pitch diff --git a/pitch.cpp b/pitch.cpp index 8aff148..36be752 100644 --- a/pitch.cpp +++ b/pitch.cpp @@ -190,10 +190,10 @@ void find_peak_magnitudes(std::complex *in, double *out, unsigned num_sa std::pair find_peak(double *in, unsigned num_samples) { - double best_peak = in[0]; - unsigned best_bin = 0; + double best_peak = in[5]; + unsigned best_bin = 5; - for (unsigned i = 1; i < num_samples / 2 + 1; ++i) { + for (unsigned i = 6; i < num_samples / 2 + 1; ++i) { if (in[i] > best_peak) { best_peak = in[i]; best_bin = i; @@ -225,9 +225,9 @@ std::pair find_peak(double *in, unsigned num_samples) best_bin /= i; // consider sliding one bin up or down - if (best_bin > 0 && in[best_bin - 1] > in[best_bin] && in[best_bin - 1] > in[best_bin - 2]) { + if (best_bin > 1 && in[best_bin - 1] > in[best_bin] && in[best_bin - 1] > in[best_bin - 2]) { --best_bin; - } else if (best_bin < num_samples / 2 && in[best_bin + 1] > in[best_bin] && in[best_bin + 1] > in[best_bin + 2]) { + } else if (best_bin < num_samples / 2 - 1 && in[best_bin + 1] > in[best_bin] && in[best_bin + 1] > in[best_bin + 2]) { ++best_bin; } @@ -259,6 +259,8 @@ std::pair adjust_for_overtones(std::pair base, d unsigned middle = unsigned(floor(freq_to_bin(base.first, num_samples) * i + 0.5)); unsigned lower = middle - (i+1)/2, upper = middle + (i+1)/2; + if (lower < 1) + lower = 1; if (upper >= num_samples) upper = num_samples - 2;