Services de format de fichier de l’échange de ressources

Le format par défaut pour les fichiers multimédias est RIFF (Resource Interchange File Format). Les fonctions d’e/s de fichier RIFF fonctionnent avec les services d’e/s de fichier de base mis en mémoire tampon et non mis en mémoire tampon. Vous pouvez ouvrir, lire et écrire des fichiers RIFF de la même façon que d’autres types de fichiers. Pour plus d’informations sur RIFF, consultez fonctions et macros avifile.

Les fichiers RIFF utilisent des codes à quatre caractères pour identifier les éléments de fichier. Ces codes sont des quantités 32 bits représentant une séquence de un à quatre caractères alphanumériques ASCII, remplis sur la droite avec des espaces. Le type de données pour les codes à quatre caractères est FourCC. Utilisez la macro mmioFOURCC pour convertir quatre caractères en un code à quatre caractères. Pour convertir une chaîne se terminant par un caractère null en code à quatre caractères, utilisez la fonction mmioStringToFOURCC .

Le bloc de construction de base d’un fichier RIFF est un segment. Un segment est une unité logique de données multimédias, telle qu’une image unique dans un clip vidéo. Chaque segment contient les champs suivants :

  • Code à quatre caractères spécifiant l’identificateur de bloc
  • Valeur de mot double qui spécifie la taille du membre de données dans le bloc
  • Un champ de données

L’illustration suivante montre un bloc « RIFF » qui contient deux sous-segments.

bloc riff contenant deux images de sous-bloc

Un segment contenu dans un autre segment est un sous- bloc. Les seuls segments autorisés à contenir des sous-segments sont ceux dont l’identificateur de segment est « RIFF » ou « LIST ». Un segment qui contient un autre segment est appelé un segment parent. Le premier segment d’un fichier RIFF doit être un bloc « RIFF ». Tous les autres segments du fichier sont des sous-segments du bloc « RIFF ».

Les segments « RIFF » incluent un champ supplémentaire dans les quatre premiers octets du champ de données. Ce champ supplémentaire fournit le type de formulaire du champ. Le type de formulaire est un code à quatre caractères identifiant le format des données stockées dans le fichier. Par exemple, les fichiers audio Microsoft Waveform ont un type de formulaire « WAVE ».

Les segments « LIST » incluent également un champ supplémentaire dans les quatre premiers octets du champ de données. Ce champ supplémentaire contient le type de liste du champ. Le type de liste est un code à quatre caractères identifiant le contenu de la liste. Par exemple, un bloc « LIST » avec un type de liste « INFO » peut contenir des blocs « ICOP » et « ICRD » fournissant des informations sur la date de copyright et de création. L’illustration suivante montre un bloc « RIFF » qui contient un bloc « LIST » et un autre sous-bloc (le segment « LIST » contient deux sous-segments).

bloc riff contenant une image de segment de liste

Les services d’e/s de fichier multimédia incluent deux fonctions que vous pouvez utiliser pour naviguer parmi les segments d’un fichier RIFF : mmioAscend et mmioDescend. Vous pouvez utiliser ces fonctions comme fonctions de recherche de haut niveau. Quand vous descendez dans un segment, la position de fichier est définie sur le champ de données du segment (8 octets à partir du début du bloc). Pour les segments « RIFF » et « liste », la position de fichier est définie sur l’emplacement suivant le type de formulaire ou le type de liste (12 octets à partir du début du bloc). Lorsque vous vous retrouvez à l’extérieur d’un bloc, la position de fichier est définie à l’emplacement qui suit la fin du bloc.

Pour créer un nouveau bloc, utilisez la fonction mmioCreateChunk pour écrire un en-tête de bloc à la position actuelle dans un fichier ouvert. Les fonctions mmioAscend, mmioDescend et mmioCreateChunk utilisent la structure MMCKINFO pour spécifier et récupérer des informations sur les segments « riff ».