créer un son avec CatchSound

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

créer un son avec CatchSound

Message par SPH »

Je voulais créer moi meme un son en banque et le jouer mais il y a un probleme et je ne le vois pas :!: :idea: :

Code : Tout sélectionner

If InitSound() = 0
  MessageRequester("Error", "Sound system is not available",  0)
  End
EndIf

*MemoireID = AllocateMemory(50000)

If *MemoireID
  For i=0 To 49999
    PokeB(*MemoireID+i,Random(255)) ; creation du son
  Next
  CatchSound(0,*MemoireID,50000) ; on catch le son comme ca ?
  PlaySound(0)
  Delay(1000)
  FreeMemory(*MemoireID)
EndIf


!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
flaith
Messages : 1487
Inscription : jeu. 07/avr./2005 1:06
Localisation : Rennes
Contact :

Re: créer un son avec CatchSound

Message par flaith »

Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: créer un son avec CatchSound

Message par SPH »

Ton code est trop long et je vois le pointeur d'un pointeur et ca, je capte pas.
De plus, je souhaite synthétiser des cordes de guitare (Dobro va aimer) donc, il me faut a la base mon code car il est extremement petit MAIS MAIS MAIS.... YA UN BUUUUUUUG :cry: :oops:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
PAPIPP
Messages : 534
Inscription : sam. 23/févr./2008 17:58

Re: créer un son avec CatchSound

Message par PAPIPP »

Bonjour à tous
@ SPH
On ne peut réaliser un fichier ou une zone son en tirant les caractères au hasard.
Structure d'un fichier son suivant WIKIPEDIA
Généralités [modifier]

Le format WAV est une extension de fichiers audio, il s'agit d'un conteneur capable de recevoir des formats aussi variés que le MP3, le WMA, l'ATRAC3, l'ADPCM, le PCM. C'est ce dernier qui est cependant le plus courant, et c'est pour cela que l'extension .wav est souvent — et donc à tort — considérée comme correspondant à des fichiers « sans pertes » (communément désignés par le mot anglais lossless). Le format WAV est standardisé sous Windows ; son pendant sous la plate-forme Macintosh est l'AIFF/AIFC.

