# HG changeset patch # User cannam # Date 1200679060 0 # Node ID 8bb764969d50293ad50cebf74d1572edb333df4e # Parent dfe38135e4c72f1d384ea2d20062b6e4fbe5a9d0 * Add windowing to Chromagram input * Add window option to MFCC config diff -r dfe38135e4c7 -r 8bb764969d50 dsp/chromagram/Chromagram.cpp --- 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(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; diff -r dfe38135e4c7 -r 8bb764969d50 dsp/chromagram/Chromagram.h --- a/dsp/chromagram/Chromagram.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/Chromagram.h Fri Jan 18 17:57:40 2008 +0000 @@ -12,6 +12,7 @@ #define CHROMAGRAM_H #include "dsp/transforms/FFT.h" +#include "base/Window.h" #include "ConstantQ.h" struct ChromaConfig{ @@ -30,8 +31,8 @@ Chromagram( ChromaConfig Config ); ~Chromagram(); - double* process( double *data ); // time domain - double* process( double *real, double *imag ); // frequency domain + double* process( const double *data ); // time domain + double* process( const double *real, const double *imag ); // frequency domain void unityNormalise( double* src ); // Complex arithmetic @@ -45,6 +46,9 @@ private: int initialise( ChromaConfig Config ); int deInitialise(); + + Window *m_window; + double *m_windowbuf; double* m_chromadata; double m_FMin; diff -r dfe38135e4c7 -r 8bb764969d50 dsp/chromagram/ConstantQ.cpp --- a/dsp/chromagram/ConstantQ.cpp Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/ConstantQ.cpp Fri Jan 18 17:57:40 2008 +0000 @@ -129,7 +129,7 @@ } //----------------------------------------------------------------------------- -double* ConstantQ::process( double* fftdata ) +double* ConstantQ::process( const double* fftdata ) { for (unsigned row=0; row<2*m_uK; row++) { @@ -188,7 +188,8 @@ delete [] m_CQdata; } -void ConstantQ::process(double *FFTRe, double* FFTIm, double *CQRe, double *CQIm) +void ConstantQ::process(const double *FFTRe, const double* FFTIm, + double *CQRe, double *CQIm) { for (unsigned row=0; row(HammingWindow, fftSize); + window = new Window(config.window, fftSize); /* Allocate memory for the FFT */ imagIn = (double*)calloc(fftSize, sizeof(double)); diff -r dfe38135e4c7 -r 8bb764969d50 dsp/mfcc/MFCC.h --- a/dsp/mfcc/MFCC.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/mfcc/MFCC.h Fri Jan 18 17:57:40 2008 +0000 @@ -19,8 +19,10 @@ int nceps; double logpower; bool want_c0; + WindowType window; MFCCConfig(int _FS) : - FS(_FS), fftsize(2048), nceps(19), logpower(1.0), want_c0(true) { } + FS(_FS), fftsize(2048), nceps(19), + logpower(1.0), want_c0(true), window(HammingWindow) { } }; class MFCC diff -r dfe38135e4c7 -r 8bb764969d50 dsp/rhythm/BeatSpectrum.h --- a/dsp/rhythm/BeatSpectrum.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/rhythm/BeatSpectrum.h Fri Jan 18 17:57:40 2008 +0000 @@ -23,8 +23,8 @@ class BeatSpectrum { public: - BeatSpectrum(); - ~BeatSpectrum(); + BeatSpectrum() { } + ~BeatSpectrum() { } std::vector process(const std::vector > &inmatrix);