~ Format des fichiers WAV ~


Analysons l'entête d'un fichier "WAV" en prenant l'exemple d'un fichier mesurant au total 65592 octets et contenant 65536 échantillons :

                                                                            
adr:                         HEXA                               ASCII       
0000  52 49 46 46  30 00 01 00  57 41 56 45  66 6D 74 20  |RIFF0...WAVEfmt |
0010  10 00 00 00  01 00 01 00  11 2B 00 00  11 2B 00 00  |.........+...+..|
0020  01 00 08 00  66 61 63 74  04 00 00 00  00 00 01 00  |....fact........|
0030  64 61 74 61  00 00 01 00  80 80 80 80  80 80 82 84  |data............|
0040  88 8E A6 88  5E 50 5A 4A  64 76 84 90  A2 9C 9A 9E  |....^PZJdv......|
0050  8C 7C 78 72  5E 5A 62 60  60 72 7E 82  92 9E 9A 96  |.|xr^Zb``r~.....|
0060  9A 90 7C 76  70 62 60 66  68 6C 7E 86  8A 92 9C 9A  |..|vpb`fhl~.....|
etc.

L'entête mesure 56 octets, et s'étend donc de l'adresse 00h à l'adresse 38h.

Les fichiers WAV utilisent le format RIFF ; définition du format RIFF :

Octets 1 à 4   : Caractères 'RIFF' [52h 49h 46h 46h] identifiant le format.
Octets 5 à 8   : Longueur du groupe de données au format WAV =
                 [30h.00h.01h.00h] = 00010030h = 65584 octets,
                 (le reste du fichier, car 65584+8 = 65592 octets).
Octets 9 à 16  : Caractères 'WAVEfmt ' identifiant le format WAV.

Les octets 17 à 56 définissent les paramètres du format 'WAV' :

Octets 17 à 20 : [10.00.00.00] = 00000010h = 16 = nombre d'octets
                 utilisés après pour définir le format.
Octets 21 à 22 : [01.00] = 0001h = 1 = numéro de format du fichier
                 (pas de compression, format PCM classique).
Octets 23 à 24 : [01.00] = 0001h = 1 : nombre de canaux : ici, mono.
Octets 25 à 28 : [11.2B.00.00] = 00002B11h = 11025, fréquence
                 d'échantillonnage (en Hz), c'est à dire le nombre
                 d'échantillons pas seconde.
Octets 29 à 32 : [11.2B.00.00] = 00002B11h = 11025, nombres d'octets par
                 seconde, ce qui revient au même car un échantillon mesure
                 un octet et l'on est en mono.
Octets 33 à 34 : [01.00] = 0001h = 1 = Produit du nombre de canaux par le
                 nombre d'octets par échantillon (ici 1x1=1).
Octets 35 à 36 : [08.00] = 0008h = 8 bits par échantillon (valeurs
                 possibles : 8, 12 ou 16).
Octets 37 à 48 : [66.61.63.74][04.00.00.00][00.00.01.00] = 'fact', 4, 65536.
                 Champ sur lequel je n'ai pas de précision ; je pense
                 que 'fact' annonce des informations, que les 4 octets
                 suivants indiquent la taille de ces infos (4 octets),
                 et que dans ce cas, l'info est le nombre d'échantillons,
                 lequel est repris après par 'data', soit 65536.
Octets 49 à 52 : 'data' : annonce l'arrivée des données.
Octets 53 à 56 : [00.00.01.00] = 00010000h = 65536 : taille des données.

Les 65536 octets suivants : valeurs numériques successives des échantillons, oscillant autour de la valeur moyenne 80h, selon l'amplitude et le signe du signal d'entrée...

N.B. : Selon l'éditeur WAV utilisé, on peut remarquer des différences minimes dans la taille des entêtes, mais l'essentiel des informations données ici restent valables.


Dernière mise à jour : le 03/07/2003.