Adresse memoire d'un son

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Adresse memoire d'un son

Message par barnierchristophe »

Hello
L'un d'entre vous connaîtrait-il le moyen de récupérer l'adresse ou est chargée un son en mémoire? . J'utilise simultanément le même son et j'aimerais ne pas avoir à le charger depuis un fichier ( c'est long au démarrage) ni en ressource (c'est long à la compilation...) à chaque fois que je l'utilise, Je voulais passé par catchsound, mais je ne sait pas comment lui fournir l'adresse de l'échantillon.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

.....
Dernière modification par Backup le mar. 19/août/2014 14:22, modifié 1 fois.
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message par minirop »

dobro > "Avec les fichiers WAV, le paramètre 'Longueur' n'a pas besoin d'être spécifié." 8)
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

minirop a écrit :dobro > "Avec les fichiers WAV, le paramètre 'Longueur' n'a pas besoin d'être spécifié." 8)
oui ! je sais , mais puisqu'il sert pour d'autre formats, et qu'il ne gene pas pour celui-ci, et que ma reponse s'adresse a quelqu'un qui nage dans le potage (:lol: ) , j'ai preferé etre le plus scolaire possible ! :wink:
Anonyme

Message par Anonyme »

le pointeur est toujours le meme lors du chargement du meme son (testé sous nunux) :


(avec debugger)

Code : Tout sélectionner

If InitSound() = 0
  MessageRequester("Error", "Can't open SDL Or no sound card is available",  0)
  End
EndIf

SoundFileName$ = OpenFileRequester("Choose a .wav file", "/usr/share/sounds/", "Wave files|*.wav",0)
If SoundFileName$



For i = 0 To 5
  *Ptr = LoadSound(0, SoundFileName$)
  Debug *ptr
  Next 
  
  
  
    PlaySound(0)
    MessageRequester("Sound", "Playing the sound..."+Chr(10)+"Click to quit..", 0)
  Else
    MessageRequester("Error", "Can't load the sound.", 0)
  EndIf


End  
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Message par barnierchristophe »

Vous battez pas, du potage, y'en aura pour tous le monde....
le coup de la data section est surement le bon, Mais ça ne donne toujours pas l'adresse de stockage...

Et puis j'ai un Out Of Memory....

En tout cas merci.. Ciao
KarLKoX
Messages : 1191
Inscription : jeu. 26/févr./2004 15:36
Localisation : France
Contact :

Message par KarLKoX »

Les réponses données répondent à ta question (je préfere la méthode de Cpl.Bator) ou alors essaye d'être plus clair stp.
J'espère que tu ne fais pas un bête copier/coller ...
"Qui baise trop bouffe un poil." P. Desproges
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Message par barnierchristophe »

J'ai pas l'impression d'avoir eu ma réponse..
voilà plus de détail:
J'ai plusieurs sprites,de même type, qui fond le même bruit, dont je ne connais pas le nombre par avance (Linkedlist). Je veux qu'ils le fasses simultanément; Il faut donc que j'ai un son par sprite;

