Adresse memoire d'un son
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18
Adresse memoire d'un son
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.
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.
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 !minirop a écrit :dobro > "Avec les fichiers WAV, le paramètre 'Longueur' n'a pas besoin d'être spécifié."

le pointeur est toujours le meme lors du chargement du meme son (testé sous nunux) :
(avec debugger)
(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
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18
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:
2eme methode:
3ème méthode:
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..
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:
-->c'est trop long.loadsound(#SonSpriteN°x,"fichier")
2eme methode:
et includebinary-->idem, çà fait tousser l'executablecatchsound(#SonSpriteN°x,?label)
3ème méthode:
-->ça marche pas...Je n'ai pas l'impression que loadsound renvoie l'adresse de l'echantillon..*ptr=loadsound(#SonSprite,"fichier")
catchsound(#SonSpriteN°x,*ptr)
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..
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

mon exemple fonctionne tres bien !

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 !!) !

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
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18
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???
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???
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18
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:
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.
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
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.
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...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:
@++
-
- Messages : 64
- Inscription : lun. 07/févr./2005 11:18