Utilisation du MCI pour jouer un fichier Wav
Introduction
L'utilisation du media control interface nécessite l'utilisation de
la librairie WINMM.lib.
Evidemment, il y a aussi un include : Mmsystem.h
Le media control interface permet d'utiliser des commandes simples vers des
périphériques multimédias comme la carte son, le midi,
le lecteur de CD-AUDIO ou encore une caméra.
Il s'agit d'une interface de haut niveau, donc simple d'utilisation. Evidemment,
il existe d'autres commandes, qui sont dites de bas niveau et donc plus difficiles
à appréhender.
L'avantage d'utiliser le MCI hormis sa simplicité, les fichiers .wav sont chargés en mémoires et sont utilisables à tout moment dans votre programe (à condition de ne pas avoir demandé explicitement la libération des ressources !).
MCI accepte 7 fonctions. Dans notre cas, nous n'étudierons que deux fonctions utiles pour faire du son:
Jouer un fichier Wav
Pour envoyer des commandes, nous utiliseront la fonction
mciSendString
MCIERROR mciSendString(
LPCTSTR lpszCommand,
LPTSTR lpszReturnString,
UINT cchReturn,
HANDLE hwndCallback
);
En entrée:
lpszCommand pointeur sur un buffer qui contient la commande à envoyer
à un périphérique MCI
lpszReturnString pointeur sur un buffer qui recevra des informations. Peut être
mis à NULL si aucune information ne doit être reçue.
cchReturn : Taille du buffer szReturnString
hwndCallback: Handle de notre fenêtre.
En sortie:
la fontion retourne 0 si tout est ok, sinon, il on pourra utiliser la fontion
suivante:
BOOL mciGetErrorString(
DWORD fdwError,
LPTSTR lpszErrorText,
UINT cchErrorText
);
Cette fonction va convertir le code erreur de mciSendString en un texte plus compréhensible.
En entrée:
fdwError Le code erreur à traduire
lpszErrorText Pointeur sur un buffer qui recevra le texte en sortie (terminé
par 0)
cchErrorText Longueur du buffeur texte
En sortie:
La fonction retourne true ou false si le code est inconnu.
Les commandes:
La commande open:
Pour lire un fichier:
Open <nomFichier> [alias <nomalias>]: Pour ouvrir
un fichier. Dans notre cas, nous voulons jouer du son: open <nomFichier.WAV>
Il sera possible d'utiliser un alias pour s'y retrouver !
Pour créer un fichier son:
open new type <typedemédia> [alias <nomalias>] [buffer
n]. Dans le cas d'un enregistrement sur le micro, le type sera waveaudio.
n indique la création d'un buffer dont l'espace permettra d'enregistrer
n secondes
Pour lire le fichier multimédia:
play <nomFichier|nomalias>: Pour commencer ou continuer
une lecture suite à une pause.
Et donc pour faire une pause:
pause <nomFichier|nomalias>:
Cette commande ne libère aucunes ressources ! Il s'agit d'arrêter
temporairement la lecture.
Pour enregistrer:
record <nomFichier|nomalias>
Pour arrêter un enregistrement:
stop <nomFichier|nomalias>
L'enregistrement étant arrêté, nous pourrons faire une
sauvegarde du son dans un fichier:
save <nomFichier|nomalias> <Nomfichier.wav>
Pour libérer les ressources utilisées, pour faire une lecture
ou un enregistrement, il faudra impérativement utiliser la commande:
close <nomFichier|nomalias>
Le fait d'envoyer
la commande "play" rend la main immédiatement à notre
programme. En effet, c'est MCI et la carte son qui se débrouilleront
ensuite pour jouer le son et ceci de manière asynchrone. Il ne faut donc
pas envoyer la commande "stop" tout de suite après une commande
"play", sinon, vous n'allez pas entendre grand chose !
Voici un petit exemple:
Ce programme charge le fichier c:\windows\media\tada.wav et va ensuite le jouer. Il y a une pause de 2 s. avant de mettre fin au programme.