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@475: #ifndef GETKEYMODE_H cannam@475: #define 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@475: GetKeyMode( int sampleRate, float tuningFrequency, cannam@475: double hpcpAverage, double medianAverage ); cannam@475: cannam@475: virtual ~GetKeyMode(); cannam@475: cannam@475: int process( double* PCMData ); cannam@475: cannam@475: double krumCorr( const double *pDataNorm, const double *pProfileNorm, cannam@475: int shiftProfile, unsigned int length ); cannam@475: cannam@475: unsigned int getBlockSize() { return m_ChromaFrameSize*m_DecimationFactor; } cannam@475: unsigned int getHopSize() { return m_ChromaHopSize*m_DecimationFactor; } cannam@475: cannam@475: double* getChroma() { return m_ChrPointer; } cannam@475: unsigned int getChromaSize(); cannam@475: cannam@475: double* getMeanHPCP() { return m_MeanHPCP; } cannam@475: cannam@475: double* getKeyStrengths(); cannam@475: cannam@475: bool isModeMinor( int key ); cannam@475: cannam@475: protected: cannam@475: cannam@475: double m_hpcpAverage; cannam@475: double m_medianAverage; cannam@475: unsigned int m_DecimationFactor; cannam@475: cannam@475: //Decimator (fixed) cannam@475: Decimator* m_Decimator; cannam@475: cannam@475: //chroma configuration cannam@475: ChromaConfig m_ChromaConfig; cannam@475: cannam@475: //Chromagram object cannam@475: Chromagram* m_Chroma; cannam@475: cannam@475: //Chromagram output pointer cannam@475: double* m_ChrPointer; cannam@475: cannam@475: //Framesize cannam@475: unsigned int m_ChromaFrameSize; cannam@475: //Hop cannam@475: unsigned int m_ChromaHopSize; cannam@475: cannam@475: cannam@475: unsigned int m_ChromaBuffersize; cannam@475: unsigned int m_MedianWinsize; cannam@475: cannam@475: unsigned int m_bufferindex; cannam@475: unsigned int m_ChromaBufferFilling; cannam@475: unsigned int m_MedianBufferFilling; cannam@475: cannam@475: cannam@475: double* m_DecimatedBuffer; cannam@475: double* m_ChromaBuffer; cannam@475: double* m_MeanHPCP; cannam@475: cannam@475: double* m_MajProfileNorm; cannam@475: double* m_MinProfileNorm; cannam@475: double* m_MajCorr; cannam@475: double* m_MinCorr; cannam@475: int* m_MedianFilterBuffer; cannam@475: int* m_SortedBuffer; cannam@475: cannam@475: double *m_keyStrengths; cannam@475: }; cannam@475: cannam@475: #endif // !defined GETKEYMODE_H