I. Présentation

MULTIMEDIA MCI32 [MCI32.OCX]
Utilisation : Affichage et manipulation de fichiers multimédias
EDITEUR : Microsoft
Le contrôle MCI a été fourni avec toutes les versions de Visual Basic depuis la version 3.0

Ce contrôle sert à gérer différents périphériques multimédia comme les cartes son, les séquenceurs MIDI et les lecteurs de CD audio et de CD-ROM. Il peut aussi diffuser des fichiers au formats audio Wave(.WAV), MIDI(.MID) et vidéo(.AVI)

./images/mci.gif Le contrôle MCI ressemble à un clavier de commande de magnétoscope.

Pour que le contrôle MCI fonctionne parfaitement, les services appropriés de l'interface de Contrôle Multimédia (Services MCI) doivent être disponibles et être capable d'accéder au périphérique son, grâce au pilote spécifique installé sous Windows.
Extrait du code pour charger un fichier Audio

 
Sélectionnez
Private Sub Form_Load ()
	' Définit les propriétés nécessaires à l'ouverture du périphérique MCI.
	MMControl1.Notify = FALSE
	MMControl1.Wait = TRUE
	MMControl1.Shareable = FALSE
	MMControl1.DeviceType = "WaveAudio"
	MMControl1.FileName = "C:\WINDOWS\MMDATA\GONG.WAV"

	' Ouvre le périphérique MCI WaveAudio.
	MMControl1.Command = "Open"
End Sub

Les propriétés et événements spécifiques au contrôle MCI sont présentées dans les tableaux suivants

Multimedia MCI, contrôle, constantes

Constantes du mode
Constante Valeur Description
mciModeNotOpen 524 Périphérique non ouvert.
mciModeStop 525 Arrêt du périphérique.
mciModePlay 526 Lecture du périphérique.
mciModeRecord 527 Enregistrement du périphérique.
mciModeSeek 528 Recherche du périphérique.
mciModePause 529 Pause.
mciModeReady 530 Périphérique prêt.



Constantes du mode
Constante Valeur Description
mciNotifySuccessful 1 La commande a abouti.
mciNotifySuperseded 2 La commande a été annulée par une autre commande.
mciAborted 4 La commande a été annulée par l'utilisateur.
mciFailure 8 La commande a échoué.



Constantes d'orientation
Constante Valeur Description
mciOrientHorz 0 Boutons disposés horizontalement.
mciOrientVert 1 Boutons disposés verticalement.



Constantes RecordMode
Constante Valeur Description
mciRecordInsert 0 Insérer le mode d'enregistrement.
mciRecordOverwrite 1 Remplacer le mode d'enregistrement.



Constantes Format
Constante Valeur Description
mciFormatMilliseconds 0 Format millisecondes.
mciFormatHms 1 Format heures, secondes et minutes.
mciFormatMsf 2 Format minutes, secondes et images.
mciFormatFrames 3 Format images.
mciFormatSmpte24 4 Format SMPTE 24 images.
mciFormatSmpte25 5 Format SMPTE 25 images.
mciFormatSmpte30 6 Format SMPTE 30 images.
mciFormatSmpte30Drop 7 Format SMPTE 30 images cibles.
mciFormatBytes 8 Format octets.
mciFormatSamples 9 Format échantillons.
mciFormatTmsf 10 Suit le format minutes, secondes et images.


Lorsque j'ai décidé de construire ce Tutoriel autour du contrôle MCI, plusieurs choix s'offraient à moi, je pouvais avec toute la documentation en ma possession trouver les instructions afférentes à une application multimédia.
Mais...partant du principe qu'il ne faut pas refaire ce qui est déjà fait, je me suis posé la question à savoir si je ne pouvais pas trouver dans mes fonds de tiroir une application déjà toute faite.
J'ai trouvé en effet dans un programme écrit sous VB3.0 une application fonctionnant avec un contrôle MCI issu d'un fichier à extension .vbx!
Pour ceux qui suivent mes Tutoriels, j'ai évoqué précédemment une méthode pour convertir les applications fonctionnant sous 16 bits en applications 32 bits, j'ai donc pensé qu'il fallait essayer de mettre à profit les précieux conseils que je divulgue sans modération.
J'ai donc utilisé la méthode que je vous ai déjà indiqué et je n'ai trouvé qu'un seul problème au niveau d'un appel d' "API", je vous donne la modification que j'ai apportée afin de faire fonctionner ma feuille écrite sous VB3(16bits) en instructions pouvant être lues sous VB6.0.

./images/mcidemo.gif Une vue de la démo du contrôle MCI
que Vous pouvez télécharger ici!
La zone d'image est tronquée sur ce cliché, mais elle existe et se trouve cachée par la bordure inférieure.
On peut ne pas tenir compte de la zone d'image si on se contente d'utiliser la partie son du contrôle MCI

