Paolo Guccini

"Impossibile" non è mai la risposta giusta

I FORMATI SONORI

Questo articolo cercherà di dare tutte le basi teoriche utili per comprendere al meglio "sox", un potente convertitore freeware

Un suono, di qualsiasi complessità esso sia, da un semplice beep ad un brano di musica classica composto dalla somma di moltissimi strumenti, è fisicamente trasmesso attraverso onde sonore, che non sono altro che onde di pressione in un mezzo elastico come l’aria.
L’orecchio di un ascoltatore posto all’interno del volume d’aria nel quale le onde sonore si diffondono viene investito da queste onde di pressione, che muovono il timpano avanti e indietro rispetto alla posizione di riposo. Lo stesso avviene alla membrana di un microfono.
Il microfono è un dispositivo analogico che converte il segnale di pressione in un segnale elettrico in cui una tensione variabile nel tempo ha lo stesso andamento della pressione acustica.

L’altoparlante è un dispositivo molto simile che svolge la funzione complementare: un segnale elettrico mette in vibrazione una membrana che comprime ed espande l’aria circostante rigenerando onde sonore della stessa forma. Si noti che un segnale acustico e così pure la sua copia elettrica è intrinsecamente caratterizzato da oscillazioni pressoché simmetriche attorno ad uno stato di quiete.
Quindi la rappresentazione più naturale fa corrispondere il silenzio ad un voltaggio nullo, mentre il suono è dato da un segnale di tensione alternata, positiva e negativa.
Naturalmente è possibile inviare ad un altoparlante un segnale elettrico generato artificialmente in qualche modo ed ottenere un suono "sintetico". I suoni generati elettronicamente nei primi home computer così come nei primi strumenti musicali elettronici erano ottenuti a partire da forme d’onda semplici come sinusoidi, onde quadre, triangolari e a dente di Sega.
Un dispositivo elettronico che genera un segnale di tensione variabile di questo tipo si chiama oscillatore.
Combinando e filtrando questi ingredienti di base si possono ottenere delle grezze imitazioni di suoni naturali, nonché produrne di nuovi, abbastanza diversi da quelli prodotti da strumenti acustici, dal suono appunto "artificiale" o "sintetico".
Esempi di questo tipo di approccio sono il beep dello speaker dei PC, che emette onde quadre in un certo intervallo di frequenze, i chip audio del Commodore 64 e degli altri home computer e console ad 8 bit, che tipicamente offrivano alcuni canali con la possibilità di scegliere la forma d’onda ed effettuare qualche filtraggio ed infine la sintesi FM delle schede Sound Blaster e relativi cloni. E' chiaro che ogni sistema di questo genere è un piccolo sintetizzatore musicale a sé ed i suoni che può generare sono descritti da mini-programmi che controllano gli oscillatori attraverso dei registri.
Più recentemente si è diffuso un approccio totalmente diverso, quello dell’audio descritto per campioni, metodo noto anche con i nomi di PCM (Pulse Code Modulation) e Wavetable.
L’idea è l’equivalente digitale di un registratore a nastro: un segnale acustico reale prelevato da un microfono e da esso convertito in segnale elettrico viene congelato su un qual che supporto fisico, in modo da poterlo riprodurre a piacere inviando all’altoparlante un segnale elettrico identico.
I risultati di questa tecnica sono molto migliori rispetto a quelli della sintesi per forme d’onda semplici.
Facendo una analogia grafica, la differenza è la stessa che passa tra le immagini del televideo, sintetizzate con quadratini di colori primari (analoghi del le forme d’onda di base) e le fotografie digitalizzate, acquisite da scanner o telecamera.
I dispositivi che permettono di "registrare" un suono nella memoria di un computer (e quindi di conservarlo su memoria di massa) sono i convertitori analogico-digitale e digitale-analogico, in breve A/D e D/A.
Il convertitore A/D compie due operazioni: misura la tensione al suo ingresso ad intervalli di tempo uniformi e ne rappresenta il valore con un numero binario alla sua uscita.
Questa operazione comporta una discretizzazione del tempo e una quantizzazione delle ampiezze, ovvero il segnale elettrico, che intrinsecamente varia con continuità nel tempo, viene invece descritto solo attraverso campioni prelevati ad intervalli discreti di tempo, così come l’ampiezza del valore misurato in ciascun istante viene approssimata con uno dei valori finiti rappresentabili dall’uscita digitale del convertitore.
Un suono viene dunque rappresentato da una sequenza di campioni, che non sono altro che numeri binari (solitamente a 8 o 16 bit e con segno).
Inviando la stessa sequenza ad un convertitore DIA, questo riprodurrà un segnale elettrico continuo abbastanza simile a quello originale che, inviato ad un altoparlante, rigenererà il suono.

