Yodajr
10/04/2006, 02h43
Jour 5 : Jouer musiques et sons
On met en pause le graphisme quelques instants afin de se consacrer à une partie bien sympa : le son ;)
1) Les sons et musiques
Nous avons besoin pour ce tuto de 2 fichiers.
Un fichier qui nous servira de son (très très court donc) au format WAV et un autre qui nous servira de musique, lui aussi au format WAV.
Le fichier son est à mettre tel quel sur la MS dans le répertoire du jeu.
Le fichier musique lui, doit etre converti en BGM, le format compressé d'oslib.
Prennez donc votre WAV cadencé soit à 44KHz, soit à 22KHz, soit à 11KHz. Tout autre format ne fonctionnera pas.
Il doit etre également en mono, oslib ne gère pas encore la stéréo.
Dans l'archive d'oslib, se trouve un dossier "Tools" copiez-y votre fichier wav et en considérant qu'il s'appele "music.wav", tappez en command dos :
wav2bgm music.wav music.bgm
Vous obtiendrez donc un fichier "music.bgm" qu'il faudra copier sur la MS dans le répertoire du jeu.
Vous pouvez aussi également utiliser ceux du tuto (dans l'archive en bas de page)
2) Le code
//La librairie principale OSLib
#include <oslib/oslib.h>
//les callbacks
PSP_MODULE_INFO("OSLib Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
//definition des pointeurs vers nos sons
OSL_SOUND *music, *son;
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
//Initialiser l'audio
oslInitAudio();
//chargement des sons. Loading encore ? pas forcement...
music = oslLoadSoundFile("diredocks.bgm", OSL_FMT_STREAM);
son = oslLoadSoundFile("injury.wav", OSL_FMT_NONE);
//vérification
if (!music || !son)
oslDebug("Verifiez que tous les fichiers sont bien copiés dans le répertoire du jeu.");
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//commandes du son
if (osl_keys->pressed.triangle) oslPlaySound(music, 0);
if (osl_keys->pressed.square) oslPauseSound(music, -1);
if (osl_keys->pressed.circle) oslStopSound(music);
if (osl_keys->pressed.cross) oslPlaySound(son, 1);
//affichage des consignes
oslPrintf_xy(0,0,"Pressez Triangle pour lancer la musique.");
oslPrintf_xy(0,10,"Pressez Quarre pour mettre en pause/relancer la musique.");
oslPrintf_xy(0,20,"Pressez Rond pour stopper la musique.");
oslPrintf_xy(0,30,"Pressez Croix pour jouer le son.");
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
//pour la mise en veille
oslAudioVSync();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
3) Explications
OSL_SOUND *music, *son;
On definit les pointeurs vers nos sons et musiques. Creez en un pour chaque son et bien sûr au tout début :)
oslInitAudio();
Initialise le système audio, comme d'hab au tout début ;)
music = oslLoadSoundFile("diredocks.bgm", OSL_FMT_STREAM);
Ici on charge un bgm, donc une musique. 2 types de chargement sont alors possibles :
OSL_FMT_STREAM : le fichier ne sera pas chargé dans la mémoire de la PSP mais streamé depuis la MS. Avantage : on gagne du temps lors du chargement et on économise de la place en ram (20Mo de dispo). Inconvénients : le stream demande un peu plus de CPU, surtout si l'echantillonage est élevé.
OSL_FMT_NONE : ben là pas de stream, le fichier est chargé, donc c'est tout l'inverse de l'explication du stream :P
son = oslLoadSoundFile("injury.wav", OSL_FMT_NONE);
Ici on charge un son (wav). Il est conseillé de charger les sons en mémoire, ou streamer ceux qui sont joués vraiment très rarement.
oslPlaySound(music, 0);
oslPlaySound(son, 1);
Joue le son ou lance la musique. Le chiffre est le canal sur lequel sera joué le son ou la musique, la PSP en proposant 8 (de 0 à 7).
oslPauseSound(music, -1);
Pause la musique. Avec un 1, je met en pause, avec un 0 je continue. Ici le -1 signifie que je change l'état à chaque appel.
oslStopSound(music);
Je pense que vous avez deviné, ici on stoppe la musique. Au prochain appel de PlaySound la musique repartira du début.
Comme vous pouvez le constater, pas besoin de préciser le canal.
oslAudioVSync();
A appeler à chaque frame pour palier au bug de la mise en veille (voir la doc pour plus de détails)
4) Eboot
Téléchargez l'eboot compilé pour 1.5 ici (http://hothmoon.free.fr/psp/dev/jour05_eboot.zip)
On met en pause le graphisme quelques instants afin de se consacrer à une partie bien sympa : le son ;)
1) Les sons et musiques
Nous avons besoin pour ce tuto de 2 fichiers.
Un fichier qui nous servira de son (très très court donc) au format WAV et un autre qui nous servira de musique, lui aussi au format WAV.
Le fichier son est à mettre tel quel sur la MS dans le répertoire du jeu.
Le fichier musique lui, doit etre converti en BGM, le format compressé d'oslib.
Prennez donc votre WAV cadencé soit à 44KHz, soit à 22KHz, soit à 11KHz. Tout autre format ne fonctionnera pas.
Il doit etre également en mono, oslib ne gère pas encore la stéréo.
Dans l'archive d'oslib, se trouve un dossier "Tools" copiez-y votre fichier wav et en considérant qu'il s'appele "music.wav", tappez en command dos :
wav2bgm music.wav music.bgm
Vous obtiendrez donc un fichier "music.bgm" qu'il faudra copier sur la MS dans le répertoire du jeu.
Vous pouvez aussi également utiliser ceux du tuto (dans l'archive en bas de page)
2) Le code
//La librairie principale OSLib
#include <oslib/oslib.h>
//les callbacks
PSP_MODULE_INFO("OSLib Sample", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
//definition des pointeurs vers nos sons
OSL_SOUND *music, *son;
int main()
{
//Initialisation de la librairie
oslInit(0);
//Initialisation du mode graphique
oslInitGfx(OSL_PF_8888, 1);
//Initialisation de la console texte
oslInitConsole();
//Initialiser l'audio
oslInitAudio();
//chargement des sons. Loading encore ? pas forcement...
music = oslLoadSoundFile("diredocks.bgm", OSL_FMT_STREAM);
son = oslLoadSoundFile("injury.wav", OSL_FMT_NONE);
//vérification
if (!music || !son)
oslDebug("Verifiez que tous les fichiers sont bien copiés dans le répertoire du jeu.");
//boucle principale
while (!osl_quit)
{
//Permet de dessiner
oslStartDrawing();
//Lit les touches
oslReadKeys();
//commandes du son
if (osl_keys->pressed.triangle) oslPlaySound(music, 0);
if (osl_keys->pressed.square) oslPauseSound(music, -1);
if (osl_keys->pressed.circle) oslStopSound(music);
if (osl_keys->pressed.cross) oslPlaySound(son, 1);
//affichage des consignes
oslPrintf_xy(0,0,"Pressez Triangle pour lancer la musique.");
oslPrintf_xy(0,10,"Pressez Quarre pour mettre en pause/relancer la musique.");
oslPrintf_xy(0,20,"Pressez Rond pour stopper la musique.");
oslPrintf_xy(0,30,"Pressez Croix pour jouer le son.");
//Fin du dessin
oslEndDrawing();
//Synchronise l'écran
oslSyncFrame();
//pour la mise en veille
oslAudioVSync();
}
//on quitte l'application
oslEndGfx();
oslQuit();
return 0;
}
3) Explications
OSL_SOUND *music, *son;
On definit les pointeurs vers nos sons et musiques. Creez en un pour chaque son et bien sûr au tout début :)
oslInitAudio();
Initialise le système audio, comme d'hab au tout début ;)
music = oslLoadSoundFile("diredocks.bgm", OSL_FMT_STREAM);
Ici on charge un bgm, donc une musique. 2 types de chargement sont alors possibles :
OSL_FMT_STREAM : le fichier ne sera pas chargé dans la mémoire de la PSP mais streamé depuis la MS. Avantage : on gagne du temps lors du chargement et on économise de la place en ram (20Mo de dispo). Inconvénients : le stream demande un peu plus de CPU, surtout si l'echantillonage est élevé.
OSL_FMT_NONE : ben là pas de stream, le fichier est chargé, donc c'est tout l'inverse de l'explication du stream :P
son = oslLoadSoundFile("injury.wav", OSL_FMT_NONE);
Ici on charge un son (wav). Il est conseillé de charger les sons en mémoire, ou streamer ceux qui sont joués vraiment très rarement.
oslPlaySound(music, 0);
oslPlaySound(son, 1);
Joue le son ou lance la musique. Le chiffre est le canal sur lequel sera joué le son ou la musique, la PSP en proposant 8 (de 0 à 7).
oslPauseSound(music, -1);
Pause la musique. Avec un 1, je met en pause, avec un 0 je continue. Ici le -1 signifie que je change l'état à chaque appel.
oslStopSound(music);
Je pense que vous avez deviné, ici on stoppe la musique. Au prochain appel de PlaySound la musique repartira du début.
Comme vous pouvez le constater, pas besoin de préciser le canal.
oslAudioVSync();
A appeler à chaque frame pour palier au bug de la mise en veille (voir la doc pour plus de détails)
4) Eboot
Téléchargez l'eboot compilé pour 1.5 ici (http://hothmoon.free.fr/psp/dev/jour05_eboot.zip)