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.