A C++ library and Vamp plugin implementing the Constant-Q transform of a time-domain signal.

The Constant-Q transform is a time-to-frequency-domain transform related to the short-time Fourier transform, but with output bins spaced logarithmically in frequency, rather than linearly. The output bins are therefore linearly spaced in terms of musical pitch.

This library provides:

  • Forward transform: time-domain to complex Constant-Q bins
  • Forward spectrogram: time-domain to interpolated Constant-Q magnitude spectrogram
  • Inverse transform: complex Constant-Q bins to time domain

Also included is a Vamp plugin which provides both Constant-Q spectrogram and Chromagram (Constant-Q "folded" into a single octave) features from audio input.

The method is drawn from Schörkhuber and Klapuri, SMC 2010. The implementation is reasonably fast and is causal, operating block-by-block on the input, though with quite high latency depending on the frequency range specified. By default it produces output at a higher time resolution than some other implementations, using multiple kernel atoms per time block. The inverse transform is approximate rather than exact (see the paper for details).

The library is provided under a liberal BSD/MIT-style open source licence.

See also the reference MATLAB toolbox.

Related publications

C. Schörkhuber and A. Klapuri, “Constant-Q transform toolbox for music processing,” in Proceedings of the 7th Sound and Music Computing Conference, Barcelona, Spain, 2010.
[More Details] [BIBTEX] [URL (ext.)]