Page 1 sur 1

Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 0:53
par Ar-S
J'essaye tant bien que mal de me déplacer dans un fichier son via (Get/)SetSoundPosition() (Pause/)ResumeSound()
Que ce soit en wav ou en ogg, ça ne fonctionne pas.
Une idée ?

code corrigé pour sons courts

Code : Tout sélectionner

InitSound() 
LoadSound(0,"sample.wav") ; chargez votre son
sd = SoundLength(0, #PB_Sound_Millisecond) ; La durée en ms du morceau (fait +20000)
c=0

PlaySound(0)

Repeat
sp = GetSoundPosition(0,#PB_Sound_Millisecond)
Debug Str(sp) + " / " + Str (sd)

; ici j'ai mis Pause/resume mais avec Stop/play ça marche pas mieux.
If sp > 15000 ; si la position dépasse 15 sec 
	SetSoundPosition(0,5000,#PB_Sound_Millisecond) ; on se place à 5 sec
	c+1
	Debug "je reparts à 5 sec"
EndIf

Until c = 2
FreeSound(0)
End

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 1:31
par falsam
Bonjour Ar-S

Petite erreur ici PlaySound(0,100) le 2eme paramètre est un flag et non un volume (la fonction est mal foutu)

et là ResumeSound(0,100) le 2eme paramètre est un numéro de canal et non un volume.

Code corrigé en conséquence

Code : Tout sélectionner

; durée en ms
InitSound() 
LoadSound(0,"sample.wav") ; chargez votre son
sd = SoundLength(0, #PB_Sound_Millisecond) ; La durée en ms du morceau (fait +20000)
c=0

PlaySound(0)

Repeat
sp = GetSoundPosition(0,1)
Debug Str(sp) + " / " + Str (sd)

; ici j'ai mis Pause/resume mais avec Stop/play ça marche pas mieux.
If sp > 15000 ; si la position dépasse 15 sec 
   PauseSound(0) ; on fait pause
   SetSoundPosition(0,5000,#PB_Sound_Millisecond) ; on se place à 5 sec
   ResumeSound(0) ; on relance
   c+1
   Debug "je reparts à 5 sec"
EndIf

Until c = 2
FreeSound(0)
End
Gére plutôt le volume avec SoundVolume()

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 6:13
par SPH
Pendant que je vous ai sous la main, existe t'il une instruction qui indique quel est le volume a un instant T ? (pour faire un equaliseur graphique)

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 8:16
par TazNormand
@ SPH : PB est un peu "pauvre" concernant le son, tournes-toi vers la librairie BASS, mais je crois que le "wrapper" n'est plus trop à jour

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 8:54
par Ar-S
@Taz pour SPH Fmod fait parfaitement l'affaire (on a déjà vu la chose avec les radios)
Pour ma part c'est pour le purepunch du coup me fallait du natif ^^
Merci Falsam, j'ai pourtant essayé 1001 fois.. Il manque des infos de débogage pour cette lib sound. Entre les flag et les modes optionnels c'est vrai qu'elle est bancale. Mais ça marche, je vais pouvoir corriger mon (vrai) code.
Merci. (Me reste encore un gros soucis de lag avec le curseur souris et l'openwindowsscreen mais c'est une autre histoire ^^)

Re: [OK]Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 21:48
par Ar-S
Au final j'ai corrigé le code au 1er post. Notez que le Pause / Resume n'étaient pas nécessaires.

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : lun. 07/juil./2014 22:09
par Ar-S
Hum je me demandais pourquoi ça ne marchait pas sur mon code, en fait je pense que ça vient de la taille du morceau.

Pouvez vous essayer ça avec un morceau à vous de plus d'une minute trente.

Lorsqu'on est à 9.5 sec, le morceau devrait sauter à 70000 hors il est repart à ~22000 chez moi.
Bug ? Limite du proce ? Mon code c'est d'la merde ? :mrgreen:

Note : Fermez au deboggeur le c ne sera jamais = 2 dans cette mouture

Code : Tout sélectionner

UseOGGSoundDecoder()
InitSound() 
LoadSound(0,"chips.ogg") ; chargez votre son
sd = SoundLength(0, #PB_Sound_Millisecond) ; La durée en ms du morceau (fait +20000)
Debug sd
c=0

PlaySound(0)

Repeat
sp = GetSoundPosition(0,#PB_Sound_Millisecond)
Debug Str(sp) + " / " + Str (sd)


If sp > 9500 And noloop = 0 ; si la position dépasse 9.5 sec 
	SetSoundPosition(0,70000,#PB_Sound_Millisecond) ; on se place vers la fin
	c+1
	noloop = 1
EndIf

Until c = 2 ; fermez au deboggeur
FreeSound(0)
End

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : mar. 08/juil./2014 1:20
par falsam
Ar-S a écrit :Bug ? Limite du proce ? Mon code c'est d'la merde ? :mrgreen:
C'est un bug de la version 5.21 et à priori 5.22 qui était signalé sur le forum anglais en début d'année.

http://www.purebasic.fr/english/viewtop ... ndPosition

:idea: Fonctionne par contre avec la version 5.30 :)

PS : Ton repeat est infini : c n'est jamais égale à 2. Mais bon .... c'est un détail :mrgreen:

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : mar. 08/juil./2014 8:34
par Ar-S
Le c <> 2 je le précise (fermez au deboggeur) c'était pour l'exemple.
Du coup c'est vraiment la misère ! ça fout mon purepunch à la flotte ! Si c'est corrigé pour la 5.30 ce serait bien de mettre à jour la 5.22 rapidement !
Je l'ai souligné sur le lien que tu as donné. ça fait flic.

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : mar. 08/juil./2014 10:06
par falsam
Fred a écrit :Please check the release date of 5.22
J'ai vérifié avec la version 5.22 : Le souci est le même.

Re: Bibliothèque sound - se déplacer dans un fichier son

Publié : mar. 08/juil./2014 12:49
par Ar-S
Bon j'ai cru comprendre que Fred avait corrigé le prob mais pas encore mis en ligne.. Si j'ai bien compris.