To check out this repository please hg clone the following URL, or open the URL using EasyMercurial or your preferred Mercurial client.

The primary repository for this project is hosted at https://github.com/cannam/constant-q-cpp/ .
This repository is a read-only copy which is updated automatically every hour.

Statistics Download as Zip
| Branch: | Revision:

root / cq / Chromagram.h

History | View | Annotate | Download (4.14 KB)

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