I parametri del campionamento

È chiaro che questo tipo di sistema di codifica dei suoni, a differenza dell’approccio per sintesi, è più omogeneo da una piattaforma all’altra.
Il principio è infatti esattamente lo stesso, ciò che cambia sono i parametri usati nel campionamento, cioè nella conversione da analogico a digitale. Vediamo quali sono i parametri.

Frequenza di campionamento

Si misura in numero di campioni per secondo. Solitamente il valore è espresso usando impropriamente l’unità di misura Hz (Hertz) o kHz (chilo-Hertz). Ovviamente maggiore è il numero di campioni per secondo, migliore sarà la qualità, ovvero la somiglianza del suono ricostruito all’originale, in quanto si perderanno meno dettagli.
I valori più tipici (espressi in campioni/sec o Hertz) sono quelli elencati nella tabella 1. La perdita di qualità si avverte come attenuazione e taglio delle frequenze più alte. Per il teorema del campionamento, la massima frequenza ricostruita è la metà della frequenza di campionamento utilizzata. Tenendo presente che l’orecchio umano percepisce frequenze fino a circa 20 kHz, da 40000 campioni/sec in su non si dovrebbe avere nessuna perdita percettibile.

Numero di bit per campione

Comunemente si usano 8 o 16 bit per rappresentare i valori dei campioni, ma esistono anche formati intermedi a 12 e 14 bit e codifiche "esotiche" con campioni in virgola mobile. Anche in questo caso un maggior numero di bit equivale a una migliore definizione del suono ricostruito. In particolare aumenta la gamma dinamica, ovvero la varietà di livelli di volume riprodotti e la conseguente capacità di distinguere i dettagli di basso volume.

Numero di canali

Per un segnale monofonico basta un canale, però spesso si raggruppano insieme più segnali: due per la stereofonia, più di due per effetti particolari (tipo surround). Quando ci sono più canali da riprodurre simultaneamente i dati relativi saranno solitamente memorizzati secondo un qualche schema alternato o interlacciato. Oltre a questi parametri fondamentali, che caratterizzano le informazioni da memorizzare, esistono alcune varianti di codifica.
Una prima importante differenza è costituita dalla scelta tra numeri con segno o privi di segno per conservare i campioni. Abbiamo detto che la rappresentazione più naturale prevede va lori positivi e negativi, tuttavia per semplicità a volte si pone il "silenzio" in corrispondenza del valore medio e si utilizza un intero senza segno.
Ad esempio, per campioni ad 8 bit possiamo scegliere di far spaziare i valori tra 0 e 255 con il silenzio posto in corrispondenza del valore 127-128, oppure usare una codifica in complemento a due ottenendo uno spettro di valori da -128 a +127.
Oltre a questa codifica lineare esiste anche una codifica logaritmica, che può essere vista come una forma di compressione (della gamma dinamica). In questa modalità di rappresentazione dei campioni, chiamata U-LAW, si rappresentano con 8 bit dei livelli di volume non distribuiti uniformemente, bensì più densi nella parte bassa del dominio.
In questo modo si conservano i piccoli dettagli senza occupare troppo spazio.
Un campione a 8 bit U-LAW è paragonabile in termini di qualità ad un campione lineare a 12 bit.

I formati file

