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