Librosa là gói Python giúp phân tích file âm thanh và nhạc. Gói này cũng giúp tạo hệ thống truy xuất thông tin âm nhạc. Trong bài này, chúng ta sẽ xem cách lưu biểu đồ spectrogram Librosa thành ảnh với kích thước cụ thể.
Các bước
Thiết lập kích thước figure và điều chỉnh padding giữa và xung quanh subplots.
Tạo figure và tập subplots.
Khởi tạo ba biến khác nhau: hl, hi, wi, để lưu mẫu trên thời gian trong spectrogram, chiều cao và chiều rộng ảnh.
Load track demo.
Tạo window, danh sách cho audio time series.
Tính mel-scaled spectrogram, dùng melspectrogram() với window và dữ liệu bước 3.
Chuyển power spectrogram (bình phương biên độ) sang đơn vị decibel (dB), dùng power_to_db().
Hiển thị spectrogram như img (có thể lưu tại đây).
Lưu img bằng savefig().
Hiển thị ảnh bằng plt.show().
Ví dụ
import numpy as np
import matplotlib.pyplot as plt
import librosa.display
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
hl = 512 # số mẫu trên bước thời gian trong spectrogram
hi = 128 # Chiều cao ảnh
wi = 384 # Chiều rộng ảnh
# Load track demo
y, sr = librosa.load(librosa.ex('trumpet'))
window = y[0:wi*hl]
S = librosa.feature.melspectrogram(y=window, sr=sr, n_mels=hi, fmax=8000, hop_length=hl)
S_dB = librosa.power_to_db(S, ref=np.max)
img = librosa.display.specshow(S_dB, x_axis='time', y_axis='mel', sr=sr, fmax=8000, ax=ax)
plt.savefig("out.png")
plt.show()
Kết quả
