]> git.sesse.net Git - pitch/blobdiff - glpitch.cpp
Port from OSS to ALSA, as OSS is pretty much dying these days.
[pitch] / glpitch.cpp
index e47e977f2b8743960b776e28c13f6a77947b574c..a168d79c5c4d3083bd4bf7766d2c9e46f6455a8c 100644 (file)
@@ -52,7 +52,7 @@ double find_display_pos(double freq)
 int main(void)
 {
        PitchDetector pd(SAMPLE_RATE, FFT_LENGTH, PAD_FACTOR, OVERLAP);
-       int fd = get_dsp_fd(SAMPLE_RATE, FFT_LENGTH, OVERLAP);
+       snd_pcm_t *pcm = get_dsp_handle(SAMPLE_RATE);
 
        SDL_Init(SDL_INIT_VIDEO);
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
@@ -60,6 +60,7 @@ int main(void)
 
        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);
+       glDisable(GL_DEPTH_TEST);
 
        for ( ;; ) {
                SDL_Event event;
@@ -76,7 +77,7 @@ int main(void)
                }
 
                short buf[FFT_LENGTH / PAD_FACTOR / OVERLAP];
-               read_chunk(fd, buf, FFT_LENGTH / PAD_FACTOR / OVERLAP);
+               read_chunk(pcm, buf, FFT_LENGTH / PAD_FACTOR / OVERLAP);
                std::pair<double, double> peak = pd.detect_pitch(buf);
 
                glMatrixMode(GL_PROJECTION);
@@ -99,12 +100,14 @@ int main(void)
 
                if (peak.second - log10(FFT_LENGTH) >= 0.0) {
                        double peak_pos = find_display_pos(peak.first);
+                       double strength = peak.second / 40.0f;
 
+                       glEnable(GL_POLYGON_SMOOTH);
                        glBlendFunc(GL_SRC_ALPHA, GL_ONE);
                        glEnable(GL_POLYGON_SMOOTH);
 
                        glBegin(GL_QUADS);      
-                       glColor4f(0.0, 1.0f, 0.0f, 0.2f);
+                       glColor4f(0.0f, strength, 1.0 - strength, 0.2f);
                        glVertex2f(peak_pos - 0.1, 0.0f);
                        glVertex2f(peak_pos - 0.1, 1.0f);
                        glVertex2f(peak_pos + 0.1, 1.0f);