Resource Interchange File Format
# Resource Interchange File Format

Le Resource Interchange File Format (RIFF) définit un modèle générique de format de fichier à destination des contenus multimédia. Ainsi, il ne s'agit pas d'un format de fichier en soi, mais plutôt d'une méthode d'organisation des données sur laquelle reposent plusieurs formats comme le WAVE et l'AVI.

Le RIFF a été défini conjointement par Microsoft et IBM en 1991. Il hérite en grande partie du format IFF de l'Electronic Arts (1985).

## Histoire

Le RIFF a été introduit en 1991 par Microsoft et IBM comme modèle pour les formats de fichiers multimédia, à destination d'OS/2 et Windows 3.1. Le standard est d’ailleurs publié conjointement avec les premiers formats de fichier issus du RIFF, tel le format WAVE.

Le RIFF reprend le modèle de structure en chunks de l'Interchange File Format publié en 1985 par Electronic Arts, tout en laissant de côté la majorité des autres éléments du standard IFF.

## Chunk

L'unité de construction de base d'un fichier RIFF est le chunk. Un chunk est un bloc de données composé des champs suivant :

* ckid : chunk-identifier, 4 octets représentant l'identifiant FourCC du chunk, soit une séquence de 1 à 4 caractères ASCII alphanumériques (sans espaces) alignés à gauche, séquence complétée à droite par zéro ou plusieurs caractères « espace » (code ASCII 0x20), pour former un groupe d'exactement quatre caractères. Par exemple, le ckid fmt␣ sera représenté par la suite des quatre caractères : 'f', 'm', 't', '␣' (le glyphe « ␣ » représentant une espace).
* cksz : chunk-size, entier 32 bits non signé représentant la taille des données contenues dans le champ data du chunk.
* data : Les données utiles (payload), contenues dans ce chunk. Dans le cas où les données sont de taille impaire — c'est-à-dire où le champ cksz contient une valeur impaire —, un octet nul est ajouté à la fin du champ de façon à conserver l'alignement dans le fichier.

## Structure du RIFF

Un fichier RIFF est exclusivement composé de chunks.

Un fichier RIFF commence (à l'octet 0) par le chunk d'identifiant RIFF. Celui-ci accueillera dans son champ data tous les chunks du fichier. Par conséquent, le champ cksz du chunk RIFF équivaut à la taille du fichier moins 8 octets.

Le champ data du chunk RIFF commence par un identifiant FourCC appelé formType. Celui-ci indique le type de fichier. Par exemple, dans le cas d'un fichier WAVE, l'identifiant sera l'étiquette FourCC WAVE (c'est-à-dire composée des 4 octets ASCII 'W', 'A', 'V', 'E').

À noter que le chunk RIFF est le seul, avec le chunk LIST, à pouvoir prendre comme données d'autres chunks.

Concernant l'ordonnancement des octets, le format RIFF représente les données en mode petit-boutisme (little-endian). Cependant, le format RIFF définit aussi le RIFX, comme étant son pendant gros-boutiste (big-endian).

