Compact-disc e audio

di Alessandro Scotti


Analogamente ai tradizionali dischi in vinile, i CD-ROM contengono una singola traccia a spirale che parte dal centro e si sviluppa verso l'esterno. Questa traccia, lunga quasi cinque chilometri e mezzo, è divisa in blocchi di uguale lunghezza chiamati settori.
I dati sono memorizzati mediante l'alternarsi di piccole depressioni di lunghezza variabile (pits) e di aree piatte (lands). La testina di lettura è costituita da un piccolo laser (Light Amplification by Stimulated Emission of Radiation) a bassa potenza e da un fotodiodo: quando il raggio laser colpisce una zona piatta viene riflesso e per mezzo di uno specchio colpisce il fotodiodo, mentre quando viene colpita una depressione la luce del laser viene dispersa ed il fotodiodo non riceve alcun segnale (vedi figura).

Contrariamente a quanto sarebbe lecito aspettarsi, lands e pits non rappresentano le cifre binarie 0 e 1. Se così fosse, un singolo bit occuperebbe sulla traccia uno spazio pari a circa 300 nm: il CD dovrebbe allora disporre di un clock accuratissimo che faccia corrispondere ad ogni tick un intervallo di 300 nm alla velocità di rotazione del disco (che oltretutto è variabile). Con le odierne tecnologie un simile dispositivo risulta praticamente inattuabile.
Il metodo usato si basa invece sull'alternarsi di lands e pits. Quando il CD rileva una transizione da land a pit o viceversa, fa partire un timer: alla successiva transizione il valore del timer è proporzionale al numero di bit rappresentato dal pit o land in questione. Ogni transizione da land a pit corrisponde ad un 1 (uno), altrimenti si ha uno 0 (zero).
Per non incorrere nel problema di partenza, le transizioni devono essere frequenti, in modo da poter resettare il timer. In pratica la minima lunghezza di un pit o di un land è di circa 900 nm (3 bit) e la massima circa 3300 nm (11 bit). A causa di questa limitazione non si possono avere due 1 consecutivi ed il numero di zeri tra due bit a 1 può andare da un minimo di due ad un massimo di dieci.
Purtroppo già una semplice coppia di byte può assumere moltissimi valori che violano la regola precedente, perciò bisogna adottare una codifica diversa da quella a cui siamo abituati. La tecnica usata nei CD si chiama EFM (Eight to Fourteen Modulation) e fa corrispondere ad ognuno dei 256 possibili valori di un byte un codice di 14 bit che sia in accordo con le limitazioni sopra descritte. Inoltre tra due codici consecutivi si trovano tre bit di separazione che hanno lo scopo di limitare la lunghezza di una eventuale sequenza di bit uguali che si può creare accostando due codici di 14 bit.
Memorizzati in questa forma, i dati vengono divisi in settori da 2352 byte l'uno. Un settore contiene 12 byte di dati per la sincronizzazione, un header di 4 byte, 2048 byte di dati con correzione d'errore e 288 byte di codici per correggere eventuali errori (se i dati non sono sensibili ad errori occasionali, per es. audio digitalizzato o animazioni video, si può fare a meno della correzione d'errore e aumentare così la capacità del CD). Dato che i settori hanno tutti uguale lunghezza e che la testina deve poter leggere i dati sempre alla stessa velocità (CLV, Constant Linear Velocity, contrapposto al metodo usato negli hard-disk, Constant Angular Velocity o CAV), la velocità del disco varia da circa 500 giri/min per i settori più interni a circa 200 giri/min per quelli più esterni. Il dover cambiare la velocità di rotazione del disco costituisce una delle principali cause della lentezza del tempo di accesso nei CD.
Per quanto riguarda la capacità, nonostante il grande numero di bit "sprecati" per l'EFM e la correzione di errore (e il meglio deve ancora venire nel prossimo paragrafo), le cose si fanno decisamente interessanti. Un CD può contenere infatti ben 333.000 settori, pari a 74 minuti alla velocità standard di lettura (75 settori al secondo). Dato che gli ultimi 14 minuti si trovano sulla parte più esterna del disco, che è la più difficile da incidere, non è raro imbattersi in CD che contengono "solo" 270.000 settori (60 minuti). In soldoni, come direbbe un noto magistrato, 333.000 settori corrispondono a ben 650 MB di dati (742 MB senza correzione d'errore).

Come sono memorizzati i dati: un'approfondimento

Visto che i CD hanno un transfer-rate standard di 150 K/sec e che i CD audio sono digitalizzati con 16 bit per canale a 44.1 KHz, per suonare un CD abbiamo bisogno di trasferire ben 172 K/sec. Sappiamo già che la velocità di lettura è di 75 settori/sec e che un settore contiene 2352 byte, e per l'appunto 75*2352 è uguale a 172 K. Sembrerebbe di dover fare a meno dei byte dedicati alla correzione d'errore, ma per fortuna non è così.
I dati memorizzati su CD sono innanzitutti divisi in pacchetti da 24 byte chiamati frame. Ogni frame è organizzato come segue:

Descrizione                      Lunghezza (bit)
pattern di sincronizzazione      24 + 3
control byte                     14 + 3
primo pacchetto dati             12 * (14 + 3) = 204
correzione di errore             4  * (14 + 3) = 68
secondo pacchetto dati           12 * (14 + 3) = 204
correzione di errore             4 * (14 + 3) = 68
                                 ----------------------
                                 Totale:  588 bit


