cannam@7
|
1 /*
|
Chris@153
|
2 Copyright (c) 2005 Centre for Digital Music ( C4DM )
|
Chris@153
|
3 Queen Mary Univesrity of London
|
Chris@153
|
4
|
Chris@153
|
5 This program is free software; you can redistribute it and/or
|
Chris@153
|
6 modify it under the terms of the GNU General Public License as
|
Chris@153
|
7 published by the Free Software Foundation; either version 2 of the
|
Chris@153
|
8 License, or (at your option) any later version. See the file
|
Chris@153
|
9 COPYING included with this distribution for more information.
|
cannam@7
|
10 */
|
cannam@7
|
11
|
cannam@40
|
12 #ifndef GETKEYMODE_H
|
cannam@7
|
13 #define GETKEYMODE_H
|
cannam@7
|
14
|
cannam@7
|
15
|
cannam@7
|
16 #include "dsp/rateconversion/Decimator.h"
|
cannam@7
|
17 #include "dsp/chromagram/Chromagram.h"
|
cannam@7
|
18
|
cannam@7
|
19
|
cannam@7
|
20 class GetKeyMode
|
cannam@7
|
21 {
|
cannam@7
|
22 public:
|
cannam@9
|
23 GetKeyMode( int sampleRate, float tuningFrequency,
|
cannam@9
|
24 double hpcpAverage, double medianAverage );
|
cannam@7
|
25
|
cannam@7
|
26 virtual ~GetKeyMode();
|
cannam@7
|
27
|
cannam@7
|
28 int process( double* PCMData );
|
cannam@7
|
29
|
cannam@7
|
30 double krumCorr( double* pData1, double* pData2, unsigned int length );
|
cannam@7
|
31
|
cannam@7
|
32 unsigned int getBlockSize() { return m_ChromaFrameSize*m_DecimationFactor; }
|
cannam@7
|
33 unsigned int getHopSize() { return m_ChromaHopSize*m_DecimationFactor; }
|
cannam@7
|
34
|
cannam@7
|
35 double* getChroma() { return m_ChrPointer; }
|
cannam@7
|
36 unsigned int getChromaSize() { return m_BPO; }
|
cannam@7
|
37
|
cannam@7
|
38 double* getMeanHPCP() { return m_MeanHPCP; }
|
cannam@7
|
39
|
cannam@40
|
40 double *getKeyStrengths() { return m_keyStrengths; }
|
cannam@40
|
41
|
cannam@43
|
42 bool isModeMinor( int key );
|
cannam@7
|
43
|
cannam@7
|
44 protected:
|
cannam@7
|
45
|
cannam@7
|
46 double m_hpcpAverage;
|
cannam@7
|
47 double m_medianAverage;
|
cannam@7
|
48 unsigned int m_DecimationFactor;
|
cannam@7
|
49
|
cannam@7
|
50 //Decimator (fixed)
|
cannam@7
|
51 Decimator* m_Decimator;
|
cannam@7
|
52
|
cannam@7
|
53 //chroma configuration
|
cannam@9
|
54 ChromaConfig m_ChromaConfig;
|
cannam@7
|
55
|
cannam@7
|
56 //Chromagram object
|
cannam@7
|
57 Chromagram* m_Chroma;
|
cannam@7
|
58
|
cannam@7
|
59 //Chromagram output pointer
|
cannam@7
|
60 double* m_ChrPointer;
|
cannam@7
|
61
|
cannam@7
|
62 //Framesize
|
cannam@7
|
63 unsigned int m_ChromaFrameSize;
|
cannam@7
|
64 //Hop
|
cannam@7
|
65 unsigned int m_ChromaHopSize;
|
cannam@7
|
66 //Bins per octave
|
cannam@7
|
67 unsigned int m_BPO;
|
cannam@7
|
68
|
cannam@7
|
69
|
cannam@7
|
70 unsigned int m_ChromaBuffersize;
|
cannam@7
|
71 unsigned int m_MedianWinsize;
|
cannam@7
|
72
|
cannam@7
|
73 unsigned int m_bufferindex;
|
cannam@7
|
74 unsigned int m_ChromaBufferFilling;
|
cannam@7
|
75 unsigned int m_MedianBufferFilling;
|
cannam@7
|
76
|
cannam@7
|
77
|
cannam@7
|
78 double* m_DecimatedBuffer;
|
cannam@7
|
79 double* m_ChromaBuffer;
|
cannam@7
|
80 double* m_MeanHPCP;
|
cannam@7
|
81
|
cannam@7
|
82 double* m_MajCorr;
|
cannam@7
|
83 double* m_MinCorr;
|
cannam@7
|
84 double* m_Keys;
|
cannam@7
|
85 int* m_MedianFilterBuffer;
|
cannam@7
|
86 int* m_SortedBuffer;
|
cannam@40
|
87
|
cannam@40
|
88 double *m_keyStrengths;
|
cannam@7
|
89 };
|
cannam@7
|
90
|
cannam@7
|
91 #endif // !defined GETKEYMODE_H
|