Compression WAV
Le codage d'un fichier WAV :
Un fichier .wav contient toutes les informations nécessaires à la reconstitution de « l’image sonore » qu’il contient. Il faut disposer d’un logiciel approprié pour lire ce type de fichier.
Ce qui va définir que le fichier sera de la musique sera bien sûr son extension (ici WAV) mais ce n'est pas tout. En effet, le fichier, en plus de contenir la version numérique (01000111000....) de la musique va posséder une entête contenant des informations importantes sur la musique.
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.
Créé avec HelpNDoc Personal Edition: Création d'aide CHM, PDF, DOC et HTML d'une même source