# Compact Disc Audio track

.cda est une extension de nom de fichier désignant un petit fichier conforme à la spécification RIFF Le format de fichier CDA est un format Microsoft, .
Les fichiers CDA (Compact Disc Audio) sont générés par Windows lorsque ce système d'exploitation accède à un CD Audio. Chaque titre du CD Audio est alors vu comme un fichier de 44 octets, et d'extension ".cda". Les fichiers sont nommés "Track01.cda", "Track02.cda", etc.
Le fichier .cda copié sur l'ordinateur est inutile sans le CD, puisqu'il ne s'agit que d'un raccourci vers le CD. Les fichiers .cda ne contiennent pas les données sonores, mais indiquent où commence et s'arrête chaque piste sur le disque. Si le fichier est "copié" du CD vers un ordinateur, il ne peut pas être utilisé seul car il ne s'agit que d'un raccourci vers une partie du disque. Toutefois, certains programmes d'édition audio et de création de CD chargeront, du point de vue de l'utilisateur, les fichiers .cda comme s'il s'agissait de véritables fichiers de données audio, et permettront à l'utilisateur de les écouter.

## Organisation d'un fichier CDA

| offset | longueur | contenu |
| 0x00 | 4 | les 4 caractères ASCII "RIFF" |
| 0x04 | 4 | la taille du chunk suivant : toujours 36 (44 - 8), sur 4 octets (ordre Intel) |
| 0x08 | 4 | identifiant du chunk : les 4 caractères ASCII "CDDA" |
| 0x0C | 4 | les 3 caractères ASCII "fmt" suivi d'un espace : fmt␣(le glyphe « ␣ » représente une espace) |
| 0x10 | 4 | longueur du chunk : toujours 24, sur 4 octets (ordre Intel) |
| 0x14 | 2 | version du format CD, sur 2 octets (ordre Intel). En mai 2006, vaut toujours 1. |
| 0x016 | 2 | numéro de la plage, sur 2 octets (ordre Intel). La première plage a le numéro 1. |
| 0x18 | 4 | identifiant calculé par Windows pour cdplayer.exe. |
| 0x1c | 4 | offset de la plage, en nombre de frames (ordre Intel) |
| 0x20 | 4 | durée de la plage, en nombre de frames (ordre Intel) |
| 0x24 | 1 | position de la plage : frames |
| 0x25 | 1 | position de la plage : secondes |
| 0x26 | 1 | position de la plage : minutes |
| 0x27 | 1 | un octet nul (valeur binaire 0) |
| 0x28 | 1 | durée de la plage : frames |
| 0x29 | 1 | durée de la plage : secondes |
| 0x2a | 1 | durée de la plage : minutes |
| 0x2b | 1 | un octet nul (valeur binaire 0) |
La taille d'un fichier CDA étant fixe, ainsi que son organisation, il n'y a toujours qu'un seul et unique chunk, nommé "CDDA" (signifiant Compact Disc for Digital Audio).
L'identifiant créé par Windows est utilisé par le lecteur de CD de Windows 95 et Windows 98 (cdplayer.exe). Ce lecteur ne sait pas se connecter à FreeDB ou CDDB. Pour qu'il puisse afficher le nom de l'artiste et le titre des morceaux, il faut entrer manuellement ces informations dans le fichier cdplayer.ini (dans le répertoire d'installation de Windows), dans une section nommée d'après cet identifiant. Cet identifiant n'a aucun rapport avec le DiscId utilisé par FreeDB ou CDDB, c'est une création purement Microsoft, pour l'usage précité.
La position et la longueur des plages utilisent des frames comme unité. Il y a 75 frames par seconde. C'est le plus petit bloc de données qui peut être lu depuis un CD audio, correspondant à un secteur du CD.
Toutes les informations qui nécessitent plusieurs octets sont codées avec l'order-byte Intel (petit boutiste).

## Exemple d'analyse d'un fichier CDA, en Perl

Le programme de démonstration fourni est un script Perl. Il faut lancer le script avec un paramètre : le chemin vers le répertoire ou le disque contenant les fichiers CDA.
Dans les colonnes affichant la position et la durée au format minutes:secondes:frames, le script ajoute le nombre de frames équivalent à cette durée. La position dans les deux systèmes devrait être identique. Dans la pratique on observe pourtant une différence de 150 frames, correspondant aux 2 secondes de prégap (voir le Red Book).

### Résultats du script

Le script ci-dessus a été lancé sur l'album « Some Great Reward » du groupe Depeche Mode. Les résultats sont recopiés ci-dessous, une colonne « durée pochette » contenant la durée indiquée sur la pochette a été ajoutée.
On retrouve la différence de deux secondes entre les deux champs « position ». La durée affichée par une platine CD ou par les logiciels de lecture peut être :
* la durée indiquée dans le fichier CDA, le nombre de frames ayant été ignoré
* la durée indiquée dans le fichier CDA, avec arrondi à la seconde la plus proche.