Как рассчитать и визуализировать CQT в librosa с bins_per_octave, отличным от 12? - PullRequest
0 голосов
/ 11 января 2019

При изменении параметра bins_per_octave масштаб по оси y изменяется, и график смещается вверх, если bins_per_octave увеличивается. Как я могу настроить ось Y, чтобы увидеть весь график?

y, sr = librosa.load("CScale.wav") #sr = 22050
y_16k = librosa.resample(y,sr,16000)
print(y.shape) #(1422336,)
print(y_8k.shape) #(516041,)
C = np.abs(librosa.cqt(y, sr=sr,bins_per_octave=12))
C_16k = np.abs(librosa.cqt(y_16k, sr=16000,bins_per_octave=24))
print(C.shape) #(84, 2779)
print(C_16k.shape) #(84, 2016)

plt.subplot(2, 1, 1)
librosa.display.specshow(librosa.amplitude_to_db(C, ref=np.max),sr=sr, x_axis='time', y_axis='cqt_note')

plt.subplot(2, 1, 2)
librosa.display.specshow(librosa.amplitude_to_db(C_16k, ref=np.max),sr=16000, bins_per_octave=24, x_axis='time', y_axis='cqt_note')

plt.colorbar(format='%+2.0f dB')
plt.title('Constant-Q power spectrum')
plt.tight_layout()

plt.show()

Вот мой вывод CQT .

Как настроить ось Y второго изображения, чтобы оно выглядело как первое изображение?

1 Ответ

0 голосов
/ 11 января 2019

Я решил это, добавив параметры n_bins и fmin, как указано в документации , но я до сих пор не понимаю, как это работает. Я хочу сделать это, чтобы включить все 88 заметок.

C_16k = np.abs(librosa.cqt(y_16k, sr=16000,fmin=librosa.note_to_hz('C2'), n_bins=60 * 2, bins_per_octave=12 * 2))
librosa.display.specshow(librosa.amplitude_to_db(C_16k, ref=np.max),fmin=librosa.note_to_hz('C2'),sr=16000, bins_per_octave=24, x_axis='time', y_axis='cqt_note')
...