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>:

Image non trouvée ! 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>

Image non trouvée !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.

Image non trouvée !