Page 1 sur 2
[jeu] Music
Publié : mer. 27/avr./2011 10:22
par blendman
salut
voilà, je n'ai pas encore abordé les sounds et music dans mon jeu.
J'ai regardé les libs à ce sujet. J'ai vu que je pouvais utiliser des *.ogg, j'ai donc converti certaines de mes musics dans ce format.
Je ne sais pas exactement comment on procède pour lancer les music, faut-il utiliser un thread ou peut-on lancer les music sans thread, et elles se jouent sans "ralentir" le reste du jeu ?
Pour le moment, j'ai créer une procédure pour un thread :
Code : Tout sélectionner
Procedure MusicIntro(*valeur)
LoadSound(0,"music.ogg")
SoundVolume(0,50)
PlaySound(0)
EndProcedure
Mais j''aimerai lancer des music à la suite et boucler la liste par exemple,
Pour en lancer en fonction des terres explorées, je pense que c'est assez simple : je fais une boucle qui stop tous les sounds, puis je lance le sound correspondant :
Code : Tout sélectionner
for i = 0 to maxMusic ; maxMusic étant le nombre maximum de music que j'aurai par exemple
stopsound(i)
next i
playsound(#le_numero_de _la_music_en_fonction_du_lieu,#PB_Sound_Loop,Volume)
Mais dois-je à nouveau le faire dans un thread d'après vous ?
Les multi-canaux c'est cool aussi, ça permet de lancer un son (par exemple le bruit d'un trol qui marche) et la music en même temps

.
Merci

Re: [jeu] Music
Publié : mer. 27/avr./2011 10:41
par Backup
lorsque tu lance un son ou une musique, celui-ci ou celle-ci ce joue deja en Tache de fond ..
si tu fais d'autres trucs après avoir lancé la musique, c'est indépendant deja !!
pas besoin de Threads !!
en fait la carte son "bufferise" ce que tu lui a envoyé
elle joue , en multitache , ce que tu fais avec Purebasic pendant ce temps,
ta carte son ... elle s'en fout !!
ps: pour info c'etait deja le cas sur les Ordi 8 bits

Re: [jeu] Music
Publié : mer. 27/avr./2011 10:56
par blendman
ah ok, super, merci !
ça va bien me simplifier la tache ça, c'est cool

.
Re: [jeu] Music
Publié : mer. 27/avr./2011 11:15
par djes
Dobro a écrit :lorsque tu lance un son ou une musique, celui-ci ou celle-ci ce joue deja en Tache de fond ..
si tu fais d'autres trucs après avoir lancé la musique, c'est indépendant deja !!
pas besoin de Threads !!
en fait la carte son "bufferise" ce que tu lui a envoyé
elle joue , en multitache , ce que tu fais avec Purebasic pendant ce temps,
ta carte son ... elle s'en fout !!
ps: pour info c'etait deja le cas sur les Ordi 8 bits

Ca dépend lesquels, tous les ordis n'avaient pas des DMA! Et les musiques compressées nécessitent toujours un décodage, qui se fait sur Windows dans un thread séparé, pareil pour les lecteurs de modules. C'est vrai que PB gère tout ça tout seul, donc on n'a à se préoccuper de rien, sauf à faire des déformations sonores en temps réels.
Re: [jeu] Music
Publié : mer. 27/avr./2011 17:09
par Fred
D'ailleur PlaySound() renvoie le canal utilisé par le son joué, pour pouvoir agir dessus apres.
Re: [jeu] Music
Publié : mer. 27/avr./2011 23:30
par case
a propos des sons y a t'il un moyen de savoir si un son s'est arrêté de jouer ou pas ?
je n'ai rien vu dans la doc a ce sujet. j'aurais bien voulu pouvoir enchaîner plusieurs titres a la suite.
Re: [jeu] Music
Publié : jeu. 28/avr./2011 10:35
par blendman
case a écrit :a propos des sons y a t'il un moyen de savoir si un son s'est arrêté de jouer ou pas ?
je n'ai rien vu dans la doc a ce sujet. j'aurais bien voulu pouvoir enchaîner plusieurs titres a la suite.
Ah oui, pareil !
je serai très intéressé par cette information moi aussi

