Mercurial > hg > qm-dsp
diff dsp/chromagram/Chromagram.cpp @ 32:8bb764969d50
* Add windowing to Chromagram input
* Add window option to MFCC config
author | cannam |
---|---|
date | Fri, 18 Jan 2008 17:57:40 +0000 |
parents | 2e3f5d2d62c1 |
children | ad645e404d0c |
line wrap: on
line diff
--- a/dsp/chromagram/Chromagram.cpp Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/Chromagram.cpp Fri Jan 18 17:57:40 2008 +0000 @@ -59,6 +59,9 @@ m_CQRe = new double[ m_uK ]; m_CQIm = new double[ m_uK ]; + m_window = 0; + m_windowbuf = 0; + // Generate CQ Kernel m_ConstantQ->sparsekernel(); return 1; @@ -71,6 +74,9 @@ int Chromagram::deInitialise() { + delete[] m_windowbuf; + delete m_window; + delete [] m_chromadata; delete m_FFT; @@ -111,15 +117,25 @@ } -double* Chromagram::process( double *data ) +double* Chromagram::process( const double *data ) { + if (!m_window) { + m_window = new Window<double>(HammingWindow, m_frameSize); + m_windowbuf = new double[m_frameSize]; + } + + for (int i = 0; i < m_frameSize; ++i) { + m_windowbuf[i] = data[i]; + } + m_window->cut(m_windowbuf); + // FFT of current frame - m_FFT->process( m_frameSize, 0, data, NULL, m_FFTRe, m_FFTIm ); + m_FFT->process(m_frameSize, 0, m_windowbuf, NULL, m_FFTRe, m_FFTIm); return process(m_FFTRe, m_FFTIm); } -double* Chromagram::process( double *real, double *imag ) +double* Chromagram::process( const double *real, const double *imag ) { // initialise chromadata to 0 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0;