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. Chris@84: This file 2005-2006 Christian Landone. Chris@84: Chris@84: This program is free software; you can redistribute it and/or Chris@84: modify it under the terms of the GNU General Public License as Chris@84: published by the Free Software Foundation; either version 2 of the Chris@84: License, or (at your option) any later version. See the file Chris@84: COPYING included with this distribution for more information. cannam@0: */ cannam@0: cannam@0: #ifndef CHROMAGRAM_H cannam@0: #define CHROMAGRAM_H cannam@0: cannam@0: #include "dsp/transforms/FFT.h" cannam@32: #include "base/Window.h" cannam@0: #include "ConstantQ.h" cannam@0: cannam@0: struct ChromaConfig{ Chris@189: int FS; cannam@0: double min; cannam@0: double max; Chris@189: int BPO; cannam@0: double CQThresh; cannam@34: MathUtilities::NormaliseType normalise; 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@32: double* process( const double *data ); // time domain cannam@32: double* process( const double *real, const 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 Chris@189: int getK() { return m_uK;} Chris@189: int getFrameSize() { return m_frameSize; } Chris@189: int getHopSize() { return m_hopSize; } Chris@189: cannam@0: private: cannam@0: int initialise( ChromaConfig Config ); cannam@0: int deInitialise(); cannam@32: cannam@32: Window *m_window; cannam@32: double *m_windowbuf; cannam@0: cannam@0: double* m_chromadata; cannam@0: double m_FMin; cannam@0: double m_FMax; Chris@189: int m_BPO; Chris@189: int m_uK; cannam@0: cannam@34: MathUtilities::NormaliseType m_normalise; cannam@0: Chris@189: int m_frameSize; Chris@189: int m_hopSize; cannam@0: cannam@64: FFTReal* 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@51: bool m_skGenerated; cannam@0: }; cannam@0: cannam@0: #endif