.
Re: [jeu] Music
Publié : jeu. 28/avr./2011 13:58
par falsam
case a écrit :a propos des sons y a t'il un moyen de savoir si un son s'est arrêté de jouer ou pas ?
blendman a écrit :Je serai très intéressé par cette information moi aussi
l'interface
IDirectSoundBuffer (Window uniquement) répond à cette question.
Cette interface étant déjà déclaré dans Pure basic, il est donc inutile de la définir à nouveau dans le programme.
Code : Tout sélectionner
Enumeration
#MainForm
#Sample
EndEnumeration
Global SampleName.s
Procedure GetDXSoundStatus(IDSound.i)
If IsSound(IDSound)
Protected *DxSound.IDIrectSoundBuffer=PeekL(IsSound(IDSound)), PlayState.i
*DXsound\GetStatus(@PlayState)
;PlayState retourne les valeurs 1 : (DSBSTATUS_PLAYING) ou 5 (DSBSTATUS_LOOPING) ou 0 (DSBSTATUS_BUFFERLOST)
If PlayState=1 Or PlayState=5
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndIf
EndProcedure
Procedure MainFormShow()
OpenWindow(#MainForm,0,0,500,400,"Test Son",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
EndProcedure
Procedure PlaySample()
If InitSound() = 0
MessageRequester("Error", "Sound system is not available", 0)
End
EndIf
SampleName = OpenFileRequester("", "", "Wave files|*.wav",0)
If SampleName
If LoadSound(#Sample, SampleName)
PlaySound(#Sample)
Else
MessageRequester("Error", "Can't load the sound.", 0)
EndIf
EndIf
EndProcedure
MainFormShow()
PlaySample()
Repeat
If GetDXSoundStatus(#Sample)=#False
Debug "Le son est stoppé"
EndIf
Select WaitWindowEvent()
Case #PB_Event_Gadget
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
La doc de l'interface. sur le site de microsoft.
Re: [jeu] Music
Publié : jeu. 28/avr./2011 14:09
par case
Ce serais mieux sans api, ou alors avec des solutions pour les autres systemes
Re: [jeu] Music
Publié : jeu. 28/avr./2011 14:16
par falsam
case a écrit :Ce serais mieux sans api, ou alors avec des solutions pour les autres systemes
Bien sur que ce serait mieux. Mais je n'ai que cette solution qui ne fonctionne que sur window comme je l'ai bien spécifié. Au fait, affiche dans ta signature sur quel O.S. tu développes tes applications.

Re: [jeu] Music
Publié : jeu. 28/avr./2011 18:18
par Chris
Je vais peut-être dire une connerie, ça ne serait pas la première fois, mais quitte à utiliser des fichiers .wav, pourquoi ne pas utiliser la librairie "Movie"?
MovieStatus() retourne 0 quand la lecture est terminée, ça fonctionne très bien, et ... c'est multi-plateforme
Re: [jeu] Music
Publié : jeu. 28/avr./2011 19:01
par blendman
personnellement, j'utilise des *.ogg, car c'est beaucoup plus léger

Re: [jeu] Music
Publié : jeu. 28/avr./2011 19:24
par case
en général sous windows mais je pense surtout aux gens qui dev sous macos ou linux, de plus faire un soft sous windows ne veux pas dire que seul une version windows verra le jour, j'ai aussi un mac... quand a linux je n'ai pour l'instant pas de machines sous cet os mais qui sait...
Re: [jeu] Music
Publié : jeu. 28/avr./2011 19:26
par falsam
blendman a écrit :personnellement, j'utilise des *.ogg, car c'est beaucoup plus léger

Pour savoir si un son est arrêté avec des *.ogg, mon exemple de code fonctionne aussi en utilisant la fonction
UseOGGSoundDecoder() en entête de ce code par exemple.
Re: [jeu] Music
Publié : jeu. 28/avr./2011 19:35
par Chris
La librairie "Movie" sait lire les *.ogg, et ... elle est multi-plateforme
