Lecteur de fichier multimédia riff

Description

Le format RIFF (Resource Interchange File Format) est très utilisé dans le monde multimédia. Sa simplicité de conception en a fait un standard international pour le son, la vidéo, et bien d'autres choses. Il est basé sur le concept de sections imbriquées, qui contiennent chacune un identifiant, une taille et des données. Ainsi, tout fichier RIFF est sa propre section, en commençant par "RIFF", suivi par le type du fichier, suivi par la taille des données, codées sur 32 bits, suivi par les données elles-mêmes. Un schéma simple de la construction d'un fichier RIFF standard :

"RIFF" dans les quatre premiers octets du fichier (52494646 en hexadécimal)
[Type du fichier] dans les quatre octets suivants, par exemple "WAVE"
[Taille du fichier] codée sur 32 bits
[Les données] qui ont une taille égale à celle renseignée précédemment

Les données peuvent également contenir plusieurs sections imbriquées, par exemple le format WAVE standard (PCM) comporte deux sections "fmt " et "data". La première contient le format du son wave (taux d'échantillonnage, mono/stéréo, ...), et la seconde contient le son codé selon le format renseigné précédemment.

Assez de théorie, venons-en à la source. Cette source contient deux unités : RIFF.pas, et WAVE.pas. La première permet de lire un fichier RIFF, et d'en extraire les différentes sections, sous la forme d'emplacements en mémoire. La seconde unité montre comment lire un fichier WAVE en utilisant le format RIFF.

L'application exemple, propose de lire un fichier WAVE de votre choix (j'ai inclus un petit exemple). Mais attention : je n'utilise ni un lecteur externe, ni la fonction PlaySound : je passe directement les données au pilote multimédia du système. Formidable, non ?

Les deux unités, RIFF.pas et WAVE.pas, en sont évidemment à leur première mouture. On ne peut que lire, et il n'y a pas moyen de savoir où en est la lecture du son, ce qui serait possible en transmettant non pas tout le fichier d'un coup au pilote, mais transmettre une seconde de son à la fois.

Ah oui pour info, le format RIFF ne concerne evidemment pas que les fichiers wav. Un fichier PNG est aussi un fichier RIFF, au même titre que les fichiers MP3 ou encore MPEG, ... par contre ce type de fichiers a un peu délaissé les spécifications du format RIFF, en omettant d'inclure la section "RIFF" elle-même. Donc sur ces fichiers, mon unité échouera, mais ça se corrige facilement en désactivant la vérification (CheckRIFF) ! Mais bon ... passer un MP3 directement au pilote multimédia c'est déjà harcore, alors passer un MPEG :)

Source / Exemple :


// In the zip

Conclusion :


Voilà, tous commentaires, critiques, conseils, remarques, ...
Codé sous Delphi 6 Personal Edition.
J'ai essayé de mettre quelques commentaires mais il faut bien comprendre que les API utilisées sont assez compliquées à aborder.

Cordialement, Bacterius !

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.