[jeu] Music

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

[jeu] Music

Message 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 :)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: [jeu] Music

Message 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 !! :lol:

ps: pour info c'etait deja le cas sur les Ordi 8 bits :roll:
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] Music

Message par blendman »

ah ok, super, merci !

ça va bien me simplifier la tache ça, c'est cool :D.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: [jeu] Music

Message 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 !! :lol:

ps: pour info c'etait deja le cas sur les Ordi 8 bits :roll:
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.
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: [jeu] Music

Message par Fred »

D'ailleur PlaySound() renvoie le canal utilisé par le son joué, pour pouvoir agir dessus apres.
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: [jeu] Music

Message 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.
ImageImage
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] Music

Message 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 :D.
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [jeu] Music

Message 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.
Dernière modification par falsam le jeu. 28/avr./2011 14:11, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: [jeu] Music

Message par case »

Ce serais mieux sans api, ou alors avec des solutions pour les autres systemes
ImageImage
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [jeu] Music

Message 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. :)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: [jeu] Music

Message 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
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: [jeu] Music

Message par blendman »

personnellement, j'utilise des *.ogg, car c'est beaucoup plus léger ;)
Avatar de l’utilisateur
case
Messages : 1546
Inscription : lun. 10/sept./2007 11:13

Re: [jeu] Music

Message 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...
ImageImage
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [jeu] Music

Message 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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: [jeu] Music

Message par Chris »

La librairie "Movie" sait lire les *.ogg, et ... elle est multi-plateforme :mrgreen:
Répondre