Concernant la longueur via CatchSound

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Concernant la longueur via CatchSound

Message par Ar-S »

ayant des soucis à cause du bug de SetSoundPosition() de la 5.22, j'ai du bidouiller mon fichier son.
Mais tant qu'à faire, à la manière d'un copysprite et clipsprite, ce serait vraiment bien si on pouvait créer des sons à partir d'un fichier son principale.
Avec un #SON1 qui dure 10s et PositionDebut, PositionFin et Duree serait en millisecondes
Ce serait top de pouvoir faire un truc genre

Code : Tout sélectionner

CreateClipSound(#SON1, #SON2, PositionDebut, PositionFin) 
ou

Code : Tout sélectionner

CreateClipSound(#SON1, #SON2, PositionDebut, Duree) 
Je me dis qu'avec CatchSound ça doit se faire mais je n'en suis pas sûr. vu qu'il débute sa capture au début du fichier.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Concernant la longueur via CatchSound

Message par Backup »

Ar-S a écrit :je me dis qu'avec CatchSound ça doit se faire mais je n'en suis pas sûr. vu qu'il débute sa capture au début du fichier.
ben non ,
CatchSound(#Son, AdresseMemoire [, Longueur [, Options]])
AdresseMemoire : c'est ce que tu veux , ça peut etre le label lorsque c'est en Datasection
mais tout aussi bien une adresse en Ram si tu a bufferisé (AllocateMemory)

a partir de là, tu ajoutes un Offset, pour commencer ta lecture ou tu veux :)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Concernant la longueur via CatchSound

Message par graph100 »

tu pourrais copier la mémoire du son à partir de l'endroit choisi, puis coller l'entête wav devant, ça doit se faire, mais ça va prendre un peu de place quand même, parce qu'il faut que l'entête wav soit correct.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Concernant la longueur via CatchSound

Message par graph100 »

@Dobro : on a répondu la même chose :mrgreen:

Cependant tu as oublié que la mémoire d'un son s'organise de la façon suivante :

#Entête WAV# DATA du SON#

Donc si tu mets un offset sauvage, ça va être critique !
en plus de ça il faut que l'offset prenne les données au bon endroit.

Je vais essayer de faire un exemple, mais j'ai du boulot :?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Concernant la longueur via CatchSound

Message par Ar-S »

C'est bien de définir l'endroit ou commence / se termine le son qui pose problème. Je n'avais pas pensé à l'entête.
D'ailleurs mon fichier est un ogg mais je subodore qu'en mémoire il est décompressé via useoggdecoder().
J'ai mal choisi mon moment pour vouloir bidouiller le son tiens.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Concernant la longueur via CatchSound

Message par Backup »

graph100 a écrit :Cependant tu as oublié que la mémoire d'un son s'organise de la façon suivante :#Entête WAV# DATA du SON#
toi tu as oublié qu'un entete ça a généralement toujours la même taille ;)
et que cet entete, indique generalement ou commence le son ....
L'en-tête d'un fichier WAV commence dès le premier octet (offset 0). Il a une taille de 44 octets, et est constitué des champs suivants (listés dans l'ordre) :

[Bloc de déclaration d'un fichier au format WAVE]
FileTypeBlocID (4 octets) : Constante «RIFF» (0x52,0x49,0x46,0x46)
FileSize (4 octets) : Taille du fichier moins 8 octets
FileFormatID (4 octets) : Format = «WAVE» (0x57,0x41,0x56,0x45)

[Bloc décrivant le format audio]
FormatBlocID (4 octets) : Identifiant «fmt » (0x66,0x6D, 0x74,0x20)
BlocSize (4 octets) : Nombre d'octets du bloc - 8 (0x10)

AudioFormat (2 octets) : Format du stockage dans le fichier (1: PCM, ...)
NbrCanaux (2 octets) : Nombre de canaux (de 1 à 6, cf. ci-dessous)
Frequence (4 octets) : Fréquence d'échantillonnage (en hertz) [Valeurs standardisées : 11025, 22050, 44100 et éventuellement 48000 et 96000]
BytePerSec (4 octets) : Nombre d'octets à lire par seconde (i.e., Frequence * BytePerBloc).
BytePerBloc (2 octets) : Nombre d'octets par bloc d'échantillonnage (i.e., tous canaux confondus : NbrCanaux * BitsPerSample/8).
BitsPerSample (2 octets) : Nombre de bits utilisés pour le codage de chaque échantillon (8, 16, 24)

[Bloc des données]
DataBlocID (4 octets) : Constante «data» (0x64,0x61,0x74,0x61)
DataSize (4 octets) : Nombre d'octets des données (i.e. "Data[]", i.e. taille_du_fichier - taille_de_l'entête (qui fait 44 octets normalement).
DATAS[] : [Octets du Sample 1 du Canal 1] [Octets du Sample 1 du Canal 2] [Octets du Sample 2 du Canal 1] [Octets du Sample 2 du Canal 2]

* Les Canaux :
1 pour mono,
2 pour stéréo
3 pour gauche, droit et centre
4 pour face gauche, face droit, arrière gauche, arrière droit
5 pour gauche, centre, droit, surround (ambiant)
6 pour centre gauche, gauche, centre, centre droit, droit, surround (ambiant)

NOTES IMPORTANTES : Les octets des mots sont stockés sous la forme (i.e., en "little endian")
[87654321][16..9][24..17] [8..1][16..9][24..17] [...

qui plus est, a l'epoque de mon facon030 , je codais en Gfa, du direct2disque c'etait a la mode a l'epoque
donc rien ne t'empeche de lire le Fichier son , a l'Octet que tu veux ;) comme on le faisait
Dernière modification par Backup le jeu. 10/juil./2014 16:30, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Concernant la longueur via CatchSound

Message par Backup »

......
Dernière modification par Backup le mar. 19/août/2014 9:28, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Concernant la longueur via CatchSound

Message par Ar-S »

Trop gros pour que ça me serve dans l'immédiat mais c'est bon à stocker dans un coin. Merci ;)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: Concernant la longueur via CatchSound

Message par graph100 »

Dobro a écrit :toi tu as oublié qu'un entete ça a généralement toujours la même taille ;)
et que cet entete, indique generalement ou commence le son ....
Non, je n'ai pas oublié. J'ai déjà ce genre de code pour enregistrer du son depuis le micro, le traiter à la main, puis en faire un wav et le lire avec PlaySound().
Je voulais souligner le fait de ne pas oublier l'entête lors de la programmation d'une éventuelle fonction 'ClipSound'() :D

En revanche, si tu as une méthode pour lire du son sans utiliser Playsound(), qui ne permet pas de lire du son créé à la volée, je suis super preneur !
Du genre une callback ou autre, de la même façon que pour enregistrer du son depuis le micro, en gros il me faudrait le code la fonction playsound(), pour pouvoir le modifier.
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Répondre