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@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@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@478: int shiftProfile, unsigned int length ); cannam@475: cannam@478: unsigned int getBlockSize() { return m_ChromaFrameSize*m_DecimationFactor; } cannam@478: unsigned int getHopSize() { return m_ChromaHopSize*m_DecimationFactor; } cannam@475: cannam@478: double* getChroma() { return m_ChrPointer; } cannam@478: unsigned int getChromaSize(); cannam@475: cannam@478: 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@478: unsigned int m_DecimationFactor; cannam@475: cannam@478: //Decimator (fixed) cannam@478: Decimator* m_Decimator; cannam@475: cannam@478: //chroma configuration cannam@478: ChromaConfig m_ChromaConfig; cannam@475: cannam@478: //Chromagram object cannam@478: Chromagram* m_Chroma; cannam@475: cannam@478: //Chromagram output pointer cannam@478: double* m_ChrPointer; cannam@475: cannam@478: //Framesize cannam@478: unsigned int m_ChromaFrameSize; cannam@478: //Hop cannam@478: unsigned int m_ChromaHopSize; cannam@475: cannam@475: cannam@478: unsigned int m_ChromaBuffersize; cannam@478: unsigned int m_MedianWinsize; cannam@478: cannam@478: unsigned int m_bufferindex; cannam@478: unsigned int m_ChromaBufferFilling; cannam@478: unsigned int m_MedianBufferFilling; cannam@478: cannam@475: cannam@478: double* m_DecimatedBuffer; cannam@478: double* m_ChromaBuffer; cannam@478: double* m_MeanHPCP; cannam@475: cannam@478: double* m_MajProfileNorm; cannam@478: double* m_MinProfileNorm; cannam@478: double* m_MajCorr; cannam@478: double* m_MinCorr; cannam@478: int* m_MedianFilterBuffer; cannam@478: int* m_SortedBuffer; cannam@475: cannam@478: double *m_keyStrengths; cannam@475: }; cannam@475: cannam@475: #endif // !defined GETKEYMODE_H