Nous écrirons dans "Général" et "Déclarations" de la feuille "Form1"

 
Sélectionnez

'BEGIN
Option Explicit
'--------------------------------------------------
' Variables, constantes et déclarations utilisées dans la
' démo du contrôle Multimédia MCI
'--------------------------------------------------

' Stocke le Handle de fenêtre du contrôle d'image
' utilisé pour afficher les fichiers AVI     (si vous vouler afficher des images)
 Dim HwndFrame As Integer

' Récupère le Handle de fenêtre du contrôle d'image
'Private Declare Function GetFocus Lib "user" ( ) As Integer           'Déclaration d'origine

Ndla - Nous aurions pu ne pas tenir compte de cette déclaration si nous nous servons uniquement que de la partie son de cette application Et voici le code que j'ai récupéré dans le fichier des API de Windows qui a une relation avec la fonction GetFocus qui se trouve dans le fichier DLL intitulé "User32"

 
Sélectionnez

'Declare Function GetFocus Lib "user32" ( ) As Long

Je l'ai modifié en :

 
Sélectionnez
Private Declare Function GetFocus Lib "user32" ( ) As Long

' Mémorise la largeur et la hauteur initiale de la fenêtre.
'La feuille ne peut être redimensionnée en dessous de ces valeurs.
Dim MinWinWidth As Integer
Dim MinWinHeight As Integer

' Color constants
Const BLUE = &H800000
Const RED = &H80&

Dans cette procédure j'ai modifié uniquement le code relatif à l'affichage des fichiers AVI Et j'ai traduit les commentaires en Français(Sur le module que vous téléchargerez, les commentaires seront en Anglais, désolé!)

 
Sélectionnez
Private Sub GetNewFileName(AFile As String)
'--------------------------------------------------
' Utilise la boîte de dialogue standard du menu fichier pour chercher un nom de fichier
'--------------------------------------------------
	Dim Canceled As Integer

	Canceled = False
	On Error GoTo GetNewFileName_Error

	' Configure la boîte de dialogue fichier standard
	CMDialog1.Filter = "Multimedia Files|*.wav;*.mid"            ';*.avi Attention coder les extensions en minuscule
	CMDialog1.DialogTitle = "Select Multimedia File"
	CMDialog1.CancelError = True

	' Ouvre la boîte de dialogue
	CMDialog1.Action = 1

	If Not Canceled Then
		AFile = CMDialog1.FileName
	Else
		AFile = ""
	End If
	Exit Sub
	'
	GetNewFileName_Error:
	Canceled = True
	Resume Next
End Sub

Les autres procédures sont identiques et ne demandent pas de modifications
Vous avez besoin du contrôle "MCI32.ocx" et du contrôle "Comdlg32.ocx" pour faire fonctionner cette application, ce dernier servant au fonctionnement des boîtes de dialogues sous Windows.

Pour que le module de démonstration fonctionne, vous devez créer un répertoire "Sons" à la racine de votre disque dur"C:\" et insérer les fichiers sons qui figurent dans le fichier ZIP compressé qui accompagnent cet exposé.
Pour des raisons que j'ignore, j'ai pu constater que certains fichiers Wav ne pouvaient pas être lus par le contrôle MCI que ce soit sous plate forme16 bits ou indifféremment sous 32 bits.

J'attire votre attention sur le fait que lorsque vous allez lancer l'application "MciDemo" que vous allez télécharger, celle-ci va engendrer une erreur du genre :

./images/erreur_mci.gif   Fenêtre d'erreur générée par
Visual Basic6

Que nous dit ce fichier ?(mcidemo.log)
Ligne 18: La classe CommonDialog du contrôle CMDialog1 n'est pas une classe de contrôle chargée.
Ligne 31: La classe MMControl du contrôle MMControl1 n'est pas une classe de contrôle chargée.


Qu'est ce que cela veut bien dire ?
Cela veut dire que cette feuille ayant été écrite avec une version précédente de VB et faisant appel à des DLL incompatibles(*.vbx) qui ne peuvent pas être lues par VB6.0, le système nous prévient d'une incompatibilité majeure et qu'il a été dans l'impossibilité de charger les contrôles sollicités par les appels aux DLL.
Charge à nous d'apporter les modifications nécessaires pour charger les contrôles adéquat qui rétabliront le bon fonctionnement de ce contrôle Multimédia.

Je vous laisse le soin de modifier en conséquence les instructions inopportunes ce qui à mon avis ne devrait pas vous poser de problème avec les explications que je vous ai données.

Je vous souhaite beaucoup de plaisir à réaliser cette application.

Prochain tutoriel :

Les bases de la gestion de fichiers