librosa.filters.cq_to_chroma

librosa.filters.cq_to_chroma(n_input, bins_per_octave=12, n_chroma=12, fmin=None, window=None, base_c=True)[source]

Convert a Constant-Q basis to Chroma.

Parameters:

n_input : int > 0 [scalar]

Number of input components (CQT bins)

bins_per_octave : int > 0 [scalar]

How many bins per octave in the CQT

n_chroma : int > 0 [scalar]

Number of output bins (per octave) in the chroma

fmin : None or float > 0

Center frequency of the first constant-Q channel. Default: ‘C1’ ~= 32.7 Hz

window : None or np.ndarray

If provided, the cq_to_chroma filter bank will be convolved with window.

base_c : bool

If True, the first chroma bin will start at ‘C’ If False, the first chroma bin will start at ‘A’

Returns:

cq_to_chroma : np.ndarray [shape=(n_chroma, n_input)]

Transformation matrix: Chroma = np.dot(cq_to_chroma, CQT)

Raises:

ParameterError

If n_input is not an integer multiple of n_chroma

Examples

Get a CQT, and wrap bins to chroma

>>> y, sr = librosa.load(librosa.util.example_audio_file())
>>> CQT = librosa.cqt(y, sr=sr)
>>> chroma_map = librosa.filters.cq_to_chroma(CQT.shape[0])
>>> chromagram = chroma_map.dot(CQT)
>>> # Max-normalize each time step
>>> chromagram = librosa.util.normalize(chromagram, axis=0)
>>> import matplotlib.pyplot as plt
>>> plt.subplot(3, 1, 1)
>>> librosa.display.specshow(librosa.logamplitude(CQT**2,
...                                               ref_power=np.max),
...                          y_axis='cqt_note', x_axis='time')
>>> plt.title('CQT Power')
>>> plt.colorbar()
>>> plt.subplot(3, 1, 2)
>>> librosa.display.specshow(chromagram, y_axis='chroma', x_axis='time')
>>> plt.title('Chroma (wrapped CQT)')
>>> plt.colorbar()
>>> plt.subplot(3, 1, 3)
>>> chroma = librosa.feature.chromagram(y=y, sr=sr)
>>> librosa.display.specshow(chroma, y_axis='chroma', x_axis='time')
>>> plt.title('librosa.feature.chroma')
>>> plt.colorbar()
>>> plt.tight_layout()

(Source code)