5 #include "linux_audio.h"
7 #include "pitchdetector.h"
12 double find_pos(double freq)
14 return 12.0 * log2(freq / BASE_PITCH) - 3.0;
19 PitchDetector pd(SAMPLE_RATE, FFT_LENGTH, PAD_FACTOR, OVERLAP);
20 int fd = get_dsp_fd(SAMPLE_RATE, FFT_LENGTH, OVERLAP);
22 SDL_Init(SDL_INIT_VIDEO);
23 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
24 SDL_SetVideoMode(1024, 200, 32, SDL_OPENGL);
26 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
27 glClear(GL_COLOR_BUFFER_BIT);
30 short buf[FFT_LENGTH / PAD_FACTOR / OVERLAP];
31 read_chunk(fd, buf, FFT_LENGTH / PAD_FACTOR / OVERLAP);
32 std::pair<double, double> peak = pd.detect_pitch(buf);
34 glMatrixMode(GL_PROJECTION);
36 glOrtho(MIN_X, MAX_X, 1.0f, 0.0f, 0.0f, 1.0f);
38 glMatrixMode(GL_MODELVIEW);
41 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
45 glColor4f(0.0, 0.0f, 0.0f, 0.05f);
46 glVertex2f(MIN_X, 0.0f);
47 glVertex2f(MIN_X, 1.0f);
48 glVertex2f(MAX_X, 1.0f);
49 glVertex2f(MAX_X, 0.0f);
52 if (peak.second - log10(FFT_LENGTH) >= 0.0) {
53 double peak_pos = find_pos(peak.first);
55 glBlendFunc(GL_SRC_ALPHA, GL_ONE);
57 glColor4f(0.0, 1.0f, 0.0f, 0.2f);
58 glVertex2f(peak_pos - 0.1, 0.0f);
59 glVertex2f(peak_pos - 0.1, 1.0f);
60 glVertex2f(peak_pos + 0.1, 1.0f);
61 glVertex2f(peak_pos + 0.1, 0.0f);
65 glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
68 for (int i = 0; i < 6; ++i) {
69 double pos = find_pos(notes[i].freq);
70 glVertex2f(pos, 0.0f);
71 glVertex2f(pos, 1.0f);