Pour produire un son, il est possible d'utiliser les fonctions PlaySound
ou sndPlaySound
offertes par Windows.
Ces deux fonctions sont déclarée dans le fichier d'en-tête mmsystem.h qu'il faut donc inclure en début de programme (#include <mmsystem.h>
).
Il faut également importer la librairie winmm.lib en l'ajoutant dans les paramètres du projet (voir Développer avec OpenGL).
Ces deux fonctions offrent plusieurs options. Nous ne détaillerons que quelques unes d'entre elles.
Remarque : ces fonctions ne gèrent pas les sons mp3 mais les wav.
Valeurs retournées : TRUE si succès, FALSE sinon.
Remarques : PlaySound
cherche le fichier de son entre autres dans le répertoire courant. Si elle ne trouve
pas le son spécifié, PlaySound
utilise le son system par défaut à la place. Si elle ne le trouve
pas non plus, elle ne fait aucun son et retourne FALSE.
Valeurs retournées : TRUE si succès, FALSE sinon.
Remarque : si la fonction sndPlaySound
ne trouve pas le son spécifié, elle utilise le son system par défaut à la place. Si elle ne le trouve
pas non plus, elle ne fait aucun son et retourne FALSE. Le fichier de son spécifié est cherché entre autres dans le répertoire courant.
Voici quelques exemples d'utilisation :
* Le son est joué puis apparaît le message "C'est fini".
#include <windows.h>
#include <mmsystem.h>
void main (void) {
sndPlaySound("test.wav",SND_SYNC);
//ou PlaySound("test.wav",NULL,SND_SYNC);
printf("C'est fini\n");
}
* Le son est joué et en même temps le programme continue (on introduit donc une pause de 3 secondes pour que
le son ait le temps d'être joué). Le message "Delai de trois secondes" s'affiche en même temps que le son est joué.
#include <windows.h>
#include <mmsystem.h>
#include <time.h>
// Pauses pour un nombre spécifique de millisecondes
void sleep( clock_t wait )
{
clock_t but;
but = wait + clock();
while( but > clock() );
}
void main (void) {
sndPlaySound("test.wav",SND_ASYNC);
//ou PlaySound("test.wav",NULL,SND_ASYNC);
// Delai pour un temps spécifique
printf( "Delai de trois secondes\n" );
sleep( (clock_t)3 * CLOCKS_PER_SEC );
printf( "C'est fait!\n" );
}
* Un premier son est joué (test.wav). Un deuxième est joué en tâche de fond (test2.wav dans un timer Glut),
mais il ne peut s'exprimer que lorsque le premier son est terminé car il a le flag SND_NOSTOP.
#include <windows.h>
#include <mmsystem.h>
#include <gl/gl.h>
#include <gl/glut.h>
void vTimer(int i)
{
sndPlaySound("test2.wav",SND_SYNC|SND_NOSTOP);
//ou PlaySound("test2.wav",NULL,SND_SYNC|SND_NOSTOP);
glutTimerFunc(20, vTimer, 1);
}
void vDisplay()
{
glClearColor(0,0,0,0);
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}
void main ( int argc, char *argv[ ]) {
glutInit(&argc,argv); // initialisation de GLUT
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutInitWindowSize(50,50);
glutInitWindowPosition(100,100);
glutCreateWindow("Son");
glutDisplayFunc(vDisplay);
sndPlaySound("test.wav",SND_ASYNC);
//ou PlaySound("test.wav",NULL,SND_ASYNC);
glutTimerFunc(20, vTimer, 1);
glutMainLoop();
}
* Un premier son (test.wav) est joué indéfiniment, jusqu'à l'appel de sndPlaySound
qui joue
le son test2.wav (3 secondes après).
#include <time.h>
#include <windows.h>
#include <mmsystem.h>
// Pauses pour un nombre spécifique de millisecondes
void sleep( clock_t wait )
{
clock_t but;
but = wait + clock();
while( but > clock() );
}
void main (void) {
sndPlaySound("test.wav",SND_LOOP | SND_ASYNC);
//ou PlaySound("test.wav",NULL,SND_LOOP | SND_ASYNC);
// Delai pour un temps spécifique
printf( "Delai de trois secondes\n" );
sleep( (clock_t)3 * CLOCKS_PER_SEC );
printf( "C'est fait!\n" );
sndPlaySound("test2.wav",SND_SYNC);
//ou PlaySound("test2.wav",NULL,SND_SYNC);
}