Voir la version complète : [NDS][Aide] Palib Audio
Bonjour à tous !
Je suis en train d'essayer d'inclure sons et musiques dans un jeu DS : les fonctions PA_PlayMod et PA_PlaySimpleSound marchent très bien mais maintenant, j'aimerai inclure un son et le faire boucler.
Je compte donc me servir de la fonction PA_PlayFSSoundEx2 (u8 PA_Channel,
u16 PAFS_wav_number, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint) et quelques champs me laissent perplexe !
u16 PAFS_wav_number : pour l'utiliser, je caste comme ça -> u16 test=(u16)*bip;
bip étant le son bip.raw, inclu comme bip.h dans l'entête. bip est en effet à l'origine un const *u8.
int repeatPoint : je ne sais pas à quoi correspond ce champ...
J'avais réussi à la faire marcher une fois : avec repeat à true et repeatpoint à 0 et il me faisait mon son sans discontinuer donc j'ai modifié ce son (je lui ai rajouté un silence pour le faire bien boucler) et depuis, dès que j'essaie de le déclencher, tout plante ! Pourtant, le son continue de bien marcher avec PA_PlaySimpleSound...
Si vous pouvez m'aider, merci d'avance !
J'ai fait quelques tests et il semblerait que la fonction PA_PlayFSMod( u16 PAFS_mod_number ) ne marche que si le PAFS_mod_number est égal à 0...
Quelqu'un d'autre a rencontré ce bug ?
Et pourquoi ne pas utiliser la fonction PA_PlaySoundEx2?
PA_PlaySoundEx2 (u8 PA_Channel, const void *data, s32 length, u8 volume, int freq, s16 format, BOOL repeat, int repeatPoint)
avec
PA_Channel Audio channel, from 0 to 7
data Sound data
length Sound length (la taille en octet du fichier .raw d'après ce que j'ai compris en l'utilisant)
volume Volume, from 0 to 127. 64 if not used
freq Sound frequence, depends on the sound... 11025 by default
format Sound format. 0 8 bits 1 16 bits 2 ADPCM 3 PSG
repeat Loop true/false
repeatPoint Repeat point
J'ai eu à m'en servir pour mon projet et ça a plutôt bien fonctionné ^^.
En vérité, je me sers aussi de cette fonction !
Mais pour les sons...
Le truc, c'est que PA_PlaySoundEx2 alloue du son sur un canal déterminé donc pour une musique, c'est un peu léger, non ?
PA_PlayFSMod alloue a priori les 8 canaux réservé aux musiques...
Tu as réussi à faire jouer une musique avec PA_PlaySoundEx2 ?
Non pour les musiques je me suis servi de PA_PlayMod, sachant qu'en principe les musiques sont en .mod, les .raw ne servant qu'au bruitages.
Maintenant, je me suis aussi de servi de PA_PlaySoundEx2 pour une musique de jeu mais seulement pour répeter un bout du morceau (10s, pas plus).
Si tu converti un morceau mp3 ou wav en raw, tu va vites obtenir une rom d'une taille assez conséquentes ^^.
Dans ce cas, tu comprends mon problème !
J'utilise également des mods que j'intégre grâce au PAFS mais la fonction PA_PlayFSMod (qui d'ailleurs appelle à la fin PA_PlayMod) ne fonctionne que si l'indice du fichier PAFS est égal à 0... ce qui est assez embêtant !
Tant que j'y suis, quelqu'un sait comment faire boucler un .mod ?
A la rigueur pour jouer tes .mod, continue à utiliser PA_PlayMod comme tu le faisais avant, ça me parrait plus simple...:unsure: (pourquoi utiliser PAFS en fait?)
Pour le faire boucler, je ne crois pas qu'il y ait de fonctions pour (vu la doc :p), au pire tu vois combien de temps dure ta musique, comptes les secondes dans ton programme et une fois que ce compteur a atteint une certaine valeur tu relances la lecture du mod.
J'utilise PAFS dans un souci de propreté : on ne compile pas le fichiers sons et on les intégre à la RAM seulement quand on en a besoin...
De la même façon, c'est pour ça que j'avais demandé s'il y avait un moyen de faire boucler les .mod proprement car j'avais envisagé la solution que tu proposes mais...
Peut-être suis-je trop maniaque ?!
Ok je comprend le but de PAFS alors, c'est tout à ton honneur d'être maniaque dans ce cas ;). Mais j'ai bien peur qu'à part boucler les .mod à l'ancienne il n'y ait pas d'autre alternative pour le moment...
Maintenant, c'est la fonction SndChgVolume(u8 PA_Channel, u8 Volume) qui me pose problème...
Je suis allé jusqu'à faire ça :
PA_PlayFSMod(PA_FSGetFile (0, "balad", "mod"));
for(u8 i=0;i<16;i++)SndChgVolume(i, 0);
et pourtant je continue d'entendre parfaitement la musique...
Je fais une erreur quelque part ?
Shiva Eden
20/03/2006, 18h19
(petite parenthèse)
Bienvenue confrère :)
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org