Quando si vogliono conservare le in formazioni relative ad un suono campionato in maniera permanente le si riversa ovviamente su memoria di massa.
Nel fare questo si compiono delle scelte nell’organizzazione dei dati all’interno di un file. Tuttavia, per la semplicità intrinseca di questo tipo di dato (se confrontato ad esempio con una immagine), ci sono maggiori somiglianze tra un formato e l’altro. Anzi, in linea di massima la porzione principale del file è sempre costituita dai campioni in sequenza, così che è sempre possibile provare ad ascoltare un file qualsiasi semplicemente dando in pasto il suo contenuto al convertitore D/A del computer - ad esempio su unix "cattandolo" nel /dev/audio – oppure forzando un player a suonare un formato che non riconosce interpretandolo come se contenesse "raw data", ovvero i dati dei campioni nudi e crudi. Quello che si ottiene in questo modo spesso assomiglia abbastanza al suono originale.
Dalla trattazione precedente dovrebbe comunque essere chiaro che oltre ai valori dei campioni sono necessarie altre informazioni per ricostruire correttamente un suono.
Queste informazioni aggiuntive sono soprattutto i parametri fondamentali che abbiamo visto sopra. La frequenza di campionamento, in particolare, deve essere la stessa durante l’acquisizione e la riproduzione, altrimenti avremo lo stesso effetto di quando sceglievano il numero di giri sbagliato su un giradischi (per chi si ricorda ancora cos’è).
Ancora più importante è la corretta interpretazione del formato di codifica dei campioni e l’ordine tra byte alto e byte basso (big endian e little endian) nel caso dei 16 bit. A differenza dei formati grafici, i file sonori non contengono solitamente alcuno schema di compressione dei dati. Contrariamente a quanto si potrebbe pensare, infatti, i dati audio non sono molto comprimibili, almeno con le tecniche a riduzione di entropia tipi che delle utility di compressione dati quali zip ecc. Abbiamo già fatto un accenno alla codifica logaritmica.
Un altro sistema utilizzato per ridurre l’occupazione di memoria dei dati audio consiste nella rappresentazione della differenza tra un campione e il successivo, seguita da codifica di Huffman.
Altri formati individuano eventuali porzioni di silenzio e le rappresentano in maniera compatta memorizzandone solo posizione e durata.
Rapporti di compressione più spinti si possono ottenere solo con metodi sofisticati, basati su una analisi psicoacustica, che tiene cioè conto delle caratteristiche del sistema uditivo umano per eliminare i dettagli che non saremmo comunque in grado di percepire.
Queste tecniche sono alla base del l’MPEG audio e del formato di registrazione dei MiniDisc Sony.
Infine esistono tecniche orientate alla compressione di segnali audio non generici, bensì vocali, ovvero al parlato (e quindi non adatti all’utilizzo musicale) come la codifica dei cellulari GSM.
Tuttavia, come dicevamo prima, tutti questi formati non sono attualmente molto diffusi; ne riparleremo eventualmente in un articolo futuro.
Esistono dei formati audio "raw" che non contengono un header descrittivo, ma solamente i campioni.
Si trovano solitamente in file con estensione .snd su PC, Macintosh (8 bit unsigned) e Amiga (8 bit signed).
La frequenza di campionamento è variabile; nel caso di piccoli effetti sonori e singole note di strumenti musicali questo non è un grosso problema, anzi può essere interessante riprodurre il suono ad una frequenza di nostra scelta per adattarlo ai nostri gusti personali o all’uso che intendiamo farne.
La maggior parte degli altri formati audio ha invece una struttura ben definita e prevede molteplici metodi e opzioni di codifica, che vengono specificati nella parte iniziale (header) del file.
L’header può iniziare con un "magic number", una sequenza di byte usata per identificare univocamente il tipo di file. Inoltre nell’header verranno memorizzate eventuali stringhe di commento inserite dall’applicazione che ha creato il file o dall’utente.

Convertire i file audio