Dunque per memorizzare 192 bit ne vengono impiegati 588! Il metodo impiegato per la correzione degli errori prende il nome di Cross Interleave Reed-Solomon Coding (CIRC). L'efficacia di questo sistema è notevole: per ogni frame i 24 byte di dati vengono inviati al primo decodificatore Reed-Solomon, che usando i primi 4 byte extra è capace di individuare e correggere un errore ogni 32 byte. Successivamente i 24 byte di dati e i rimanenti 4 byte extra vengono spediti, a differenti intervalli, al secondo decodificatore R-S. L'interleaving dei byte permette di scomporre errori di tipo burst, cioè su molti byte consecutivi, in tanti errori che coinvolgono un solo byte per ogni blocco. Se ci sono errori il secondo decoder R-S usa gli ultimi 4 byte per aggiustare i 24 byte di dati. Dopo essere stati deinterallacciati per ripristinare l'ordine di partenza i dati possono essere finalmente inviati in uscita.
Le specifiche per i CD permettono di avere fino a 220 errori al secondo. L'algoritmo CIRC riesce quasi sempre a correggere perfettamente questi errori ed a fornire dati corretti. Errori estesi fino a 450 byte consecutivi, per merito dell'interleaving, vengono corretti senza perdita di informazione. E' comunque possibile che qualcosa sfugga, ma di solito si tratta di piccoli "click" che all'ascolto vengono a malapena percepiti.
Possiamo adesso precisare le affermazioni del paragrafo precedente: un settore contiene 98 frame, per un totale di 98*24 = 2352 byte corretti dal CIRC.
Dato che nei CD-ROM l'integrità dei dati è più importante che nei CD audio, di questi 2352 byte gli ultimi 288 sono riservati per un ulteriore livello di correzione di errore. Abbiamo infatti 4 byte di EDC (Error Detecting Code) che contengono il CRC dei dati precedenti e 276 byte di ECC (Error Correcting Code) che ultilizzando ancora la tecnica dell'interleaving ed i codici Reed-Solomon servono a correggere gli errori sfuggiti ai precedenti controlli. La probabilità che rimangano errori non corretti o non rilevati diventa a questo punto bassissima.
Ogni settore ha un mode byte che specifica il tipo di dati in esso contenuti:

Modo       Contenuto
0          Tutti i byte valgono zero
1          2048 byte di dati più EDC/ECC
2          CD audio o altri tipi di dati

Quindi uno stesso CD può contenere sia dati che audio (eventualmente i dati devono venire prima).

Gli standard

Lo standard per i CD-ROM è stato definito da un gruppo di aziende conosciuto col nome di High Sierra Group. Il formato proposto da questo gruppo si è infatti diffuso rapidamente e nel 1988 è stato accolto dall'ISO e integrato nel documento siglato ISO-9660. Conosciuto anche come "Yellow Book", permette a diversi sistemi operativi di leggere lo stesso CD-ROM fornendo le specifiche del file-system e dell'organizzazione dei dati su CD.
In seguito questo standard è stato esteso per venire incontro alle esigenze delle applicazioni multimediali più avanzate: il CD-ROM XA (Extended Architecture) permette l'interleaving di dati e audio, quest'ultimo compresso con la tecnica ADPCM (Adaptive Delta Pulse Code Modulation) ed esteso ad un massimo di 16 canali.

Per i CD-DA (Digital Audio) invece, lo standard prende il nome di "Red Book". L'audio viene campionato a 16 bit con una frequenza di 44.1 KHz, il che permette una gamma dinamica di circa 96 dB. Ce ne occuperemo meglio il prossimo mese.

Molto simile al CD XA è il CD-I (Interactive) o "Green Book" sviluppato dalla Philips nel 1986. Diretto concorrente del CDTV (Commodore Dynamic Total Vision) viene implementato come sistema stand-alone basato su una CPU Motorola di classe 680x0 e consente di immagazzinare dati, immagini, video (MPEG) e audio.

Infine abbiamo il Photo CD della Kodak che fa uso di dischi riscrivibili per comprimere e memorizzare fino ad un centinaio di fotografie sullo stesso disco. Essendo basato sulla stessa struttura del CD XA e del CD-I, i lettori CD che supportano questi standard possono leggere anche i Photo CD facendo uso di un appropriato software. Il Photo CD, in ogni caso, è disponibile anche in versione stand-alone collegabile ad un normale televisore.

La libreria CDA

Una delle possibilità più interessanti messe a disposizione dai lettori di CD-ROM su PC è senz'altro quella di poter riprodurre anche i normali CD audio, supportata dalla maggior parte dei drive attualmente in circolazione. Il nostro scopo è appunto quello di integrare questa capacità nelle nostre applicazioni.
Per vedere un CD-ROM come drive DOS c'è bisogno di due driver: il primo cambia a seconda del modello e della marca del CD-ROM istallato, il secondo si chiama di solito MSCDEX e sfrutta le API messe a disposizione dal primo driver per integrare il disco come unità DOS. Per risparmiare spazio, MSCDEX non supporta esplicitamente le funzioni audio del drive, perciò un'applicazione deve parlare con il driver a basso livello. La libreria CDA, allegata a questo numero della rivista insieme ad un CD-player che ne fa uso, permette a programmi scritti in linguaggi ad alto livello di utilizzare in modo naturale il CD-ROM come lettore CD-DA senza doversi preoccupare di cosa avvenga "dietro le quinte".
Appuntamento dunque al prossimo mese, quando esamineremo in dettaglio il funzionamento della nostra libreria.


Nota: questo articolo è stato pubblicato su SBDI (Sound Blaster Digest Italia, una rivista elettronica) ma non ricordo quando. Il file porta la data di Marzo 1994.

Copyright (c) 2005 Alessandro Scotti. All rights reserved.

 Home :: Computer Programming

Site Map