Spaces:
Sleeping
Sleeping
File size: 1,056 Bytes
65600d1 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | """Spectrogram helper for wav files."""
import tempfile
import numpy as np
import librosa
import librosa.display
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
def wav_to_spectrogram_image(wav_path: str | None, title: str = "") -> str | None:
"""Convert wav to mel spectrogram png; return temp file path."""
if not wav_path:
return None
try:
y, sr = librosa.load(wav_path, sr=16000, mono=True)
mel = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=1024, hop_length=256, n_mels=80)
mel_db = librosa.power_to_db(mel, ref=np.max)
fig, ax = plt.subplots(figsize=(3, 2))
librosa.display.specshow(mel_db, sr=sr, hop_length=256, x_axis="time", y_axis="mel", ax=ax, cmap="magma")
if title:
ax.set_title(title[:40])
plt.tight_layout()
path = tempfile.NamedTemporaryFile(suffix=".png", delete=False).name
plt.savefig(path, dpi=80, bbox_inches="tight")
plt.close()
return path
except Exception:
return None
|