La conversione del formato di un file in un altro è generalmente un problema molto complesso in quanto richiede una approfondita conoscenza di entrambi nonché il ricercare un valido algoritmo di trasformazione; tale operazione sui file musicali risulta relativamente complessa.
Essi possono essere suddivisi in due tipologie: quelli che contengono al loro interno l’effetto sonoro digitalizzato che può essere inviato diretta mente su un canale di output del computer che indirizzi un dispositivo qua le l’altoparlante, oppure possono con tenere una serie più o meno complessa di istruzioni per un dispositivo qua le la scheda sonora o altri.
Anche se i tipi di strutture differiscono sensibilmente le une dalle altre, esistono alcuni concetti comuni a tutti i quali possono costituire il fulcro del lavoro di un programma di conversione.
Innanzitutto si può osservare che l’oggetto del file è un effetto sonoro che, al di là della sua complessità, ha uno svolgimento sequenziale e temporale. In altre parole, se il file contiene quanto prodotto da uno strumento musicale in un tempo "t", le informazioni che indicheranno alla scheda sonora quali siano i suoni che dovranno essere emessi saranno sequenziali e dovranno, per ogni istante di t, riportarne le caratteristiche quali, per esempio, il volume e le note.
Generalmente, allo scopo di ridurre la dimensione dei file ma, soprattutto, la quantità di messaggi che devono essere inviati al dispositivo sonoro, si ricorre a varie tecniche che prevedono la trasmissione di pacchetti di dati che specificano gli effetti sonori in sequenza riportandone la durata espressa con una determinata unità di misura quale la frazione di secondo.
Per esempio, se l’effetto sonoro è costituito da una nota costante di durata t1, il messaggio con terrà al suo interno tale valore e non sarà più necessario inviarne altri fino a quando tale tempo non sia trascorso; questo tempo può essere sfruttato per mandare altri messaggi nel buffer della scheda oppure per poter gestire, tramite la stessa tecnica, più strumenti simultaneamente come accade nel MIDI oppure nei protocolli che supportano l’effetto stereo.
Ma per chi desidera avventurarsi nel settore delle conversioni dei file audio c’è una stupenda notizia: esiste un programma, che finora è stato distribuito in versione freeware, il quale è in grado di gestire correttamente numerosissimi formati. Il suo nome è "Sox" (Sound eXchange) e ne troverete una copia nel dischetto allegato alla rivista con tanto di file di documentazione.
Mi risulta che i suoi sorgenti in linguaggio C siano distribuiti gratuitamente e penso che saranno di vostro gradimento.
In tutte le prove di conversione che ho effettuato, il "Sox" ha funzionato conettamente anche se talvolta si è reso necessario il dare un’occhiata al ma nuale per analizzare i vari switch af finché il file di output fosse identico a quello di input.
Fra i numerosi switch di cui il programma è fornito ve ne segnalo uno anche se è un poco fuori argomento ma ritengo sia comunque estremamente interessante: tramite l’opzione reverse, il Sox è in grado di generare un file che sia speculare all’originale, ovvero ribaltando il suo ordine ed incominciando dalla fine.
Per chi non ne fosse a conoscenza, svariate canzoni contengono al loro interno dei messaggi subliminali, ovvero messaggi che non sono normalmente riconoscibili dall’uomo in quanto registrati al contrario. Anche se non ho trovato riscontri scientifici riguardo l’efficacia ditale tipo di subliminali, sembra certo che essi siano realmente operativi e, comunque, chi ve li ha inseriti era ovviamente sicuro del loro risultato.
L’unico problema pratico consiste nel fatto che per poter esaminare con questo sistema una canzone si rende necessario un hard disk di notevole capacità, ma, chi ancora disponesse dei vecchi giradischi ed di un po’ di pazienza, può togliere la cinghia dal motore e far girare manualmente il disco sul piatto in senso antiorario ad una velocità simile a quella normale: se sono presenti dei messaggi potrete ascoltarli.

Tabella 1 - I valori di campionamento più comuni

8000 usata nei sistemi telefonici o per campionare la voce umana a bassa qualità
11000 tipica frequenza macintosh
22000 qualità tipo radio FM
44100 usata nel CD audio
48000 usata dal DAT (Digital Audio Tape)

Riquadro 1 - Un esempio: il formato .voc

