Mercurial > hg > qm-vamp-plugins
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;