diff plugins/AdaptiveSpectrogram.h @ 107:07f92bbe68d1

* Use a Window object instead of working it out "by hand"
author Chris Cannam <c.cannam@qmul.ac.uk>
date Wed, 13 May 2009 11:23:00 +0000
parents 35f2138c6891
children 42e4f785a636
line wrap: on
line diff
--- a/plugins/AdaptiveSpectrogram.h	Wed May 13 09:19:30 2009 +0000
+++ b/plugins/AdaptiveSpectrogram.h	Wed May 13 11:23:00 2009 +0000
@@ -15,6 +15,7 @@
 #include <vector>
 
 #include <dsp/transforms/FFT.h>//!!!
+#include <base/Window.h>
 
 #include "thread/Thread.h"
 
@@ -115,7 +116,8 @@
     class FFTThread : public AsynchronousTask
     {
     public:
-        FFTThread(int w) {
+        FFTThread(int w) :
+            m_window(HanningWindow, w) {
             m_w = w;
             m_fft = new FFTReal(m_w);
             m_rin = new double[m_w];
@@ -146,15 +148,12 @@
 
     protected:
         void performTask() {
-
-            //!!! use window object
-
             for (int i = 0; i < m_maxwid / m_w; ++i) {
                 int origin = m_maxwid/4 - m_w/4; // for 50% overlap
                 for (int j = 0; j < m_w; ++j) {
-                    double mul = 0.50 - 0.50 * cos((2 * M_PI * j) / m_w);
-                    m_rin[j] = m_in[origin + i * m_w/2 + j] * mul;
+                    m_rin[j] = m_in[j];
                 }
+                m_window.cut(m_rin);
                 m_fft->process(false, m_rin, m_rout, m_iout);
                 for (int j = 0; j < m_w/2; ++j) {
                     int k = j+1; // include Nyquist but not DC
@@ -167,6 +166,7 @@
         }
 
     private:
+        Window<double> m_window;
         FFTReal *m_fft;
         const float *m_in;
         double *m_rin;