L'audio

OSLib supporte quelques fonctions liées au son sur PSP. Vous pouvez jouer des musiques (.bgm, format ADPCM 'propriétaire') et des sons (.wav). Le format .bgm prend moins de place mais il donne moins bien et ne supporte pas le format stéréo (pour le moment du moins). Il est à utiliser pour les musiques de jeu, si vous avez une petite Memory Stick. Vous pouvez faire tenir une minute de musique de type Mega Drive sur un peu moins de 400 ko tout en ayant une qualité moyenne. Les sons .wav prennent énormément de place et ne sont pas vraiment plus rapides à la restitution que le .bgm. Lorsqu'ils sont streamés, les .bgm peuvent même être plus rapides à la lecture, puisqu'ils requièrent moins d'accès à la Memory Stick.

Voyons comment faire pour jouer une musique. Tout d'abord il faut appeler oslInitAudio() pour initialiser le système audio. Ensuite, il faut charger et jouer les sons. Exemple:

OSL_SOUND *music, *sfx;
oslInit(0);
oslInitAudio();
music = oslLoadSoundFile("test.bgm", OSL_FMT_STREAM);
oslAssert(music);				//Debogage: vérifie qu'il a bien été chargé
sfx = oslLoadSoundFile("test.wav", OSL_FMT_NONE);
oslAssert(sfx);					//Debogage: vérifie qu'il a bien été chargé
oslPlaySound(music, 0);
oslPlaySound(sfx, 1);

Voici les fonctions que nous allons utiliser:

int oslInitAudio();

Initialise le système audio de OSLib. Evidemment obligatoire à appeler pour pouvoir jouer un son.

OSL_SOUND *oslLoadSoundFile(const char *filename, int stream);

Charge un fichier .wav ou .bgm. Indiquez simplement le nom du fichier ainsi que si vous souhaitez le streamer sur le Memory Stick. Si vous streamez un son, il n'est pas chargé en mémoire, ce qui vous fait gagner du temps mais surtout beaucoup de RAM, car la PSP n'en a que 20 Mo, alors imaginez que si vous chargez des effets sonores de 1 Mo chacun, elle sera vite saturée. Toutefois le streaming affecte pas mal les performances de la restitution sonore, surtout si le taux d'échantillonnage est important. Pour des performances optimales, je vous conseille d'utiliser de petits fichiers .wav chargés pour les effets sonores, et des .bgm streamés pour les musiques. Vous pouvez également streamer les effets sonores, mais uniquement ceux qui ne sont presque jamais joués en temps normal.

int oslDeleteSound();

Supprime un son.

void oslAudioVSync();

A appeler dans votre boucle principale. Pourquoi? La mise en veille de la PSP provoque la fermeture de tous les fichiers ouverts! Alors forcément le système audio plantait. Maintenant je gère ça, mais il faut réouvrir les fichiers par après, et ce n'est pas possible directement à la sortie de la veille car la MS n'est pas encore initialisée. Cette fonction va vérifier que la MS est prête et charger les fichiers et continuer là où ils étaient restés si c'est le cas. Si vous ne faites pas appel à cette fonction, tout son joué en streaming sera stoppé à la reprise de la veille. Il sera toutefois rechargé automatiquement (mais recommencé au début) lorsque vous appelez oslPlaySound. Idem pour les sons qui étaient ouverts en streaming mais pas joués.

Structures

OSL_SOUND

Stocke les données d'un son chargé en mémoire. Presque toutes les fonctions audio en auront besoin.