Audio Visualization with Spectrograms
Visualize audio files as mel spectrograms, chromagrams, and MFCC feature plots using the librosa Python library. Useful for music analysis, speech processing, and audio debugging.
When to Use
- User wants to visualize what an audio file "looks like"
- User wants to analyze the frequency content of a recording
- User wants to compare two audio files visually
- User wants to understand musical key or chroma content
- User wants to extract MFCC features for a machine learning task
How to Use
1. Install dependencies
powershellpip install librosa matplotlib soundfile
2. Generate a mel spectrogram
pythonimport librosa import librosa.display import matplotlib.pyplot as plt import numpy as np def mel_spectrogram(audio_path, output="mel_spec.png"): y, sr = librosa.load(audio_path, sr=None) S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128, fmax=8000) S_db = librosa.power_to_db(S, ref=np.max) fig, ax = plt.subplots(figsize=(12, 4), facecolor="#0d1117") ax.set_facecolor("#0d1117") img = librosa.display.specshow(S_db, sr=sr, x_axis="time", y_axis="mel", fmax=8000, ax=ax, cmap="magma") fig.colorbar(img, ax=ax, format="%+2.0f dB", label="dB") ax.set_title(f"Mel Spectrogram — {audio_path}", color="white") ax.tick_params(colors="white") ax.xaxis.label.set_color("white") ax.yaxis.label.set_color("white") plt.tight_layout() plt.savefig(output, dpi=150, bbox_inches="tight") plt.close() print(f"Saved: {output}") mel_spectrogram("song.mp3")
3. Generate a chromagram (musical key content)
pythonimport librosa, librosa.display, matplotlib.pyplot as plt def chromagram(audio_path, output="chroma.png"): y, sr = librosa.load(audio_path, sr=None) chroma = librosa.feature.chroma_cqt(y=y, sr=sr) fig, ax = plt.subplots(figsize=(12, 4), facecolor="#0d1117") ax.set_facecolor("#0d1117") img = librosa.display.specshow(chroma, y_axis="chroma", x_axis="time", ax=ax, cmap="coolwarm") fig.colorbar(img, ax=ax) ax.set_title("Chromagram", color="white") ax.tick_params(colors="white") plt.tight_layout() plt.savefig(output, dpi=150, bbox_inches="tight") plt.close() print(f"Saved: {output}") chromagram("song.mp3")
4. Generate MFCC features
pythonimport librosa, librosa.display, matplotlib.pyplot as plt import numpy as np def mfcc_plot(audio_path, n_mfcc=20, output="mfcc.png"): y, sr = librosa.load(audio_path, sr=None) mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=n_mfcc) fig, ax = plt.subplots(figsize=(12, 4), facecolor="#0d1117") ax.set_facecolor("#0d1117") img = librosa.display.specshow(mfccs, x_axis="time", ax=ax, cmap="viridis") fig.colorbar(img, ax=ax) ax.set_title(f"MFCC ({n_mfcc} coefficients)", color="white") ax.tick_params(colors="white") plt.tight_layout() plt.savefig(output, dpi=150, bbox_inches="tight") plt.close() print(f"Saved: {output}") mfcc_plot("speech.wav", n_mfcc=13)
5. Generate all three plots at once
pythondef analyze_audio(audio_path): base = audio_path.rsplit(".", 1)[0] mel_spectrogram(audio_path, output=f"{base}_mel.png") chromagram(audio_path, output=f"{base}_chroma.png") mfcc_plot(audio_path, output=f"{base}_mfcc.png") print(f"Analysis complete: 3 PNG files saved for {audio_path}") analyze_audio("recording.wav")
6. Get basic audio statistics
pythonimport librosa, numpy as np y, sr = librosa.load("audio.mp3", sr=None) duration = librosa.get_duration(y=y, sr=sr) tempo, _ = librosa.beat.beat_track(y=y, sr=sr) rms = np.sqrt(np.mean(y**2)) print(f"Duration: {duration:.2f} seconds") print(f"Sample rate:{sr} Hz") print(f"Tempo: {tempo:.1f} BPM") print(f"RMS energy: {rms:.4f}")
Examples
"Show me what this audio recording looks like as a spectrogram" → Use step 2 to generate a mel spectrogram PNG. Open the saved file.
"What musical key is this song in? Visualize the chroma content" → Use step 3 to generate a chromagram — peaks in chroma rows indicate dominant pitch classes.
"Generate MFCC features from this speech recording for my ML model"
→ Use step 4 to plot MFCCs, then extract the mfccs array for downstream ML use.
Cautions
- librosa loads audio in float32 mono by default — stereo files are mixed down automatically
- Large audio files (> 30 minutes) take significant time and memory to process — slice with
offsetanddurationparameters if needed librosa.loadsupports MP3, WAV, FLAC, OGG — ensuresoundfileandaudioreadare installed for MP3 support- MFCC coefficients are sensitive to
n_mfccandsr— use consistent settings across all files in an ML dataset


