c@126
|
1
|
c@126
|
2 Constant-Q Library
|
c@126
|
3 ==================
|
c@126
|
4
|
c@130
|
5 A C++ library and Vamp plugin implementing the Constant-Q transform
|
c@130
|
6 of a time-domain signal.
|
c@126
|
7
|
c@126
|
8 https://code.soundsoftware.ac.uk/projects/constant-q-cpp
|
c@126
|
9
|
c@126
|
10 The Constant-Q transform is a time-to-frequency-domain transform
|
c@126
|
11 related to the short-time Fourier transform, but with output bins
|
c@126
|
12 spaced logarithmically in frequency, rather than linearly. The output
|
c@126
|
13 bins are therefore linearly spaced in terms of musical pitch.
|
c@126
|
14
|
c@193
|
15 This implementation is reasonably fast and is causal, operating
|
c@193
|
16 block-by-block on the input, though with quite high latency depending
|
c@193
|
17 on the frequency range specified. By default it produces output at a
|
c@193
|
18 higher time resolution than some other implementations, using multiple
|
c@193
|
19 kernel atoms per time block. The inverse transform is approximate
|
c@193
|
20 rather than exact (see the paper cited below for details).
|
c@193
|
21
|
c@193
|
22
|
c@193
|
23 About this library
|
c@193
|
24 ------------------
|
c@193
|
25
|
c@126
|
26 This library provides:
|
c@126
|
27
|
c@126
|
28 * Forward transform: time-domain to complex Constant-Q bins
|
c@126
|
29 * Forward spectrogram: time-domain to interpolated Constant-Q
|
c@126
|
30 magnitude spectrogram
|
c@126
|
31 * Inverse transform: complex Constant-Q bins to time domain
|
c@126
|
32
|
c@163
|
33 The Vamp plugin provides:
|
c@163
|
34
|
c@163
|
35 * Constant-Q magnitude spectrogram with high and low frequency
|
c@163
|
36 extents defined in Hz
|
c@163
|
37 * Constant-Q magnitude spectrogram with high and low frequency
|
c@163
|
38 extents defined as MIDI pitch values
|
c@163
|
39 * Pitch chromagram obtained by folding a Constant-Q spectrogram
|
c@163
|
40 around into a single-octave range
|
c@163
|
41
|
c@193
|
42
|
c@193
|
43 Building the library and plugin
|
c@193
|
44 -------------------------------
|
c@193
|
45
|
c@193
|
46 To compile this code, use "make -f <file>" where <file> is one of
|
c@193
|
47 Makefile.linux, Makefile.osx, Makefile.mingw32 depending on
|
c@193
|
48 platform. These files set up some flags and include Makefile.inc,
|
c@193
|
49 which defines the input files and so forth. You could equally write
|
c@193
|
50 your own Makefile which does the same.
|
c@193
|
51
|
c@193
|
52 The Vamp plugin part of the build expects to find a compiled version
|
c@193
|
53 of the Vamp Plugin SDK in a neighbouring folder (../vamp-plugin-sdk).
|
c@193
|
54 The unit tests also require Boost headers to be available.
|
c@193
|
55
|
c@193
|
56 Note that this code uses the KissFFT library (compiled from source
|
c@193
|
57 bundled here) in its non-default double-precision mode via the use of
|
c@193
|
58 the flag -Dkiss_fft_scalar=double in Makefile.inc. If you want to
|
c@193
|
59 build this code using an external KissFFT library or custom build
|
c@193
|
60 scripts, you may need to do some work to ensure you have the right
|
c@193
|
61 configuration.
|
c@193
|
62
|
c@193
|
63
|
c@193
|
64 Credits
|
c@193
|
65 -------
|
c@193
|
66
|
c@126
|
67 The method is drawn from Christian Schörkhuber and Anssi Klapuri,
|
c@126
|
68 "Constant-Q transform toolbox for music processing", SMC 2010. See the
|
c@126
|
69 file CITATION for details. If you use this code in research work,
|
c@126
|
70 please cite this paper.
|
c@126
|
71
|
c@182
|
72 The C++ implementation is by Chris Cannam, Copyright 2014-2015 Queen
|
c@182
|
73 Mary, University of London.
|
c@126
|
74
|
c@126
|
75 The library is provided under a liberal BSD/MIT-style open source
|
c@126
|
76 licence. See the file COPYING for more information.
|
c@126
|
77
|