Librosa เป็นแพ็กเกจ Python ที่ช่วยวิเคราะห์ไฟล์เสียงและดนตรี แพ็กเกจนี้ยังช่วยสร้างระบบดึงข้อมูลเพลงได้ ในบทความนี้ เราจะดูวิธีบันทึก Librosa spectrogram plot เป็นภาพขนาดเฉพาะ
ขั้นตอน
- ตั้งค่าขนาดรูปและปรับ padding ระหว่างและรอบ subplots
- สร้าง figure และชุด subplots
- เริ่มต้นตัวแปร 3 ตัว hl, hi, wi เพื่อเก็บตัวอย่างต่อเวลาใน spectrogram ความสูงและความกว้างของภาพ
- โหลด demo track
- สร้าง window คือ ลิสต์สำหรับ audio time series
- คำนวณ mel-scaled spectrogram ใช้ melspectrogram() ด้วย window และข้อมูลขั้นตอน 3
- แปลง power spectrogram (amplitude squared) เป็นหน่วย decibel (dB) ใช้เมธอด power_to_db()
- แสดง spectrogram เป็น img (สามารถบันทึกได้ที่นี่)
- บันทึก img ด้วย savefig()
- แสดงภาพด้วยเมธอด plt.show()
ตัวอย่าง
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 # number of samples per time-step in spectrogram
hi = 128 # Height of image
wi = 384 # Width of image
# Loading demo track
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()
ผลลัพธ์
