condivido con voi alcune informazioni su una piccola ma potente utility "the Swiss Army knife of sound processing programs", free e open source, per pc (Windows, Linux, MacOS X) che probabilmente diversi di voi già conoscono: SoX (che sta per Sound eXchange).
Si tratta di un programma, utilizzabile da riga di comando, dai molteplici usi: conversione di formato file audio, elaborazione di vario tipo come conversione freq. di campionamento, generazione di file o riproduzione di segnali audio.
Le funzionalità sono davvero molte, tutta la documentazione nonchè il download è reperibile qui: http://sox.sourceforge.net
Essendo il funzionamento basato su riga di comando potrà apparire un pò ostico ma in realtà è piuttosto semplice una volta compresa la logica.
In questo post mi concentrerò sull'utilizzo per generale file audio di segnali di test, utili ovviamente in svariati contesti (misurare la risposta in frequenza, il livello di uscita, la distorsione ecc.. ecc..).
Il punto forza di SoX, specialmente nel contesto della generazione di file audio di test, è la grande accuratezza di elaborazione (64 bit).
Naturalmente è molto comodo poter genererare file a piacere piuttosto che tenere un archivio permanente.
ESEMPIO: Generazione di un file audio tono sinusoidale 1KHz, livello 0dB, 16bit, 44.1KHz, wav, stereo, durata 120sec.
Codice: Seleziona tutto
sox -r 44100 -b 16 -n -c 2 -D C:\tono_1KHZ-0db.wav synth 120 sine 1000
-r 44100 : determina il "sample rate" ovvero la frequenza di campionamento del file audio che vogliamo generare, in questo caso 44100
-b 16 : risoluzione del file, in questo caso 16bit (ovviamente è basilare che sia la risoluzione che la freq. di campionamento sia supportata dal player che poi utilizzeremo per riprodurre il file)
-n : nessun file di input (SoX può elaborare file audio in input oppure generare da zero un file, come in questo caso)
-c 2 : numero di canali, 2 per stereo
-D : disabilita il "dithering", cosa è il diter? vedi qui https://it.wikipedia.org/wiki/Dithering , di default SoX effettua dithering quando il file di output ha risoluzione <24bit e in tutti i casi in cui ai richiede una elaborazione su un file di input con output con risolzuione inferiore all'input. In questo caso specifico (generazione di un tono a zero dB) normalmente si scegliere di evitare il dithering per evitare clipping, semmai il dithering è di solito utilizzato per i segnali a basso livello (si arriva anache a -120dB con risoluzione 16bit, ovvero al di sotto del limite teorico di risoluzione di -96dB) ma sono contesti particolari, non tanto per la taratura del proprio impianto audio ma per la misurazione ad es. della risoluzione/linearità di un DAC. Nei cd di test è di norma sempre specificato per ogni traccia se è stato utilizzato o no dithering. Ci sarebbe da scrivere un capitolo a parte su questo argomento, al di là di questo contesto (generare file di test) il corretto utilizzo del dithering è importante quando si tratta di transcodificare file audio in alta risoluzione verso formati a risolzione più bassa (tipicamente pcm 44.1/16) per renderli compatibili con le nostre sorgenti car audio, SoX da questo punto di vista offre una gestione molto raffinata con diverse curve/algoritmi di "noise shaping" (argomento colleralto al dithering: https://it.wikipedia.org/wiki/Noise_shaping).
L'output del file generato in questo esemprio è il seguente: C:\tono_1KHZ-0db.wav, il nome è arbitrario, se non si specifica il percorso il file sarà salvato nella stessa directory dove risiede l'eseguibile SoX. Cambiando l'estensione (es.: flac) è possibile generare file in svariati formati (per alcuni di essi è necessario avere installato i rispettivi codec).
synth 120 sine 1000 : genera "synth" un tono sinusoidale "sine" della durata di 120 secondi e frequenza fissa di 1000 Hz, il comando synth può generare toni sia a frequenza fissa che sweep nonchè rumore (white, pink, brown)
ESEMPIO 2: rumore rosa, livello -12dB, 16bit, 48KHz, flac, stereo, durata 5 min.
Codice: Seleziona tutto
sox -r 48000 -b 16 -n -c 2 -D C:\pink_-12dB.flac synth 300 pinknoise gain -12
synth 300 pinknoise gain -12 : genera rumore rosa, duarata 300 sec., livello -12dB
ESEMPIO 3: sweep lienare da 15Hz a 150Hz, livello -12dB, 16bit, 48KHz, stereo, flac, durata sweep 30sec., durata file 5min.
Codice: Seleziona tutto
sox -r 48000 -b 16 -n -c 2 -D C:\sweep_15-150Hz_-12dB.flac synth 30 sine 15:150 gain -12 repeat 9
synth 30 sine 15:150 gain -12 repeat 9 : genera sweep tono sinusoidale da 15 a 150Hz con crescita lineare frequenza, durata sweep 30sec., ripetuto per 1+9 volte (totale durata file 300sec.).
Le funzionalità di SoX sono molte molte altre, questi sono solo piccoli spunti, chi è stato incuriosito più consulare l'elenco completo dei comandi e le regole sintattiche qui: http://sox.sourceforge.net/sox.html
La qualità e precisione dei file generati è eccellente al pari, e in alcuni casi superiore, rispetto ai più blasonati cd di test.