comparison constant-q-cpp/cq/Chromagram.h @ 366:5d0a2ebb4d17

Bring dependent libraries in to repo
author Chris Cannam
date Fri, 24 Jun 2016 14:47:45 +0100
parents
children
comparison
equal deleted inserted replaced
365:112766f4c34b 366:5d0a2ebb4d17
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 /*
3 Constant-Q library
4 Copyright (c) 2013-2015 Queen Mary, University of London
5
6 Permission is hereby granted, free of charge, to any person
7 obtaining a copy of this software and associated documentation
8 files (the "Software"), to deal in the Software without
9 restriction, including without limitation the rights to use, copy,
10 modify, merge, publish, distribute, sublicense, and/or sell copies
11 of the Software, and to permit persons to whom the Software is
12 furnished to do so, subject to the following conditions:
13
14 The above copyright notice and this permission notice shall be
15 included in all copies or substantial portions of the Software.
16
17 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20 NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
21 CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
22 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
25 Except as contained in this notice, the names of the Centre for
26 Digital Music; Queen Mary, University of London; and Chris Cannam
27 shall not be used in advertising or otherwise to promote the sale,
28 use or other dealings in this Software without prior written
29 authorization.
30 */
31
32 #ifndef CQCHROMAGRAM_H
33 #define CQCHROMAGRAM_H
34
35 #include "CQBase.h"
36 #include "CQParameters.h"
37
38 class CQSpectrogram;
39
40 class Chromagram
41 {
42 public:
43 struct Parameters {
44 Parameters(double sr) :
45 sampleRate(sr),
46 lowestOctave(0),
47 octaveCount(7),
48 binsPerOctave(36),
49 tuningFrequency(440.),
50 q(1.0), // Q scaling factor
51 atomHopFactor(0.25), // hop size of shortest temporal atom
52 threshold(0.0005), // sparsity threshold for resulting kernel
53 window(CQParameters::SqrtBlackmanHarris) // window shape
54 { }
55
56 /**
57 * Sampling rate of input signal.
58 */
59 double sampleRate;
60
61 /**
62 * Octave number of lowest octave to include in the
63 * chromagram. Numbering is per ASA standard with -1 as the
64 * first octave in the MIDI range and middle-C being C4. The
65 * octave starts at C.
66 */
67 int lowestOctave;
68
69 /**
70 * Number of source constant-Q octaves to wrap around into the
71 * single-octave chroma output.
72 */
73 int octaveCount;
74
75 /**
76 * Number of constant-Q transform bins per octave and the
77 * number of bins in the chroma output.
78 */
79 int binsPerOctave;
80
81 /**
82 * Frequency of concert A, used when mapping the note-based
83 * octave extents into frequency extents for the constant-Q
84 * transform.
85 */
86 double tuningFrequency;
87
88 /**
89 * Spectral atom bandwidth scaling factor.
90 */
91 double q;
92
93 /**
94 * Hop size between temporal atoms, where 1 == no overlap and
95 * smaller values indicate overlapping atoms.
96 */
97 double atomHopFactor;
98
99 /**
100 * Sparsity threshold for Constant-Q kernel: values with
101 * magnitude smaller than this are truncated to zero.
102 */
103 double threshold;
104
105 /**
106 * Window shape to use for the Constant-Q kernel atoms.
107 */
108 CQParameters::WindowType window;
109 };
110
111 Chromagram(Parameters params);
112 virtual ~Chromagram();
113
114 CQBase::RealBlock process(const CQBase::RealSequence &);
115 CQBase::RealBlock getRemainingOutput();
116
117 double getMinFrequency() const { return m_minFrequency; }
118 double getMaxFrequency() const { return m_maxFrequency; }
119
120 std::string getBinName(int bin) const;
121
122 bool isValid() const;
123 int getColumnHop() const;
124 int getLatency() const;
125
126 private:
127 Parameters m_params;
128 CQSpectrogram *m_cq;
129 double m_minFrequency;
130 double m_maxFrequency;
131 CQBase::RealBlock convert(const CQBase::RealBlock &);
132 };
133
134 #endif
135
136
137