Page 1 sur 1

Son version DATA ***(Version 4.20)***

Publié : sam. 11/avr./2009 20:09
par Fortix
Salut les pros du son :D ,
est il possible de convertir un petit éffet audio(*.wav;*.mp3;etc...) en Data façon ("image->data") :lol: ?

:idea: 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 :x

Mercix :D

Publié : sam. 11/avr./2009 22:46
par Backup

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

:D

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 :D :

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à :lol:

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 :lol:

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 :wink: 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 :lol:

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 :lol:

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 :D