Creazione di Immagini delle Onde Sonore: Waveform, Spectrogrammi e Codice (Python, MATLAB, DAW)
Un'“immagine dell'onda sonora” è una visualizzazione dell'ampiezza audio nel tempo (waveform) o della frequenza nel tempo (spectrogramma). Ecco come generare visualizzazioni personalizzabili di qualità editoriale utilizzando codice, DAW e strumenti online.
1. Python: Lo Standard Aureo (Programmatico, Batch, Gratuito)
Librerie: librosa (analisi), matplotlib (grafici), scipy.io.wavfile (input/output).
Waveform Base
import librosa import librosa.display import matplotlib.pyplot as plt import numpy as np # Carica y, sr = librosa.load("audio.wav", sr=None, mono=True) # sr=None mantiene il tasso nativo # Plot plt.figure(figsize=(14, 4)) librosa.display.waveshow(y, sr=sr, alpha=0.7, color='#1f77b4') plt.title("Waveform: Ampiezza vs Tempo") plt.xlabel("Tempo (s)") plt.ylabel("Ampiezza") plt.tight_layout() plt.savefig("waveform.png", dpi=300, bbox_inches='tight') plt.close() Spectrogramma (Frequenza vs Tempo - Colore = Magnitudo)
# STFT -> Magnitudo -> dB D = librosa.amplitude_to_db(np.abs(librosa.stft(y, n_fft=2048, hop_length=512)), ref=np.max) plt.figure(figsize=(14, 5)) librosa.display.specshow(D, sr=sr, hop_length=512, x_axis='time', y_axis='hz', cmap='magma') plt.colorbar(format='%+2.0f dB') plt.title('Spectrogramma (Frequenza Lineare)') plt.tight_layout() plt.savefig('spectrogram_linear.png', dpi=300) plt.close() # Mel Spectrogramma (Scala Frequenza Percettiva) M = librosa.feature.melspectrogram(y=y, sr=sr, n_fft=2048, hop_length=512, n_mels=128) M_db = librosa.power_to_db(M, ref=np.max) plt.figure(figsize=(14, 5)) librosa.display.specshow(M_db, sr=sr, hop_length=512, x_axis='time', y_axis='mel', cmap='viridis') plt.colorbar(format='%+2.0f dB') plt.title('Mel Spectrogramma') plt.tight_layout() plt.savefig('spectrogram_mel.png', dpi=300) Avanzato: Marcatori di Attacco/Battito, Chroma, Tonnetz
# Rilevamento attacco onsets = librosa.onset.onset_detect(y=y, sr=sr, units='time') plt.figure(figsize=(14, 4)) librosa.display.waveshow(y, sr=sr, alpha=0.5) for o in onsets: plt.axvline(o, color='red', alpha=0.5, linestyle='--') plt.title('Rilevamento Attacco') plt.savefig('onsets.png', dpi=300) 2. MATLAB / Octave (Standard Accademico/Ingegneristico)
[x, fs] = audioread('audio.wav'); if size(x,2) > 1, x = mean(x,2); end % Mono % Waveform t = (0:length(x)-1)/fs; figure; plot(t, x); xlabel('Tempo (s)'); ylabel('Ampiezza'); title('Waveform'); print('-dpng', '-r300', 'waveform_matlab.png'); % Spectrogramma window = hamming(1024); noverlap = 512; nfft = 1024; figure; spectrogram(x, window, noverlap, nfft, fs, 'yaxis'); colormap('jet'); colorbar; caxis([-100 0]); title('Spectrogramma (dB)'); print('-dpng', '-r300', 'spec_matlab.png'); 3. DAW e Editor Audio (Interattivo, Senza Codice)
| Software | Vista Waveform | Vista Spectrogramma | Esporta Immagine |
|---|---|---|---|
| Audacity (Gratuito) | Vista traccia predefinita. Zoom (Ctrl+1/2/3). | Menu a discesa traccia > **Spectrogram** / **Spectrogram Settings** (Finestra, Freq Max). | File > Esporta > **Esporta come PNG** (Selezione o Tutto). |
| Adobe Audition | Pannello Editor. Vista Spettrale (Attiva/Disattiva). | **Spectral Frequency Display** (Shift+D). Risoluzione, Finestra, Sovrapposizione regolabili. | Modifica > **Copia Vista Spettrale negli Appunti** → Incolla in PS. Oppure Screenshot. |
| iZotope RX | Panoramica Waveform + Spectrogramma (Collegati). | Top di gamma. FFT, Finestra, Gamma Dinamica, Colormap regolabili. | File > Esporta > **Immagine** (PNG, TIFF, SVG). Batch tramite Scripting. |
| Sonic Visualiser (Gratuito, Accademico) | Riquadro 1. | Riquadro 2: Livello > Aggiungi Spectrogramma. Livelli Mel, ERB, Chroma. | File > Esporta Immagine. Annotazioni incluse. |
| Reaper / Logic / Pro Tools / Ableton | Vista Arrangiamento. | Limitato / Tramite Plugin (Voxengo SPAN, Melda MAnalyzer, FabFilter Pro-Q 3). | Screenshot / Render Regione (Video). |
4. Strumenti Online (Zero Installazione)
- Spektrogram.com - Trascina e rilascia. Esporta PNG. Mel/Lineare. Ottimo per condivisione rapida.
- Academo Spectrum Analyzer - Microfono dal vivo o file. Animato.
- Audiotool - DAW nel browser. Dispositivo spectrogramma.
Avvertenza: Caricare audio sensibile su strumenti web = rischio per la privacy. Usa strumenti locali per contenuti privati.
5. Design/Arte: Vettore e Stilizzato (Figma, Illustrator, After Effects)
- After Effects: effetti **Audio Spectrum** / **Audio Waveform** su Solido. Collega al livello audio. Anima colori, spessore, lati, bande di frequenza. Esporta sequenza PNG / MP4 / GIF.
- TouchDesigner / Processing / p5.js: visuali audio-reattive in tempo reale. Spectrogrammi basati su shader.
- Figma/Illustrator: Importa PNG da sopra → Tracciamento Immagine (Vettore) → Stile tratti. Oppure usa plugin: Waveform (Figma), Audio Waveform Generator (AI).
Migliori Pratiche per la Pubblicazione
- Risoluzione: minimo 300 DPI (Stampa). 2x/3x per schermi Retina.
- Sicuro per Daltonici: Usa colormap **viridis**, **magma**, **cividis**, **turbo**. Evita **jet**, **rainbow**, **hot**.
- Etichette Assi: Sempre "Tempo (s)", "Frequenza (Hz/kHz)", "Potenza (dB)".
- Gamma Dinamica: Imposta `vmin/vmax` (matplotlib) / `caxis` (MATLAB) per tagliare il rumore di fondo (es. -80 a 0 dB).
- Vettore vs Raster: Waveform → SVG (scalabile). Spectrogrammi → PNG (raster intrinseco).
Per scienza/riproducibilità: **Python (librosa/matplotlib)**. Per mastering/QC: **iZotope RX / Sonic Visualiser**. Per arte/motion: **After Effects / TouchDesigner**. Per sguardo rapido: **Audacity / Spektrogram.com**.