1ere méthode:
loadsound(#SonSpriteN°x,"fichier")
-->c'est trop long.

2eme methode:
catchsound(#SonSpriteN°x,?label)
et includebinary-->idem, çà fait tousser l'executable

3ème méthode:
*ptr=loadsound(#SonSprite,"fichier")
catchsound(#SonSpriteN°x,*ptr)
-->ça marche pas...Je n'ai pas l'impression que loadsound renvoie l'adresse de l'echantillon..
c'est donc pour ça que je voulais savoir si il y avait moyen de connaitre l'adresse d'un échantillon qui a été chargé en mémoire..
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

barnierchristophe a écrit : le coup de la data section est surement le bon, Mais ça ne donne toujours pas l'adresse de stockage...

Et puis j'ai un Out Of Memory....

En tout cas merci.. Ciao
8O pas de out memory avec mon exemple puisque justement il est dans une datasection !! , revoie ton prg a mon avis ...

mon exemple fonctionne tres bien ! :D

en plus l'adresse du debut de l'echantillon tu l'as !!

avec :
?a
:)

tout mon synthetiseur vocal repose sur ce principe !! et des sons j'en gere
(pour info :1466 sons !!) ! :D
Anonyme

Message par Anonyme »

je ne te comprends pas, des jeux, j'en ai fait, regarde se snippet :

Code : Tout sélectionner

OpenConsole() :  EnableGraphicalConsole(1) 
  Debug "la console ne marche po sous linux..."
  
  
Enumeration
#Son_Test
EndEnumeration

InitSound()
LoadSound(#Son_Test,"/usr/share/sounds/generic.wav")



Structure MesSprites
  PositionX.f
  PositionY.f
  *Sprite_ptr.l
  SND_test.l
 EndStructure
 
 Global NewList Sprites.MesSprites() 
  
  For i =  0 To 100
  AddElement(sprites())
       With Sprites()
          \PositionX = Random(1000)
          \PositionY = Random(1000)
          \Sprite_ptr = 0 ; Pointeur d'un sprite
          \SND_test   = #Son_Test
       EndWith
  Next i
    
  Repeat
            If T<ElapsedMilliseconds()
             T=ElapsedMilliseconds()+500
            
              SelectElement(sprites(),Random(100))
              PlaySound(sprites()\SND_test)
              Debug "Je joue le son du sprite n°"+Str(ListIndex(sprites()))
              Debug "le son est chargé qu'une fois..."
          EndIf 
  ForEver
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Message par barnierchristophe »

pour dobro:
c'est pour un petit jeu donc plus temps reel que ton application. Si je charge tous les sons au debut du programme, j'ai un out of memory. D'autre part, qu'en je crée un Sprite, je dois chargé le son au moment de la création, et le catchsound est assez long...


pour Cpl Bator:
Peux-tu m'assurer que le son de deux sprites peuvent-être joué simultanément?? J'ai l'impression que comme ils ont le même identifiant, le son joué est arreté quand l'autre est lancé. Exemple: si tu fais deux explosions successives, est-ce que tu entends la fin de la première explosion quand tu envoie la seconde???
Anonyme

Message par Anonyme »

SoundFrequency(#Son_test,44000,PlaySound(sprites()\SND_test))

:?:

logiquement sa marche.

ps: sous nux, sa marche pas la fréquence...
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Message par barnierchristophe »

pour Cpl.bator
J'ai vérifié avec un son long et c'est bien ce que je pensais; quand tu envoies le son d'un sprite, le son du sprite précedent est arrêté. C'est bien normal car ils ont tous le même identifiant. Donc, pas de polyphonie. Pour s'en persuader, Il suffit de charger cinq fois le même fichier, avec donc des identifiants et des adresses différentes, et là, on à une polyphonie:

Code : Tout sélectionner

OpenConsole() :  EnableGraphicalConsole(1)
  Debug "la console ne marche po sous linux..."
 
 
Enumeration
#Son_Test
EndEnumeration

InitSound()




Structure MesSprites
  PositionX.f
  PositionY.f
  *Sprite_ptr.l
  SND_test.l
 EndStructure
 
 Global NewList Sprites.MesSprites()
 
  For i =  0 To 5
  AddElement(sprites())
       With Sprites()
          \PositionX = Random(1000)
          \PositionY = Random(1000)
          \Sprite_ptr = 0 ; Pointeur d'un sprite
                     \SND_test=LoadSound(#PB_Any,"/usr/share/sounds/generic.wav")
       EndWith
  Next i
   
  Repeat
            If T<ElapsedMilliseconds()
             T=ElapsedMilliseconds()+500
           
              SelectElement(sprites(),Random(5))
              PlaySound(sprites()\SND_test)
              Debug "Je joue le son du sprite n°"+Str(ListIndex(sprites()))
              Debug "le son est chargé 5 fois..."
          EndIf
  ForEver
c'est effectivement pas du tout le même son au final

La seul solution que je vois, c'est donc de charger le son plusieurs fois dans une LinkedList, et faire en sorte que chaque sprite affiché prenne l'identifiant suivant dans la liste.
Dernière modification par barnierchristophe le mar. 29/mai/2007 20:40, modifié 1 fois.
Anonyme

Message par Anonyme »

pour Cpl.bator
J'ai vérifié avec un son long et c'est bien ce que je pensais; quand tu envoies le son d'un sprite, le son du sprite précedent est arrêté. C'est bien normal car ils ont tous le même identifiant. Donc, pas de polyphonie. Pour s'en persuader, Il suffit de charger cinq fois le même fichier, avec donc des identifiants et des adresses différentes, et là, on à une polyphonie:
non, l'histoire d'identifiant n'a rien a voir, ca m'est sorti de la tete mais en faisant playsound(MonSon,2) sa marche. c'est pas spécifié dans la doc...

@++
barnierchristophe
Messages : 64
Inscription : lun. 07/févr./2005 11:18

Message par barnierchristophe »

Impeccable, c'est ce que je cherchais. A quoi correspond ce paramètre?

En tout cas merci beaucoup. Ciao
Répondre