cannam@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@0: cannam@0: /* cannam@0: QM DSP Library cannam@0: cannam@0: Centre for Digital Music, Queen Mary, University of London. cannam@0: This file copyright 2005-2006 Christian Landone. cannam@0: All rights reserved. cannam@0: */ cannam@0: cannam@0: #ifndef CHROMAGRAM_H cannam@0: #define CHROMAGRAM_H cannam@0: cannam@0: #include "dsp/transforms/FFT.h" cannam@0: #include "ConstantQ.h" cannam@0: cannam@0: struct ChromaConfig{ cannam@0: unsigned int FS; cannam@0: double min; cannam@0: double max; cannam@0: unsigned int BPO; cannam@0: double CQThresh; cannam@0: bool isNormalised; cannam@0: }; cannam@0: cannam@0: class Chromagram cannam@0: { cannam@0: cannam@0: public: cannam@0: Chromagram( ChromaConfig Config ); cannam@0: ~Chromagram(); cannam@0: cannam@3: double* process( double *data ); // time domain cannam@3: double* process( double *real, double *imag ); // frequency domain cannam@0: void unityNormalise( double* src ); cannam@0: cannam@0: // Complex arithmetic cannam@0: double kabs( double real, double imag ); cannam@0: cannam@0: // Results cannam@0: unsigned int getK() { return m_uK;} cannam@0: unsigned int getFrameSize() { return m_frameSize; } cannam@0: unsigned int getHopSize() { return m_hopSize; } cannam@0: cannam@0: private: cannam@0: int initialise( ChromaConfig Config ); cannam@0: int deInitialise(); cannam@0: cannam@0: double* m_chromadata; cannam@0: double m_FMin; cannam@0: double m_FMax; cannam@0: unsigned int m_BPO; cannam@0: unsigned int m_uK; cannam@0: cannam@0: bool isNormalised; cannam@0: cannam@0: unsigned int m_frameSize; cannam@0: unsigned int m_hopSize; cannam@0: cannam@3: FFT* m_FFT; cannam@0: ConstantQ* m_ConstantQ; cannam@0: cannam@0: double* m_FFTRe; cannam@0: double* m_FFTIm; cannam@0: double* m_CQRe; cannam@0: double* m_CQIm; cannam@0: cannam@0: }; cannam@0: cannam@0: #endif