Faire jouer des fichiers WAVE

Maintenant nous y sommes, vous regardez le progrmame que vous venez de faire et vous vous dites "Si je saurais comment faire, je rajouterais un petit 'ding' lorsque l'utilisateur appuye sur ce bouton." Bien, pourquoi pas en mettre un maintenant!

Voici l'API que vous avez besoin pour faire jouer des WAVE:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

N'es-ce pas une belle fonction ? Maintenant, tout ce qui reste à faire, c'est de dire à la fonction quel fichier vous aimeriez faire jouer (ou en langage d'orninateur : ByVal lpszSoundName As String) et comment que vous aimeriez la faire jouer (ByVal uFlags As Long).

Premierement, j'aimerais faire jour un WAVE (ding.wav) qui se trouve dans le dossier windows\media, on a juste à affecter "c:\windows\media\ding.wav" à la variable lpszSoundName. C'est aussi simple que ça! Si le fichier sonore serait dans le meme dossier que le programme, on pourrait ecrire App.path & "\ding.wav" alors ça fonctionnera peut importe où se trouve votre programme( puisque "App.path" retourne le chemin du dossier où se trouve le fichier éxécutable principal.)

Deuxiement, j'aimerais faire jouer le WAVE continuellement (en loop). Qu'es-ce qui faut dire à la fonction ? La plupart des API font appels à quelques constantes et celle-ci ne fait pas exception:

Const SND_ASYNC = &H1
Const SND_LOOP = &H8
Const SND_NODEFAULT = &H2
Const SND_SYNC = &H0
Const SND_NOSTOP = &H10
Const SND_MEMORY = &H4

Pour faire jouer le WAVE continuellement, on a besoin de faire appel à la constante SND_LOOP. (que nous venons de déclarer) Nous devons maintenant assembler la variable uFlags et la constante SND_LOOP. Ça pourrait ressembler à quelque chose comme ça :

sndPlaySound App.path & "\ding.wav", SND_LOOP

Heureusement il y a d'autre façon de faire jouer un wave que de le faire jouer continuellement. Comme vous pouvez le voir, il y a encore des constantes qui n'ont pas été expliquées jusqu'à maintenant :

SND_ASYNC nous permet de faire jouer un wave avec la possibilité de l'interrompre. Alors nous somme certain que lorsque que nous allons faire jouer un WAVE, nous allons l'entendre.

SND_NODEFAULT nous assure que lorsque notre fichier WAVE n'est pas trouvé, aucun autre son jouera. (comme le son de windows qui est là par défaut)

SND_SYNC joue le WAVE, mais l'utilisateur ne peu rien faire jusqu'à ce que le WAVE soit ternimé. Si tout ce que vous voulez, c'est de faire jouer un son en background dans votre programme, ne prennez pas cette constante.

SND_NOSTOP nous assure que notre fichier WAVE sera jouer au complet et il ne sera jamais interrompu.

SND_MEMORY joue un WAVE qui est deja chargé en mémoire. La routine pour charger un WAVE en mémoire ne sera pas décrite ici, mais ça implique seulement de charger le WAVE dans une chaîne de caracteres et d'utiliser la commande "Get".

Si nous voulons utiliser plusieurs constantes en meme temps, on a juste à les séparrer de la conjonction "or". Par exemple, c'est bien d'utiliser SND_ASYNC avex SND_LOOP pour s'assurer que le programme va continuer de fonctionner pendant que le WAVE joue continuellement. Si on utilise SND_SYNC avec SND_LOOP, nous pourions plus jamais revenir au programme! Exemple:

sndPlaySound App.path & "\ding.wav", SND_ASYNC or SND_LOOP

C'est tout ce qu'il y a à savoir à propos de faire jouer des WAVE en utilisant l'API de windows. Pour des fonctions plus avancées sur le son, nous devons nous tournez vers le DirectSound de DirectX.

Pour télécharger un exemple de se dont nous venons de parler, regarder la Page des Fichiers ou en appuyant ici pour le télécharger maintenant.