LE HEADER :
Voici le premier bloc :
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
rID
rLEN |
4
4 |
Contient les caractères "RIFF"
La longueur des données pour le prochain bloc. |
08H |
rDATA |
rLEN |
Les données du prochain bloc. |
LE FORMAT WAV :
Le bloc rDATA est encore divisé en plusieurs blocs :
Il contient tout les blocs :
rDATA
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H |
wID |
4 |
Contient les caractères "WAVE" |
04H
**
18H
ou ??
** |
Format chunk
* AUTRE BLOC
WAVE DATA
CHUNK
* AUTRE BLOC |
?
??
??
?? |
Bloc format : contient les données
qui explique le format.
OPTIONNEL
BLOC qui contient les données audio
OPTIONNEL |
REMARQUE : D'AUTRE BLOC OPTIONNEL PEUVENT S'INSERER
(VOIR LEUR DESCRIPTION A LA FIN
VOICI LES BLOCS CONTENU DANS LE BLOC rDATA :
Le bloc format (FORMAT CHUNK) :
format
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
fID
fLEN |
4
4 |
Contient les caractères "fmt "
Contient la longueur du bloc format chunk |
08H
0AH
0CH
0EH
10H |
WformatTAG
Nchanel
Fréquence
nAvgByte...
nBlocAlign. |
2
2
2
2
2 |
* indique le format
Nombre de canal : 1 = MONO 2 = STÉREO
FRÉQUENCE (nombre de sample par seconde)
**
*** |
12H |
FormatSpe.. |
? |
**** Zone de donnée spécifique du format |
REMARQUE : CE BLOC PEUT ETRE DE TAILLE VARIABLE (voir fLEN)
QUI DÉPEND DU FORMAT.
* |
|
Indique le type de format : |
LES PLUS UTILISÉS : |
WAVE_FORMAT_PCM (0x0001)
Microsoft Pulse Code
Modulation (PCM) format
IBM_FORMAT_MULAW (0x0101)
IBM mu-law format
IBM_FORMAT_ALAW (0x0102)
IBM a-law format
IBM_FORMAT_ADPCM (0x0103)
IBM AVC Adaptive
Differential Pulse Code
Modulation format |
** |
|
Indique la moyenne du nombre d'octets à transférer
par seconde
pour permettre au player (programme qui joue le son) d'estimer
la taille d'un buffer.
Pour le format WAVE_FORMAT_PCM(de microsoft) c'est égal à
:
nombre de canal * fréquence * (nombre de bits par sample / 8) |
*** |
|
Bloc d'alignement |
?? |
nBlockAlign = nombre de canal * (nombre de bits par Sample
/ 8) |
**** |
|
Spécificité d'un format :
pour le format WAVE_FORMAT_PCM (de microsoft) :
le premier mot indique le nombre de bits par sample
( d'après la DOC que j'ai, c'est le seul mot qu'il y a ).
Mais après expérimentation, j'ai remarqué qu'il y
avait 2
autres mots (sûrement une évolution du format). |
D'après moi, il faut tester le premier mot et s'il est différent
de 0,
le premier mot indique le nombre de bits par sample et c'est le seul.
S'il est égal à 0, il faut lire les 2 mot suivants
:
Le 2ième MOT indique :
|
si = 1
si = 2 |
:
: |
données audio non signées
données audio signées |
Le 3ième MOT indique le nombre de bits par sample :
08 pour 8 bits par sample et 10h pour 16 bits par sample
Le bloc de données (WAVE DATA CHUNK) :
data
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
dID
dLEN |
4
4 |
Contient les caractères "data"
Longueur du bloc WAVE DATA CHUNK |
08H |
dDATA |
dLEN |
LES DONNÉES AUDIO |
Voici une description de l'emplacement des données en PCM :
POUR DES SONS 8 BITS MONO :
OCTET
OCTET
OCTET
OCTET
OCTET
etc. |
1
2
3
4
5 |
>--->
>--->
>--->
>--->
>---> |
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE |
1
2
3
4
5 |
POUR DES SONS 8 BITS STÉRÉO :
OCTET
OCTET
OCTET
OCTET
OCTET
etc. |
1
2
3
4
5 |
>--->
>--->
>--->
>--->
>---> |
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE |
1
1
2
2
3 |
GAUCHE
DROITE
GAUCHE
DROITE
GAUCHE |
POUR DES SONS 16 BITS MONO :
OCTET
OCTET
OCTET
OCTET
OCTET
etc. |
1
2
3
4
5 |
>--->
>--->
>--->
>--->
>---> |
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE |
1
1
2
2
3
|
Octet de poids FAIBLE (8 bits inférieurs)
Octet de poids FORT (8 bits supérieurs)
Octet de poids FAIBLE
Octet de poids FORT
Octet de poids FAIBLE |
POUR DES SONS 16 BITS STÉRÉO :
OCTET
OCTET
OCTET
OCTET
OCTET
OCTET
OCTET
OCTET
etc. |
1
2
3
4
5
6
7
8 |
>--->
>--->
>--->
>--->
>--->
>--->
>--->
>---> |
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE
SAMPLE |
1
1
1
1
2
2
2
2 |
GAUCHE
GAUCHE
DROITE
DROITE
GAUCHE
GAUCHE
DROITE
DROITE |
Octet de poids FAIBLE
Octet de poids FORT
Octet de poids FAIBLE
Octet de poids FORT
Octet de poids FAIBLE
Octet de poids FORT
Octet de poids FAIBLE
Octet de poids FORT |
-----------------------------------------------------------------------------------------------------------
LES BLOCS OPTIONNELS :
Le bloc fact (FACT CHUNK) :
fact
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "fact"
Longueur du bloc FACT CHUNK |
08H |
NSam |
4 |
Nombre de sample |
Le bloc cue-points (CUE-POINT CHUNK) :
Ce bloc permet de repérer (ou identifier) une série
de positions dans les données AUDIO
cue
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "cue"
Longueur du bloc CUE CHUNK |
08H |
NPos |
4 |
Nombre de position |
Ce qui suit est à répéter autant de
fois qu'il y a de positions : |
08H
0CH
10H
14H
18H
1CH |
Name
Pos
chunkID
chunkst
blocst
Soffset |
4
4
4
4
4
4 |
Nom de position
Indique la position (en sample)
le chunkID ?? : souvent "data"
??
??
?? |
Le bloc playlist (PLAYLIST CHUNK) :
Ce bloc permet d'indiquer l'ordre des "CUE-POINT" (position)
à jouer
playlist
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "plst"
Longueur du bloc PLAYLIST CHUNK |
08H |
NPos |
4 |
Nombre de segments PLAY |
Segment PLAY : (à répéter plusieurs
fois suivant le nombre de segments) |
0CH
10H
14H
|
Name
cLEN
Ntim
|
4
4
4
|
Nom du "cue-point" (position)
Longueur du cue-point en sample
Indique le nombre de fois qu'il
faut jouer le cue-point |
Le bloc des données pour les infos (ASSOCIATE DATA LIST CHUNK)
:
Ce bloc permet de donner plus d'infos complémentaires .
ce bloc comporte plusieurs blocs :
LIST
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "LIST"
Longueur du bloc LDATA CHUNK |
08H |
LDATA |
LEN |
Les données |
Ce bloc (LDATA) contient plusieurs blocs (optionnels ?)
LDATA
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H |
ID |
4 |
Contient les caractères "adtl" |
04H
??H
??H
??H |
label
note
text
file |
??
??
??
?? |
Le bloc LABEL
Le bloc NOTE
Le bloc TEXT
Le bloc FILE |
LE BLOC LABEL CHUNK :
Contient le titre à associer avec un "cue-point"
LABEL
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "labl"
Longueur du bloc LABEL CHUNK |
08H
0CH
|
NDATA
data
|
4
LEN-4 ?
|
Contient le nom du cue-point
Donnée indiquant le titre (doit se
terminer par 00H ) |
LE BLOC NOTE CHUNK :
Contient un commentaire à associer avec un "cue-point"
NOTE
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "note"
Longueur du bloc NOTE CHUNK |
08H
0CH
|
NDATA
data
|
4
LEN-4 ?
|
Contient le nom du cue-point
Donnée indiquant le commentaire
(doit se terminer par 00H ) |
LE BLOC TEXT CHUNK :
TEXT
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "ltxt"
Longueur du bloc TEXT CHUNK |
08H
0CH
10H
14H
18H
1CH
20H
24H
|
NDATA
Slen
purpose
country
languag
dialect
page
data |
4
4
4
2
2
2
2
LEN-20H |
Contient le nom du cue-point
Longueur en sample
??
Code du pays (Country code)
Code de la langue
Code du dialect
Code page pour le texte
???? |
LE BLOC FILE CHUNK :
FILE
chunk
OFFSET |
NOM |
TAILLE |
DESCRIPTION |
00H
04H |
ID
LEN |
4
4 |
Contient les caractères "file"
Longueur du bloc FILE CHUNK |
08H
0CH
24H |
NDATA
type
data |
4
4
LEN-8 ? |
Contient le nom du cue-point
??
Contient le fichier média ??
|