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

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

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

Message 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
Dernière modification par Fortix le dim. 12/avr./2009 9:32, modifié 1 fois.
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message par Fortix »

ah ouai éffectivement :lol:

:D
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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:
Dernière modification par Fortix le lun. 13/avr./2009 11:51, modifié 1 fois.
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Message par zaphod »

Je me trompe peut être, mais le tampon alloué n'est pas supprimé avec un freememory

Z@ph0d//
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

zaphod a écrit :Je me trompe peut être, mais le tampon alloué n'est pas supprimé avec un freememory

Z@ph0d//
exact !! :)
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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 :!:
Avatar de l’utilisateur
venom
Messages : 3138
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Message par venom »

chez moi sa bloque a cette ligne la ( au moment ou j'écoute )
ligne 8 Read c.b





@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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!!
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

Message 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...
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
Avatar de l’utilisateur
Fortix
Messages : 559
Inscription : mar. 30/mai/2006 17:03

Message 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
Répondre