#define away the 440 constant, in case you want to tune with a capo.
authorsgunderson@bigfoot.com <>
Mon, 19 Jul 2010 21:18:03 +0000 (23:18 +0200)
committersgunderson@bigfoot.com <>
Mon, 19 Jul 2010 21:18:03 +0000 (23:18 +0200)
pitch.cpp

index 12cf6d8..39e20ce 100644 (file)
--- a/pitch.cpp
+++ b/pitch.cpp
@@ -12,6 +12,7 @@
 
 #include "pitchdetector.h"
 
+#define BASE_PITCH      440.0
 #define SAMPLE_RATE     22050
 #define FFT_LENGTH      4096     /* in samples */
 #define PAD_FACTOR      2        /* 1/pf of the FFT samples are real samples, the rest are padding */
@@ -127,7 +128,7 @@ void write_sine(int dsp_fd, double freq, unsigned num_samples)
 std::string freq_to_tonename(double freq)
 {
        std::string notenames[] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
-       double half_notes_away = 12.0 * log2(freq / 440.0) - 3.0;
+       double half_notes_away = 12.0 * log2(freq / BASE_PITCH) - 3.0;
        int hnai = int(floor(half_notes_away + 0.5));
        int octave = (hnai + 48) / 12;
 
@@ -140,7 +141,7 @@ std::string freq_to_tonename(double freq)
 void print_spectrogram(double freq, double amp)
 {
        std::string notenames[] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
-       double half_notes_away = 12.0 * log2(freq / 440.0) - 3.0;
+       double half_notes_away = 12.0 * log2(freq / BASE_PITCH) - 3.0;
        int hnai = int(floor(half_notes_away + 0.5));
        int octave = (hnai + 48) / 12;
 
@@ -174,12 +175,12 @@ struct note {
        double freq;
 };
 static note notes[] = {
-       { "E-3", 110.0 * (3.0/4.0) },
-       { "A-3", 110.0 },
-       { "D-4", 110.0 * (4.0/3.0) },
-       { "G-4", 110.0 * (4.0/3.0)*(4.0/3.0) },
-       { "B-4", 440.0 * (3.0/4.0)*(3.0/4.0) },
-       { "E-5", 440.0 * (3.0/4.0) }
+       { "E-3", BASE_PITCH/4.0 * (3.0/4.0) },
+       { "A-3", BASE_PITCH/4.0 },
+       { "D-4", BASE_PITCH/4.0 * (4.0/3.0) },
+       { "G-4", BASE_PITCH/4.0 * (4.0/3.0)*(4.0/3.0) },
+       { "B-4", BASE_PITCH * (3.0/4.0)*(3.0/4.0) },
+       { "E-5", BASE_PITCH * (3.0/4.0) }
 };
 
 void print_spectrogram(double freq, double amp)