* Le conteneur WAV est désormais ancien, et peu pratique.
* Son système d'étiquettes est des plus rudimentaires, ce qui ne permet pas de décemment s'en servir pour l'organisation d'une large bibliothèque de fichiers. Des logiciels tels que foobar2000 et Winamp permettent bien d'ajouter des étiquettes au format APEv2[1], mais cette solution n'est pas standardisée et pourrait poser des difficultés à d'autres logiciels.
* En outre, et à l'instar de l'AIFF, ce format ne permet pas de créer des fichiers de grande taille (maximum 2 Gio), ce qui le rend inapte au travail moderne sur des fichiers haute-définition. En effet, la limite de 2 Gio est atteinte avec à peine 20 minutes d'informations au format 5.1 en 24 bit/96 kHz. C'est une des raisons ayant incité Apple à développer un nouveau conteneur nommé Core Audio Format (CAF).
* Enfin, le format WAV ne contient aucune information sur le niveau absolu du son qu'il contient, ce qui le rend inutilisable pour des applications du domaine de la mesure.
* Néanmoins, le format WAV reste incontournable sous plate-forme Windows. Enfin, le format est supporté par plusieurs baladeurs (lorsqu'un flux PCM ou parfois ADPCM est présent), bien que la taille de ces fichiers soit par conséquent très volumineuse.
* Chez les professionnels, le BWF lui succède.

Structure des fichiers WAV [modifier]

Les fichiers au format WAV (portant l'extension .wav) ont le format suivant (dans la majorité des cas). Ils se composent d'un en-tête de fichier, suivi des données.
En-tête de fichier WAV [modifier]

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ées 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] [...
en reprenant l'exemple sur PB

Code : Tout sélectionner

If InitSound()=0
  MessageRequester("Erreur","Le sytème son n'est pas valable",0)
  End
EndIf
SoundFileName$ = OpenFileRequester("Choisir un fichier *.wav", "", "Fichier wav|*.wav",0)
Debug SoundFileName$ 
If SoundFileName$
  If LoadSound(0, SoundFileName$)
    PlaySound(0, #PB_Sound_Loop)
    MessageRequester("Sound", "Joue le son en boucle..."+#LF$+"Cliquer pour quitter..", 0)
  Else
    MessageRequester("Error", "Ne peut charger le fichier son", 0)
  EndIf
EndIf
End   
A+
Il est fort peu probable que les mêmes causes ne produisent pas les mêmes effets.(Einstein)
Et en logique positive cela donne.
Il est très fortement probable que les mêmes causes produisent les mêmes effets.
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: créer un son avec CatchSound

Message par SPH »

Ok ca marche. J'hésite a lancer un grand concours sur les meilleurs sons générés par des formules mais si vous avez des créations interessantes, je suis partant pour les écouter :

Code : Tout sélectionner

If InitSound() = 0
  MessageRequester("Error", "Sound system is not available",  0)
  End
EndIf

*MemoireID = AllocateMemory(43660)

If *MemoireID
  For i=0 To 43
    b.b
    Read.b b
    PokeB(*MemoireID+i,b) ; creation du son
  Next
  ;;;;;;;;;;;;;;;
  For i=44 To 43659 ; la création du son d'environ 1 seconde se passe ici :
    
    b=Sin(i/10)*127
    PokeB(*MemoireID+i,b) ; creation du son
    
  Next ; fin de la création du son
  ;;;;;;;;;;;;;;;
  CatchSound(0,*MemoireID,43660) ; on catch le son comme ca ?
  PlaySound(0)
  Delay(1000)
  FreeMemory(*MemoireID)
EndIf


DataSection
  ; le mot "RIFF"
  Data.b 82,73,70,70
  ; taille du fichier -8
  Data.b 132,170,0,0
  ;Data.b 16,0,0,0
  ; le mot "WAVEfmt" 
  Data.b 87,65,86,69,102,109,116,32
  ; nombre d'octets du bloc -8
  Data.b 16,0,0,0
  ; format de stockage
  Data.b 1,0
  ; nombre de canaux
  Data.b 1,0
  ; frequence
  Data.b 68,172,0,0
  ; 
  Data.b 136,88,1,0
  Data.b 2,0,16,0
  ; le mot "data"
  Data.b 100,97,116,97
  ; data size - 44
  Data.b 96,170,0,0
EndDataSection

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Re: créer un son avec CatchSound

Message par Huitbit »

Hello,

Tonton avait lancé un truc en assembleur, ça a fini comme ça !

http://www.purebasic.fr/french/viewtopic.php?t=9027
http://www.purebasic.fr/french/viewtopi ... hilit=adsr

Originale ton idée de mettre l'entête en data :P !

Mais si c'est pour de la musique, il y a mieux et sans API !
http://www.purebasic.fr/french/viewtopi ... moulinette
Je compte bientôt poster un sujet plus complet dessus !

Hasta la vista !
Elevé au MSX !
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: créer un son avec CatchSound

Message par SPH »

Huitbit a écrit :Originale ton idée de mettre l'entête en data :P !
C'est un minimum. Mais j'ai triché car j'ai échoué a la déclaration de la grosseur du wav. Alors j'ai fais l'inverse : créer un wav d'a peu pres la taille de 50k sous AUDACITY (freeware que j'aime bien) et j'ai repompé en data l'entete...

PS : moi aussi, élevé au MSX (VG8010 puis MSX2 NMS8220 pour jouer a vampire killer)
Image Image

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: créer un son avec CatchSound

Message par lepiaf31 »

J'ai testé le code de huitbit et il est juste énorme ! oO
Avatar de l’utilisateur
Cool Dji
Messages : 1126
Inscription : ven. 05/sept./2008 11:42
Localisation : Besançon
Contact :

Re: créer un son avec CatchSound

Message par Cool Dji »

P'tain un Msx avec Vampire Killer et Meteal Gear...ouargh clac aie un coup de fouet...je suis moooooooooooooooooort
Only PureBasic makes it possible
Avatar de l’utilisateur
SPH
Messages : 4949
Inscription : mer. 09/nov./2005 9:53

Re: créer un son avec CatchSound

Message par SPH »

Cool Dji a écrit :P'tain un Msx avec Vampire Killer et Meteal Gear...ouargh clac aie un coup de fouet...je suis moooooooooooooooooort
Pour vampire killer, j'ai plusieurs fois été dégouté car a un certain niveau, on pouvait se retrouver bloqué dans le décors quand on sautait. Franchement, la raaaage :twisted:

@lepiaf : oui, j'ai testé aussi

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre