Page 1 sur 1
Son version DATA ***(Version 4.20)***
Publié : sam. 11/avr./2009 20:09
par Fortix
Salut les pros du son

,
est il possible de convertir un petit éffet audio(*.wav;*.mp3;etc...) en Data façon ("image->data")

?

C'est à dire on ouvre un fichier audio puis sa convertit automatiquement quelques soit la taille et le format en DataSection soit dans un fichier externe soit directement dans un gadget éditor par exemple;
de façon à l'intégrer dans l'application; yen a qui y arrive mais je ne sais pas comment ils font
Mercix

Publié : sam. 11/avr./2009 22:46
par Backup
Publié : sam. 11/avr./2009 23:59
par Fortix
ah ouai éffectivement

Publié : dim. 12/avr./2009 9:30
par Fortix
Pour que ce topic serve au moin à quelques chose j'ais éffectué plusieurs petites correction dans le code de @Good07

:
Code : Tout sélectionner
;--------------------------------------------------
;Good07 correct by Fortix
;Programme pour transformer des fichiers Wav en data
;Le 12/04/09
;Version PureBasic 4.20
;--------------------------------------------------
;
Global out.s
q.s = Chr(34)
FileName$= OpenFileRequester("", "*.wav", ".wav", 0);On choisi le fichier .wav à transformer en data.
If OpenFile(1,FileName$)<>0 ;Ouverture du fichier
Longueur= FileSize(FileName$) ;On récupère sa longueur
*tampon=AllocateMemory(Longueur) ;On alloue à l'adresse *tanpom un emplacement mémoire de la longueur du fichier
ReadData(1,*tampon,Longueur) ;On transfère le contenu du fichier dans le tampon
EndIf
CloseFile(1) ; On ferme le fichier en lecture
name$=GetFilePart(filename$) ; on récupère son nom
name$=Left(name$,(Len(name$)-4)); et on enlève l'extention (.wav)
If CreateFile(0,"c:\WaveData.pb") ;On donne un nom au programme et on ouvre un fichier en écriture
WriteStringN(0,";Fichier Wave en data"); Les ligne de dessous servent à créer le programme qui va lire les datas
WriteStringN(0," ")
WriteStringN(0,"InitSound()")
WriteStringN(0,"Restore "+ name$); On ajoute le nom du fichier pour la restauration des datas (Utile si on a plusieurs sections)
WriteStringN(0,"Read longueur.l")
WriteStringN(0,"*tampon=AllocateMemory(longueur)")
WriteStringN(0,"For n=0 To longueur-1")
WriteStringN(0," Read c.b")
WriteStringN(0," PokeB(*tampon+n,c)")
WriteStringN(0,"Next n")
WriteStringN(0,"resultat=CatchSound(1,*tampon)")
WriteStringN(0,"If resultat=0")
WriteStringN(0," MessageRequester"+"("+q+"Attention"+q+","+q+"le chargement du son a échoué !"+q+","+"#PB_MessageRequester_Ok"+")")
WriteStringN(0,"EndIf")
WriteStringN(0,"PlaySound(1)")
WriteStringN(0,"Delay(10000)");Permet d'entendre le son avant la fin du programme. A supprimer si vous incorporez ce listing à votre
WriteStringN(0," ") ;programme
WriteStringN(0,"DataSection")
WriteStringN(0," ")
WriteStringN(0,Name$+":")
WriteStringN(0," ")
out="Data.l "
WriteStringN(0,out+Str(longueur));Première ligne de data contient la longueur du fichier à lire.
out="Data.b "
For x=0 To Longueur-1; boucle qui lit le fichier en mémoire et le transforme en data
c=PeekB(*tampon+x);& $FF
c$=Str(c)
out=out+c$
If z=25
z=0
WriteStringN(0,out)
out="Data.b "
ElseIf x<> Longueur-1
out=out+","
EndIf
z=z+1
Next x
If z<26
WriteStringN(0,out); si la dernière ligne n'est pas complète on écrit ce qui reste
EndIf
WriteStringN(0,"EndDataSection")
CloseFile(0)
EndIf
MessageRequester("Programme","Le programme a été généré"+Chr(10)+"avec succé sous le nom"+Chr(10)+"WaveData.Pb",#PB_MessageRequester_Ok)
et voilà

Publié : dim. 12/avr./2009 9:56
par zaphod
Je me trompe peut être, mais le tampon alloué n'est pas supprimé avec un freememory
Z@ph0d//
Publié : dim. 12/avr./2009 10:14
par Backup
zaphod a écrit :Je me trompe peut être, mais le tampon alloué n'est pas supprimé avec un freememory
Z@ph0d//
exact !!

Publié : lun. 13/avr./2009 11:50
par Fortix
effectivement
mais attention : on peut éffacer la mémoire uniquement dans le code du générateur et non pas dans le code générer

car il s'en sert toute au long de la création du Data,
et mettre un "freememory" en fin de "DataSection" n'est pas très académique
Note: en fin d'execution du générateur, cette zone *Tampon sera éffacé automatiquement

Publié : lun. 13/avr./2009 12:30
par venom
chez moi sa bloque a cette ligne la ( au moment ou j'écoute )
ligne 8 Read c.b
@++
Publié : lun. 13/avr./2009 19:19
par Fortix
Salut @venom, ça fait longtemps
Je n'arrive pas à comprendre pourquoi sa bloque chez toi @venom car je viens de le tester avec 4 sons différents, bizar bizar
à mon avis le problème se situe dans le Data, une donnée impossible pour une lecture

et que le debuger accuse read c.b car c'est tout simplement lui qui lit ces valeurs
donc je penses que tu devrais essayer avec un autre son wav, juste pour voir!!
oubien alors rendre visible avec "Debug" toute sa lecture pour voir où sa deconne!!
Publié : mer. 15/avr./2009 11:20
par beauregard
bonjour Fortix
après l'image, le son

mais là çà ne marche pas( testé sur 2 bruitages)
Read data error: no more data
De plus c'est gourmand comme conversion:
wav: 28ko
data: 101ko
et le WaveData.pb est systématique placé dans C: mais çà c'est pas grave...
Publié : mer. 15/avr./2009 19:37
par Fortix
Saluts touts le monde
Le générateur génère le Data et son Lecteur, le lecteur est calibré sur mesure avec son Data lors de sa création hors
"no more data " signifit qu'il déborde du Data!, si les valeurs générés du lecteur demeurent inchangés il est donc impossible que le programme bloque puisqu'il est calibré du début à la fin de son Data;
jvais quant même revoir touts ça

, juste au cas où
je vous tien au courant
