cannam@484: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@475: /* cannam@475: Copyright (c) 2005 Centre for Digital Music ( C4DM ) cannam@475: Queen Mary Univesrity of London cannam@475: cannam@475: This program is free software; you can redistribute it and/or cannam@475: modify it under the terms of the GNU General Public License as cannam@475: published by the Free Software Foundation; either version 2 of the cannam@475: License, or (at your option) any later version. See the file cannam@475: COPYING included with this distribution for more information. cannam@475: */ cannam@475: cannam@489: #ifndef QM_DSP_GETKEYMODE_H cannam@489: #define QM_DSP_GETKEYMODE_H cannam@475: cannam@475: cannam@475: #include "dsp/rateconversion/Decimator.h" cannam@475: #include "dsp/chromagram/Chromagram.h" cannam@475: cannam@475: cannam@475: class GetKeyMode cannam@475: { cannam@475: public: cannam@478: GetKeyMode( int sampleRate, float tuningFrequency, cannam@478: double hpcpAverage, double medianAverage ); cannam@475: cannam@478: virtual ~GetKeyMode(); cannam@475: cannam@478: int process( double* PCMData ); cannam@475: cannam@478: double krumCorr( const double *pDataNorm, const double *pProfileNorm, cannam@499: int shiftProfile, int length ); cannam@475: cannam@499: int getBlockSize() { return m_chromaFrameSize * m_decimationFactor; } cannam@499: int getHopSize() { return m_chromaHopSize * m_decimationFactor; } cannam@475: cannam@499: double* getChroma() { return m_chrPointer; } cannam@499: int getChromaSize(); cannam@475: cannam@499: double* getMeanHPCP() { return m_meanHPCP; } cannam@475: cannam@478: double* getKeyStrengths(); cannam@475: cannam@478: bool isModeMinor( int key ); cannam@475: cannam@475: protected: cannam@475: cannam@478: double m_hpcpAverage; cannam@478: double m_medianAverage; cannam@499: int m_decimationFactor; cannam@475: cannam@499: // Decimator (fixed) cannam@499: Decimator* m_decimator; cannam@475: cannam@499: // Chroma configuration cannam@499: ChromaConfig m_chromaConfig; cannam@475: cannam@499: // Chromagram object cannam@499: Chromagram* m_chroma; cannam@475: cannam@499: // Chromagram output pointer cannam@499: double* m_chrPointer; cannam@475: cannam@499: // Framesize cannam@499: int m_chromaFrameSize; cannam@475: cannam@499: // Hop cannam@499: int m_chromaHopSize; cannam@475: cannam@499: int m_chromaBufferSize; cannam@499: int m_medianWinSize; cannam@478: cannam@499: int m_bufferIndex; cannam@499: int m_chromaBufferFilling; cannam@499: int m_medianBufferFilling; cannam@475: cannam@499: double* m_decimatedBuffer; cannam@499: double* m_chromaBuffer; cannam@499: double* m_meanHPCP; cannam@475: cannam@499: double* m_majProfileNorm; cannam@499: double* m_minProfileNorm; cannam@499: double* m_majCorr; cannam@499: double* m_minCorr; cannam@499: int* m_medianFilterBuffer; cannam@499: int* m_sortedBuffer; cannam@475: cannam@478: double *m_keyStrengths; cannam@475: }; cannam@475: cannam@499: #endif // !defined QM_DSP_GETKEYMODE_H