PDA

Voir la version complète : [NDS][Aide] Palib Audio


Shining
07/03/2006, 23h14
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 !

Shining
15/03/2006, 19h40
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 ?

KerneL
15/03/2006, 19h58
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é ^^.

Shining
16/03/2006, 10h07
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 ?

KerneL
16/03/2006, 13h12
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 ^^.

Shining
16/03/2006, 14h51
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 ?

KerneL
16/03/2006, 19h41
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.

Shining
17/03/2006, 12h21
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 ?!

KerneL
17/03/2006, 19h25
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...

Shining
20/03/2006, 18h03
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 :)