def _compute_cqt(self, y, sr):
"""Compute a CQT.
Parameters
----------
y : np.array
Audio signal
sr : float
Audio singal sample rate
Returns
-------
cqt_log : np.array [n_samples, n_freqs]
Log amplitude CQT.
samples : np.array [n_samples]
CQT time stamps.
freqs : np.array [n_freqs]
CQT frequencies.
"""
fmin = librosa.note_to_hz(self.min_note)
bins_per_octave = 12
n_cqt_bins = bins_per_octave * self.n_octaves
cqt = np.abs(librosa.cqt(
y, sr=sr, hop_length=self.hop_size, fmin=fmin,
filter_scale=self.filter_scale,
bins_per_octave=bins_per_octave, n_bins=n_cqt_bins
))
cqt = self._norm_matrix(cqt)
n_time_frames = cqt.shape[1]
freqs = librosa.cqt_frequencies(
fmin=fmin, bins_per_octave=bins_per_octave,
n_bins=n_cqt_bins
)
samples = librosa.frames_to_samples(
range(n_time_frames), hop_length=self.hop_size
)
return cqt, samples, freqs
评论列表
文章目录