Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Misure audio (parte 2) - wave file format

Nei sistemi DAW e nei software di elaborazione audio (tipo Audacity o Sound Forge) è possibile caricare un file wave del quale si può visualizzare la forma d'onda o sul quale è possibile effettuare modifiche, compiere elaborazioni audio o prelevare statistiche. Nella prima parte dell'articolo abbiamo descritto alcuni modi con cui si possono effettuare misurazioni audio insieme ad alcune definizioni di base delle grandezze in gioco e dei loro riferimenti. Cerchiamo ora di mettere insieme le varie cose, anche in considerazione del fatto che con un computer ed una scheda audio (integrata o meno) è piuttosto semplice produrre file waves (magari anche a partire dal dump di una traccia di un CD) e usarli per verificare i princìpi che si trovano descritti in molti libri di tecnica audio ed articoli in rete.

Wave file format
Il Wave file format è un formato di file sviluppato da Microsoft e IBM per il trasporto di audio digitale. E' un'applicazione delle specifiche RIFF (Resource Interchange File Format), un formato generico strutturato a chunk (qui il documento di specifica); è di conseguenza molto simile al formato AIFF/AIFC, in uso sui sistemi Apple. Non è tuttavia il formato usato direttamente nei CD i quali sono invece basati sulle specifiche del Red Book - in entrambi i casi i campioni sonori sono però rappresentati da sample Linear PCM, il che rende i due formati abbastanza vicini. Il formato dei CD prevede una coppia di canali (L/R) con samples a 16bit e campionamento a 44.1kHz mentre i file WAV supportano un numero arbitrario di canali (fino a 65526), una profondità di bit variabile ed uan frequenza di campionamento compresa tra 1Hz e 4.3GHz.

Sampling e quantizzazione
Il sampling è l'attività secondo la quale da un segnale tempo-continuo (ad esempio v(t), una tensione variabile) viene estratto un segnale tempo discreto (v[n], un insieme di "campioni" del segnale originale); la velocità con cui il segnale tempo-continuo viene campionato è detta frequenza di campionamento.

Una volta ottenuto un insieme discreto di campioni, ogni campione è ancora appartenente all'insieme dei numeri Reali e può assumere uno fra infiniti valori; l'intervallo entro il quale l'insieme di valori campionati si estende può essere suddiviso in un insieme finito di sotto-intervalli e procedere, a meno di un inevitabile errore di arrotondamento, col far corrispondere ogni punto dell'insieme campionato ad uno degli intervalli sottoponendo il set di campioni a quantizzazione:   

segnale tempo continuo campionato (asse x) e quantizzato (asse y)
i campioni ottenuti possono essere quindi opportunamente salvati in un file, tipo il file .WAV

Quantizzazione e S/N ratio

Il numero di bit scelti per effettuare la quantizzazione (bit depth) determina il rapporto segnale/rumore del sistema dovuto all'errore di quantizzazione; quantizzando a 24 bit la distanza in dB fra il più piccolo sample ed il più grande sarà pari a:


che rappresenta "as is" il range dinamico teorico del sistema. L'applicazione del dithering permette di ottenere valori di range dinamico diversi da quelli teorici, quindi la stima indicata è puramente indicativa.

Esempio: wave file a 24 bit

I campioni PCM contenuti nei file wave possono essere rappresentati in linea teorica con un qualsiasi numero di bit; i valori più comunemente usati sono tuttavia 8, 16, 24 e 32 bit. Se i bit usati sono 8, i campioni saranno numeri interi con valori da 0 a 255, altrimenti saranno interi con segno rappresentati in complemento a 2. Un campione a 24 bit avrà valori nell'insieme [-8388608, 8388607] mentre un campione a 16 bit avrà valori nell'insieme [-32768, 32767].
Come detto in precedenza, i file wave sono file a blocchi (chunk), in cui i vari blocchi contengono informazioni di vario tipo; ogni chuck ha un identificativo che ne determina il formato (payload):
  • "RIFF": è il main chunk ed identifica l'inizio del file
  • "fmt ": è il chunk di formato, contiene fra l'altro il tipo di formato (FormatCode), i canali utilizzati (Channels), la frequenza dei samples (SamplesPerSec) e la quantizzazione usata (BitPerSample)
  • "data": è il chunk che contiene i dati veri e propri, in ordine di sample crescente, intervallati per canale

quindi, se il file contiene un segnale stereo a 24 bit, i sample saranno così organizzati:

[s0_LC_LSB][s0_LC_mb][s0_LC_MSB][s0_RC_LSB][s0_RC_mb][s0_RC_MSB]...

ove:
  • s0 = sample 0
  • LC = Left Channel
  • RC = right Channel
  • LSB = least significant byte
  • mb = middle byte
  • MSB = most significant byte
una volta letti quindi i byte dallo stream del file, vanno opportunamente riorganizzati per ricostruire il sample originale; si noti che per segnali a 24 bit, qualora mappati su Int32, va opportunamente letto il bit più significativo ed usato per ricostruire il valore finale a 32 bit con segno.


Una volta letti i vari chunk si dispone delle informazioni sufficienti per leggere lo stream di dati e ricostruire il segnale PCM; disponendo del segnale PCM in un array di valori è possibile ricostruire la forma d'onda ed effettuare tutte le elaborazioni sul segnale che si desiderano.

Nella prossima parte descriveremo e realizzeremo una piccola applicazione .net per aprire un file wave, leggerne il contenuto, plottarne la forma d'onda ed estrarne alcune statistiche.


This post first appeared on Musica E Audio, please read the originial post: here

Share the post

Misure audio (parte 2) - wave file format

×

Subscribe to Musica E Audio

Get updates delivered right to your inbox!

Thank you for your subscription

×