Analizziamo le principali parti costituenti un file sonoro utiliz zando lo standard della Creative: i file .voc. Essi presentano un header il quale contiene varie informazioni non particolarmente utili:
- una stringa contenente la frase "Creative Voice File" seguita dal carattere 0xlA che causa l’interruzione della stampa o visualizzazione del file;
- seguono, all’indirizzo 0x14, due byte indicanti la posizione di ini zio dei dati veri e propri; sebbene appaia inutile in quanto i dati iniziano dopo l’header, questa tecnica consente di poter variarne la dimensione senza influire sui programmi affinché essi possano essere impiegati anche per i file generati da successive release;
- in posizione 0x16 sono presenti due byte contenti la release; per utilizzare questo valore bisogna invertire fra loro i due byte. Il valore classico è 0x0A, 0x01;
- seguono altri due byte contenenti i valori 0x29 e Ox11 riportanti altre informazioni sulla versione.
Dopo l’header iniziano i dati. Essi sono racchiusi in una struttu ra chiamata Data Block che è composta da tre elementi (a parte il Data Block ‘Terminator" che è composto solo dal primo):
- l’identificatore del tipo di Data Block (un byte);
- l’indicatore della dimensione (tre byte);
- le informazioni (di lunghezza variabile come definito dal campo precedente);
I Data Block sono nove:

  • Terminator (codice 0)
  • Sound Data (1)
  • Sound Continue (2)
  • Silence (3)
  • Marker (4)
  • ASCII (5)
  • Repeat (6)
  • End Repeat (7)
  • Extender (8)

Per vedere in pratica un semplicissimo programma di visualizzazione dei vari Data Block vi rimando al listato 1: esso prende dalla command line il nome del file da analizzare e visualizza i dati dell’ header e i vari Data Block presenti.

Riquadro 4 - glossario

Altezza
Misurata in Hertz (Hz) o cicli al secondo, indica con precisione la collocazione del suono nella fascia acuta o grave.

Armoniche
Sotto-toni presenti nell’onda sonora e rilevabili attraverso l’analisi delle frequenze, che definiscono la qualità di un suono.

ADC (Analogue to Digital Conversion)
Conversione da analogico a digitale. Processo di conversione di un onda elettrica, rappresentante un’onda sonora, in formato digitale.

Campione
Una registrazione digitale di un suono costituita generalmente da numerose misurazioni tese a catturare la forma dell’onda sonora relativa.

Chorus
Il chorus è un effetto che aggiunge a un suono corposità e spessore. Particolarmente funzionale quando applicato a suoni tipo organi o archi, ne esistono di modelli analogici o, attualmente più diffusi, digitali (vedi DSP).

DAC (Digital to Analogue Conversion)
Conversione da digitale ad analogico. Processo di conversione di un campione di suono in formato digitale a formato analogico finalizzata generalmente alla sua emissione.

DSP (Digital Signal Processor)
Elaboratore di segnali musicali. Chip finalizzato all’aggiunta di effetti speciali ai suoni. General mente installato su schede audio, sintetizzatori, campionatori o disponibile per gli usi professionali su supporti hardware esterni dedicati.

Frequenza
Termine che indica l’altezza di un suono.

Frequenza di campionamento
Numero di misurazioni al secondo utilizzate per creare un campione. Normalmente i più diffusi campionatori gestiscono le frequenze di campionamento di 44 Khz, 22 Khz e 11 Khz.

GM (General Midi)
Protocollo Midi che descrive le caratteristiche, i comandi, gli effetti e gli strumenti generalmente presenti su schede audio o sintetizzatori. Il protocollo GM sta riscuotendo grande successo per le possibilità offerte nella produzione e gestione di file musicali - Midi file - facilmente leggibili su macchine e/o apparati diversamente configurati o di differenti produttori.

GS (General Standard)
Estensione promossa dalla Roland al protocollo Generai Midi per aumentare il numero di strumen ti o effetti presenti su sintetizzatori o schede audio.

MIDI (Musical instrument Digital interface)
Interfaccia digitale per strumenti musicali. Rappresenta attualmente il formato standard più diffuso per la connessione fisica di strumenti e PC e il trasferimento di informazioni fra loro.

Multitimbrico
Caratteristica di alcuni strumenti musicali (oggi ampiamente diffusa su sintetizzatori, campionatori ecc.) che permette la riproduzione contemporanea di diversi timbri o voci.

Polifonia
Il numero di note che uno strumento può riprodurre contemporaneamente indipendentemente dal timbro a cui vengono assegnate (qualora tuttavia il timbro dovesse essere basato su più di un campione la polifonia si ridurrebbe di conseguenza).

Risoluzione di campionamento
Corrisponde alla precisione con cui viene effettuata una singola misurazione di campionamento di un suono costituendosi così anche come indice della qualità del campionamento stesso. Indicativamente la qualità di riproduzione di un registratore a nastro a basso costo è paragonabile a 8 bit, mentre quella di un CD player a circa 16 bit.

Riverbero
Il riverbero è un effetto che aggiunge al suono profondità e ambiente. L’effetto che si ottiene aggiungendo del riverbero ad un suono è una simulazione della risposta acustica che un determinato tipo di ambiente (per esempio una sala da concerto, una cattedrale gotica e così via) fornirebbe a quel determinato suono.

Sintesi FM (Frequency Modulation)
Tecnica per la creazione di suoni, simulanti strumenti reali o di fantasia, che sfrutta i generatori di onde sinusoidali.

Timbro
Caratteristica fondamentale del suono che ne indica la provenienza. Attraverso il processo del l’analisi della frequenza vengono evidenziate le caratteristiche (armoniche o sotto-toni) delle forme d’onda che, essendo specifiche per ciascun differente strumento musicale ne consentono l'individuazione.

Vibro Speed Depth
Parametro di gestione del suono, sia esso campionato o frutto di sintesi analogica, che ne determi na la profondità dell’effetto di modulazione ossia del vibrato.

Voce
Una voce è un singolo campione disponibile su uno strumento o scheda audio. Viene talvolta definita "timbro" anche se ciò può indurre in confusione con l’omonima caratteristica generale del suono determinata dalla conformazione delle armoniche nei cicli dell’onda sonora relativa.

Il testo e' stato acquisito tramite OCR dalla rivista su cui e' stato pubblicato e velocemente ricontrollato.
Le segnalazioni di errori saranno molto gradite e si possono fare alla pagina Contatti.

Tratto da:
Paolo Guccini - Giulio Spelanzon
Rivista DEV Computer Programming
Edizioni Infomedia
Settembre 1995