fichier -> string

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

fichier -> string

Message par KrisJNT »

Bonjour à tous !

J'essaye de récupérer le contenu d'un fichier mp3 dans une chaîne de caractères, mais il se trouve que dès le Xème caractère, le caractère 0 (nul) est là, et la fonction PeekS() ne veut pas récupérer plus loin. Voici le code :

Code : Tout sélectionner

Declare.l GetID3Tag(fileName$, drawConsole = 0)

GetID3Tag(OpenFileRequester("", "", "MPEG Layer|*.mp3", 1), 1)
Repeat : Until Inkey()
CloseConsole()
End

Procedure.s dec2bin8(decNum)
	While decNum > 0
		If decNum And 1
			bin$ = "1" + bin$
		Else
			bin$ = "0" + bin$
		EndIf
		decNum = Int(decNum / 2)
	Wend
	bin$ = Right("00000000" + bin$, 8)
	ProcedureReturn bin$
EndProcedure

Procedure.s mciSendString(string$)
    buffer$=Space(1024)+Chr(0)
    r = mciSendString_(string$,buffer$,1028,0)
    buffer$=Trim(buffer$)
    If r > 0 
        buffer2$=Space(129)
        mciGetErrorString_(r, buffer2$,128)
        mciSendString$=buffer2$
    Else
        mciSendString$=buffer$
    EndIf
    ProcedureReturn mciSendString$
EndProcedure

Procedure Mod(dividende, diviseur)
	ProcedureReturn dividende - Int(dividende / diviseur) * diviseur
EndProcedure

Procedure.s msTohr(DECt.l)
    h$=Str(Int(DECt/3600000))
    m$=Str(Int((Mod(DECt, 3600000))/60000))
    s$=Str(Int(Mod((Mod(DECt, 3600000)),60000)/1000))
    If Len(h$)=1 : h$="0"+h$ : EndIf
    If Len(m$)=1 : m$="0"+m$ : EndIf
    If Len(s$)=1 : s$="0"+s$ : EndIf
    msTohr$=h$+":"+m$+"."+s$
    ProcedureReturn msTohr$
EndProcedure

Procedure.s getduration(f$)
    r$ = mciSendString("open "+Chr(34)+ f$ +Chr(34)+" alias media")
    r$ = mciSendString("set media time format milliseconds")
    TempsMs = Val(mciSendString("status media length")) ;la varibale TempsMs récupère le nombre de millisecondes écoulées
    getduration$ = msTohr(TempsMs) ;Permet de formater (grâce à la fonction msTohr$) le temps en hh:mm:ss
    r$ = mciSendString("close media")
    ProcedureReturn getduration$
EndProcedure

Procedure.l GetID3Tag(fileName$, drawConsole = 0)
;ProcedureDLL.l GetID3Tag(fileName$, drawConsole = 0)
If drawConsole
	OpenConsole()
EndIf
Print("- Infos MP3 v2 -"+Chr(13)+Chr(10))
Print("Je récupère le nom du ficher..."+Chr(13)+Chr(10))

If fileName$=""
	Print("Aucun ficher n'a été envoyé !"+Chr(13)+Chr(10))
	ProcedureReturn -1
EndIf

;Open file

;========================================
;C'est là !!!
;========================================


Print("J'ouvre le fichier..."+Chr(13)+Chr(10))
OpenFile(0, fileName$)
FileSeek(0, 0)
lenght = Lof(0);length of file

Print("Je lis le fichier..."+Chr(13)+Chr(10))
bin$ = ""

*buffer = AllocateMemory(Lof(0))
ReadData(0, *buffer, Lof(0))

adress = *buffer
bin$ = PeekS(adress, Lof(0), #PB_Unicode)

bin2$ = bin$ ;backup
CloseFile(0)

;============================================
;C'est la fin du code qui me pose problème
;============================================

;Begin search for header
RepeatL:
Print("Je recherche les ID3Tag..."+Chr(13)+Chr(10))

;Search for frame sync - first character should always be ASCII 255
Pos=FindString(bin$,Chr(255), 0)
If Pos=0 
	temoinu=1
	Goto Quit
EndIf

Header$=dec2bin8(Asc(Mid(bin$,Pos,1)));Convert from ASCII to binary
Header$=Header$+dec2bin8(Asc(Mid(bin$,Pos+1,1)))
Header$=Header$+dec2bin8(Asc(Mid(bin$,Pos+2,1)))
Header$=Header$+dec2bin8(Asc(Mid(bin$,Pos+3,1)))
String$=Mid(bin$,Pos,4)
If Left(Header$,11)<>"11111111111" 
	Goto NotFound
EndIf

;Possible header found!
;Retrieve MPEG Audio Version ID
Print("Je regarde la version du MPEG..."+Chr(13)+Chr(10))
If Mid(Header$,12,2)="00" 
	Ver$="MPEG Version 2.5"
	Ver=2
	Goto Skip1
EndIf
If Mid(Header$,12,2)="10" 
	Ver$="MPEG Version 2"
	Ver=2
	Goto Skip1
EndIf
If Mid(Header$,12,2)="11" 
	Ver$="MPEG Version 1"
	Ver=1
	Goto Skip1
EndIf
Goto NotFound

Skip1:
;Retrieve Layer description
Print("Je regarde la version du Layer..."+Chr(13)+Chr(10))
If Mid(Header$,14,2)="01" 
  Layer$="Layer III"
	Layer=3
	Goto Skip2
EndIf
If Mid(Header$,14,2)="10" 
	Layer$="Layer II"
	Layer=2
	Goto Skip2
EndIf
If Mid(Header$,14,2)="11" 
	Layer$="Layer I"
	Layer=1
	Goto Skip2
EndIf
Goto NotFound

Skip2:
;Protection bit
Print("Je regarde si le fichier est protégé..."+Chr(13)+Chr(10))
If Mid(Header$,16,1)="0" 
	Protection$="Yes"
EndIf
If Mid(Header$,16,1)="1" 
	Protection$="No"
EndIf

;BitRate
Print("Je recherche le taux du flux d'information par secondes..."+Chr(13)+Chr(10))
If Mid(Header$,17,4)="0001" 
	If Ver=1 And Layer=1 : BitRate=32:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=32:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=32:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=32:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=8:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=8:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0010" 
	If Ver=1 And Layer=1 : BitRate=64:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=48:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=40:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=48:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=16:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=16:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0011" 
	If Ver=1 And Layer=1 : BitRate=96:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=56:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=48:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=56:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=24:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=24:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0100" 
	If Ver=1 And Layer=1 : BitRate=128:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=64:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=56:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=64:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=32:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=32:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0101" 
	If Ver=1 And Layer=1 : BitRate=160:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=80:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=64:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=80:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=40:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=40:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0110" 
	If Ver=1 And Layer=1 : BitRate=192:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=96:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=80:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=96:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=48:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=48:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="0111" 
	If Ver=1 And Layer=1 : BitRate=224:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=112:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=96:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=112:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=56:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=56:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1000" 
	If Ver=1 And Layer=1 : BitRate=256:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=128:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=112:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=128:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=64:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=64:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1001" 
	If Ver=1 And Layer=1 : BitRate=288:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=160:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=128:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=144:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=80:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=80:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1010" 
	If Ver=1 And Layer=1 : BitRate=320:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=192:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=160:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=160:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=96:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=96:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1011" 
	If Ver=1 And Layer=1 : BitRate=352:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=224:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=192:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=176:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=112:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=112:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1100" 
	If Ver=1 And Layer=1 : BitRate=384:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=256:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=224:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=192:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=128:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=128:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1101" 
	If Ver=1 And Layer=1 : BitRate=416:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=320:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=256:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=224:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=144:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=144:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1110" 
	If Ver=1 And Layer=1 : BitRate=448:Goto Skip3 : EndIf
	If Ver=1 And Layer=2 : BitRate=384:Goto Skip3 : EndIf
	If Ver=1 And Layer=3 : BitRate=320:Goto Skip3 : EndIf
	If Ver=2 And Layer=1 : BitRate=256:Goto Skip3 : EndIf
	If Ver=2 And Layer=2 : BitRate=160:Goto Skip3 : EndIf
	If Ver=2 And Layer=3 : BitRate=160:Goto Skip3 : EndIf
	Goto Skip3
EndIf

If Mid(Header$,17,4)="1111" : BitRate=0:Goto Skip3:EndIf;Bad BitRate
Goto NotFound

Skip3:
;Sampling rate
Print("Je recherche le taux d'échantillonnage..."+Chr(13)+Chr(10))
If Mid(Header$,21,2)="00" 
	If Ver$="MPEG Version 1" : SampleRate=44100:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2" : SampleRate=22050:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2.5" : SampleRate=11025:Goto Skip4 : EndIf
	Goto Skip4
EndIf

If Mid(Header$,21,2)="01" 
	If Ver$="MPEG Version 1" : SampleRate=48000:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2" : SampleRate=24000:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2.5" : SampleRate=12000:Goto Skip4 : EndIf
	SampleRate$="N/A"
	Goto Skip4
EndIf

If Mid(Header$,21,2)="10" 
	If Ver$="MPEG Version 1" : SampleRate=32000:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2" : SampleRate=16000:Goto Skip4 : EndIf
	If Ver$="MPEG Version 2.5" : SampleRate=8000:Goto Skip4 : EndIf
	SampleRate$="N/A"
	Goto Skip4
EndIf

Goto NotFound

Skip4:
Print("Je recherche les autres informations audio..."+Chr(13)+Chr(10))
;Padding bit
If Mid(Header$,23,1)="0" : Padding=0 : EndIf
If Mid(Header$,23,1)="1" : Padding=1 : EndIf
;Calculate frame length
If Layer=1 : FrameLengthInBytes = (12 * BitRate / SampleRate + Padding) * 4 : EndIf
If Layer=2 Or Layer=3 : FrameLengthInBytes = (144 * BitRate / SampleRate + Padding) : EndIf

;Channel Mode
Print("Je regarde le nombre de canaux..."+Chr(13)+Chr(10))
If Mid(Header$,25,2)="00" : ChannelMode$="Stereo":Goto Skip5 : EndIf
If Mid(Header$,25,2)="01" : ChannelMode$="Joint stereo":Goto Skip5 : EndIf
If Mid(Header$,25,2)="10" : ChannelMode$="Dual channel":Goto Skip5 : EndIf
If Mid(Header$,25,2)="11" : ChannelMode$="Single channel":Goto Skip5 : EndIf
Goto NotFound

Skip5:
;Copyright
Print("Je regarde s'il y a un Copyright..."+Chr(13)+Chr(10))
If Mid(Header$,29,1)="0" : Copyright$="No" : EndIf
If Mid(Header$,29,1)="1" : Copyright$="Yes" : EndIf

;Orginal
Print("Je regarde si le fichier est l'original..."+Chr(13)+Chr(10))
If Mid(Header$,30,1)="0" : Orginal$="No" : EndIf
If Mid(Header$,30,1)="1" : Orginal$="Yes" : EndIf

Print(fileName$+Chr(13)+Chr(10))
Print("-=-=-=-=-=-=-=-=-=-=-=-"+Chr(13)+Chr(10))
Print(Ver$+" "+Layer$+Chr(13)+Chr(10))
Print("CRC's: "+Protection$+Chr(13)+Chr(10))
Print("KBPS: "+Str(BitRate)+" / KHZ: "+Str(SampleRate)+Chr(13)+Chr(10))
Print("Frame Length: "+Str(FrameLengthInBytes)+Chr(13)+Chr(10))
Print("Channel Mode: "+ChannelMode$+Chr(13)+Chr(10))
Print("Copyright: "+Copyright$+Chr(13)+Chr(10))
Print("Orginal: "+Orginal$+Chr(13)+Chr(10))
Print("Header found at "+Str(FindString(bin2$,String$, 0)-1)+" bytes"+Chr(13)+Chr(10))
Print("Length of music : "+getduration(fileName$)+Chr(13)+Chr(10))
Print(""+Chr(13)+Chr(10))

Print("MPEG Audio Tag ID3v1 info"+Chr(13)+Chr(10))
Print("Title: "+Trim(Mid(String$,4,30))+Chr(13)+Chr(10))
Print("Artist: "+Trim(Mid(String$,34,30))+Chr(13)+Chr(10))
Print("Album: "+Trim(Mid(String$,64,30))+Chr(13)+Chr(10))
Print("Year: "+Trim(Mid(String$,94,4))+Chr(13)+Chr(10))
Print("Comment: "+Trim(Mid(String$,98,30))+Chr(13)+Chr(10))

Quit:
Print("Finalisation..."+Chr(13)+Chr(10))
bin$="":Header$="":Pos=0
If temoinu=1 
    Print("Erreur dans le fichier : Unable to find frame header !"+Chr(13)+Chr(10))
Else
    Print("Fini !"+Chr(13)+Chr(10))
EndIf
ProcedureReturn 0

NotFound:
Print("En-tête du fichier non trouvé !"+Chr(13)+Chr(10))
;Header not found, try again
bin$=Mid(bin$,Pos+1,l)
Header$=""
Goto RepeatL

EndProcedure
; IDE Options = PureBasic 4.30 (Windows - x86)
; ExecutableFormat = Shared Dll
; CursorPosition = 89
; FirstLine = 66
; Folding = --
; EnableAsm
; EnableUnicode
; EnableThread
; CompileSourceDirectory
Pour info, ce code est traduit de Liberty Basic, et je suis sûr qu'il y a même moyen de bien simplifier sans avoir à récupérer tout le contenu du fichier ! Mais je ne m'y connais pas encore assez en PB... (je compte bien apprendre à gérer ce genre de code ^^)

Il permet de récupérer les ID3Tag d'un fichier MP3 (titre, artiste, etc) et d'autres infos, comme l'échantillonage, etc.

Merci de votre aide,

Kris
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

une piste a suivre :
code en purebasic :


http://sbougribate.free.fr/Files/PureBasic/IDTags.pb
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Merci Dobro, ce code, à première vue, à lair vraiment super !!! :D
Seul souci, sous PB4.30, il y a plein de fonctions qui ne fonctionne pas, dont une UseFile() que je ne vois pas à quoi elle sert... Je garde quand même le code sous le coude ^^

Merci, et dès que j'ai réussi a bien l'étudier, j'en fais une DLL !
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@KrisJNT

Extrait du code en haut de page:

Code : Tout sélectionner

;...
OpenFile(0, fileName$)
FileSeek(0, 0)
lenght = Lof(0);length of file

Print("Je lis le fichier..."+Chr(13)+Chr(10))
bin$ = ""

*buffer = AllocateMemory(Lof(0))
ReadData(0, *buffer, Lof(0))

adress = *buffer
bin$ = PeekS(adress, Lof(0), #PB_Unicode)

bin2$ = bin$ ;backup
CloseFile(0)
;... 
Si tu veux lire du binaire, tu pourras difficilement utiliser les fonctions de chaînes (PeekS(), Mid(), StringField(), etc...). Comme tu l'as précisé, il y a le problème du caractère terminal 0 qui parasite PeekS(), mais aussi les fonctions de chaînes plus complexes comme StringField(), etc...

Il vaut mieux que tu restes avec des PeekB(*Buffer + (Position - 1) ) plutôt que des Asc(Mid(Bin$, Position, 1) ).
Je crois qu'en plus, c'est plus rapide.

Edit (après lecture du correctif de Cpl ci-dessous)

Code : Tout sélectionner

PeekB(*Buffer + (Position - 1) ) & $FF
Sans le masque & $FF, tu obtiens des valeurs signées, donc fausses en effet... (Merci Cpl!)
Dernière modification par Ollivier le ven. 06/mars/2009 23:32, modifié 1 fois.
Anonyme

Message par Anonyme »

Ollivier , non , des PeekC() (0 a 255) :D

ou PeekB() & 255
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

un code allemand pour lire les tag mp3
testé chez moi en V4.30 , marche ! :)

Code : Tout sélectionner

; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=1350&highlight=
; Author: Momo (corrected by J-The-Grey, updated for PB4.00 by blbltheworm)
; Date: 14. June 2003
; OS: Windows
; Demo: Yes

OpenWindow(1,12,12,300,250,"ID3 Infos:",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 

AboutText.s="Programmer: Moritz Wagner" + Chr(13) + Chr(13) + Chr(169) + " 2003 by Moritz Wagner"+Chr(13)+"Programmed in Pure Basic" + Chr(13) + Chr(13) + "Contact: Wagnergitti@vr-web.de" 

File.s=OpenFileRequester("Bitte Wählen sie eine MP3 Datei aus die ID3 V1 Tags enthält","","MP3 Tracks (*.MP3)|*.mp3;Alle (*.*)|*.*",0) 
If File<>"" 
    If ReadFile(0,File) 
        MemPointer =  AllocateMemory(128) ; 128 byte reservieren
        If  MemPointer
            FileSeek(0,Lof(0)-128) 
            ReadData(0,MemPointer, 128) ; die letzten 128 byte der Datei auslesen 
            ; Debug mempointer 
            CloseFile(0) 
            header$    = PeekS(MemPointer, 3) 
            
            If header$ = "TAG"                               ;  3 Zeichen 
                songtitle$ = Trim(PeekS(MemPointer +   3,30)) ; 30 Zeichen 
                artist$    = Trim(PeekS(MemPointer +  33,30)) ; 30 Zeichen 
                album$     = Trim(PeekS(MemPointer +  63,30)) ; 30 Zeichen 
                year$      = Trim(PeekS(MemPointer +  93, 4)) ;  4 Zeichen 
                comment$   = Trim(PeekS(MemPointer +  97,30)) ; 30 Zeichen 
                genre      = PeekB(MemPointer + 127)          ;  1 Zeichen 
                CreateGadgetList(WindowID(1)) 
                TextGadget(7,10,10,80,20,"Titel:") 
                TextGadget(8,10,40,80,20,"Künstler: ") 
                TextGadget(9,10,70,80,20,"Album: ") 
                TextGadget(10,10,100,80,20,"Jahr: ") 
                TextGadget(11,10,130,80,20,"Kommentar: ") 
                TextGadget(12,10,160,80,20,"Genre: ") 
                StringGadget(0,80,10,200,20,songtitle$) 
                StringGadget(1,80,40,200,20,artist$) 
                StringGadget(2,80,70,200,20,album$) 
                StringGadget(3,80,100,200,20,year$) 
                StringGadget(4,80,130,200,20,comment$) 
                StringGadget(5,80,160,200,20,Str(genre)) 
                ButtonGadget(6,20,190,70,30,"About") 
                ButtonGadget(13,120,190,70,30,"OK") 
            EndIf 
        EndIf 
    EndIf 
Else 
    MessageRequester("Error","Bitte Wählen Sie eine MP3 Datei aus!",0) 
EndIf 

Repeat 
    eventid = WaitWindowEvent() 
    If eventid = #PB_Event_CloseWindow 
        Ende=1 
    EndIf 
    If eventid = #PB_Event_Gadget 
        If EventGadget()=6 
            MessageRequester("About",AboutText,OK) 
        EndIf 
        If EventGadget()=13 
            songtitle.s=GetGadgetText(0) 
            artist.s=GetGadgetText(1) 
            album.s=GetGadgetText(2) 
            year.s=GetGadgetText(3) 
            comment.s=GetGadgetText(4) 
            genre=Val(GetGadgetText(5)) 
            
            
            If OpenFile(0,File)
                MemPointer = AllocateMemory(128)
                If MemPointer
                    FileSeek(0,Lof(0)-128) 
                    PokeS(MemPointer,header$, 3) 
                    ;  3 Zeichen 
                    PokeS(MemPointer+3,songtitle.s,30) ; 30 Zeichen 
                    PokeS(MemPointer+33,artist.s,30) ; 30 Zeichen 
                    PokeS(MemPointer+63,album.s,30) ; 30 Zeichen 
                    PokeS(MemPointer+93,year.s,4) ;  4 Zeichen 
                    PokeS(MemPointer+97,Comment.s,30) ; 30 Zeichen 
                    PokeB(MemPointer + 127,genre)          ;  1 Zeichen 
                    
                    WriteData(0,MemPointer, 128) 
                    CloseFile(0) 
                    ;     Debug songtitle 
                    
                EndIf 
            EndIf 
        EndIf 
    EndIf 
Until Ende=1 
End 

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -
; EnableXP
autre prg, autres infos !

Code : Tout sélectionner

; German forum: 
; Author: Unknown (updated for PB4.00 by blbltheworm)
; Date: 10. June 2003
; OS: Windows
; Demo: Yes

Procedure Testbit(val,bitnum)
    ;gibt Bitwert zureuck
    Global Dim bit.b(8);
    t1 = val / 2 : If t1*2 <> val : bit(1) = 1 : EndIf
    t2 = t1 / 2  : If t2*2 <> t1  : bit(2) = 1 : EndIf
    t3 = t2 / 2  : If t3*2 <> t2  : bit(3) = 1 : EndIf
    t4 = t3 / 2  : If t4*2 <> t3  : bit(4) = 1 : EndIf
    t5 = t4 / 2  : If t5*2 <> t4  : bit(5) = 1 : EndIf
    t6 = t5 / 2  : If t6*2 <> t5  : bit(6) = 1 : EndIf
    t7 = t6 / 2  : If t7*2 <> t6  : bit(7) = 1 : EndIf
    t8 = t7 / 2  : If t8*2 <> t7  : bit(8) = 1 : EndIf
    result = bit(bitnum)
    ProcedureReturn result
EndProcedure

Procedure.w Mod(a.w,b.w)
    ;gibt ganzzahligen Restwert einer Division zurück
    ProcedureReturn a - ((a/b)*b)
EndProcedure

;################
;PFAD anpassen
;################
file$=OpenFileRequester("charger un mp3","C:\","*.mp3",0)

If ReadFile(0, file$)
    HeaderStart.l = 0
    FileSeek(0,0)
    ;Header suchen
    ;Fängt mit $FF an, und beginnnt nach einem
    ;möglichen ID3V2-Tag!
    ;Da $FF im ID3V2-Tag niemals vorkommen darf
    ;einfach danach suchen !
    While Asc(Chr(ReadByte(0))) <> $FF
        HeaderStart = HeaderStart + 1
    Wend
    
    If HeaderStart > 0
        Debug "ID3V2-Tag gefunden"
    EndIf
    
    ;in diesen 3 Bytes stehen alle Info's
    Hbyte1.b =  ReadByte(0)
    Hbyte2.b =  ReadByte(0)
    Hbyte3.b =  ReadByte(0)
    
    ;Byte 3
    Select Str(Testbit(Hbyte3,2)) + Str(Testbit(Hbyte3,1))
        Case "00"
            Emp$ = "None"
        Case "01"
            Emp$ = "50/15 microseconds"
        Case "10"
            Emp$ = "Dunno"
        Case "11"
            Emp$ = "CITT j.17"
    EndSelect
    Debug "Emphasis : "+Emp$
    
    Select Str(Testbit(Hbyte3,3))
        Case "0"
            Org$ = "No"
        Case "1"
            Org$ = "Yes"
    EndSelect
    Debug "Original : "+Org$
    
    Select Str(Testbit(Hbyte3,4))
        Case "0"
            Cop$ = "No"
        Case "1"
            Cop$ = "Yes"
    EndSelect
    Debug "Copyright : "+Cop$
    
    Mex$ = Str(Testbit(Hbyte3,6))+Str(Testbit(Hbyte3,5))
    
    Select Str(Testbit(Hbyte3,8))+Str(Testbit(Hbyte3,7))
        Case "00"
            Cha$ = "Stereo"
        Case "01"
            Cha$ = "Joint Stereo"
        Case "10"
            Cha$ = "Dual Chanel"
        Case "11"
            Cha$ = "Mono"
    EndSelect
    Debug "Kanäle : "+Cha$
    
    ;Byte 2
    Select Str(Testbit(Hbyte2,1))
        Case "0"
            Ext$ = "None"
        Case "1"
            Ext$ = "Privat"
    EndSelect
    Debug "Extension : "+Ext$
    
    
    Select Str(Testbit(Hbyte2,2))
        Case "0"
            Pad$ = "1"
        Case "1"
            Pad$ = "0"
    EndSelect
    If Pad$ = "1"
        Debug "Padding : yes"
    Else
        Debug "Padding : no"
    EndIf
    
    Sam$ = Str(Testbit(Hbyte2,4))+Str(Testbit(Hbyte2,3))
    
    Btr$ = Str(Testbit(Hbyte2,8))+Str(Testbit(Hbyte2,7))+Str(Testbit(Hbyte2,6))+Str(Testbit(Hbyte2,5))
    
    ;Byte 1
    Select Str(Testbit(Hbyte1,1))
        Case "0"
            Err$ = "On"
        Case "1"
            Err$ = "Off"
    EndSelect
    Debug "Error-Protection : "+Err$
    
    Select Str(Testbit(Hbyte1,3)) + Str(Testbit(Hbyte1,2))
        Case "00"
            Layer$ = "?"
        Case "01"
            Layer$ = "3"
        Case "10"
            Layer$ = "2"
        Case "11"
            Layer$ = "1"
    EndSelect
    Debug "MPG - Layer : "+Layer$
    
    Select Str(Testbit(Hbyte1,5)) + Str(Testbit(Hbyte1,4))
        Case "00"
            Mpgversion$ = "2.5"
        Case "01"
            Mpgversion$ = "?"
        Case "10"
            Mpgversion$ = "2"
        Case "11"
            Mpgversion$ = "1"
    EndSelect
    Debug "MPG - Version : "+Mpgversion$
    
    
    Select Mpgversion$
        Case "1"
            Select Sam$
                Case "00"
                    SampleRate$ = "44100"
                Case "01"
                    SampleRate$ = "48000"
                Case "10"
                    SampleRate$ = "32000"
                Case "11"
                    SampleRate$ = "Stream-Error"
            EndSelect
        Case "2"
            Select Sam$
                Case "00"
                    SampleRate$ = "22050"
                Case "01"
                    SampleRate$ = "24000"
                Case "10"
                    SampleRate$ = "16000"
                Case "11"
                    SampleRate$ = "Stream-Error"
            EndSelect
    EndSelect
    Debug "Samplerate : "+SampleRate$+" kHz"
    
    
    Select Mpgversion$
        Case "1"
            Select Mex$
                Case "00"
                    ModeExt$ = "Frequenzband 4"
                Case "01"
                    ModeExt$ = "Frequenzband 8"
                Case "10"
                    ModeExt$ = "Frequenzband 12"
                Case "11"
                    ModeExt$ = "Frequenzband 16"
            EndSelect
        Case "2"
            Select Mex$
                Case "00"
                    ModeExt$ = "Frequenzband 0"
                Case "01"
                    ModeExt$ = "Frequenzband 4"
                Case "10"
                    ModeExt$ = "Frequenzband 8"
                Case "11"
                    ModeExt$ = "Frequenzband 16"
            EndSelect
    EndSelect
    Debug "Mode-Extension : "+ModeExt$
    
    ;Bitraten-Tabellen
    V1L1$ = "32,64,96,128,160,192,224,256,288,320,353,384,416,448,-1"
    V1L2$ = "32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1"
    V1L3$ = "32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1"
    V2L1$ = "32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1"
    V2L2$ = "32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1"
    V2L3$ = "8,16,24,32,64,80,56,64,128,160,112,128,256,320,-1"
    Liste$ ="0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111"
    
    
    If (Layer$ = "1") And (Mpgversion$ = "1")
        Bitrate$ = StringField(V1L1$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    If (Layer$ = "2") And (Mpgversion$ = "1")
        Bitrate$ = StringField(V1L2$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    If (Layer$ = "3") And (Mpgversion$ = "1")
        Bitrate$ = StringField(V1L3$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    If (Layer$ = "1") And (Mpgversion$ = "2")
        Bitrate$ = StringField(V2L1$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    If (Layer$ = "2") And (Mpgversion$ = "2")
        Bitrate$ = StringField(V2L2$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    If (Layer$ = "3") And (Mpgversion$ = "2")
        Bitrate$ = StringField(V2L3$,((FindString(Liste$,Btr$,0)-1)/4)-1,",")
    EndIf
    Debug "Bitrate : "+Bitrate$+" kBits/s"
    
    ;rechnen
    If SampleRate$ ="Stream-Error"
        MessageRequester("Stream-Error","Fehlerhaftes Dateiformat !",16)
        CloseFile(0)
        End
    EndIf
    
    If Val(Bitrate$) > 0 And Val(SampleRate$) > 0
        Sek.l = Int(Lof(0) * 8) / (Val(Bitrate$) *1000)
    EndIf
    Debug "Duration : "+Str(Sek)+" sec"
    
    ;Min =  Sek/60
    ;Seks = Mod(Sek,60)
    Debug "Time : "+Str(Sek/60)+":"+Str(Mod(Sek,60))+" min"
    
    If Val(SampleRate$)>0
        Framesize.l = 144 * (Val(Bitrate$)*1000) / Val(SampleRate$) + Val(Pad$)
        Debug "Framesize : "+Str(Framesize)+" Bytes"
    EndIf
    
    If Framesize > 0
        Frames.l = (Lof(0)-128-HeaderStart) / (Framesize)
    EndIf
    Debug "Frames : "+Str(Frames)
    Debug ""
    
    
    ;ID3V1-Tag auslesen , die letzten 128 Bytes der Datei
    FileSeek(0,Lof(0)-128)
    ;AllocateMemory(0,128,0) ;pb alt
    MemoryID=AllocateMemory(128)      ;pb neu
    ReadData(0,MemoryID,128)
    
    Tags$ = PeekS(MemoryID,3)
    If Tags$ = "TAG"
        Debug "ID3V1-Tag :"
        ;Debug PeekS(MemoryID(),3);TAG-Kennung
        Debug PeekS(MemoryID+3,30);Titel
        Debug PeekS(MemoryID+33,30);Artist
        Debug PeekS(MemoryID+63,30);Album
        Debug PeekS(MemoryID+93,4);Jahr
        Debug PeekS(MemoryID+97,29);Kommentar
        Debug PeekB(MemoryID+126);Track-NR
        Restore genre
        For x = 0 To PeekB(MemoryID+127);Genre-ID
            Read.S Genre$
        Next x
        Debug Genre$
        Debug ""
    EndIf
    
    FreeMemory(MemoryID)
    
    
    ;ID3V2-Tag auslesen! Variable Länge am Anfang der Datei.
    ;Das Ganze ist leider nicht ganz so einfach, da
    ;im Prinzip jedes Programm,das TAG's einfuegen kann,
    ;reinschreiben kann was es will !
    ;Es gibt zwar einige Vorgaben, aber das reicht bei weitem nicht aus !
    ;Alle nicht bekannten Frame-Formate werden mit "unbekannt"
    ;gekennzeichnet !
    If HeaderStart > 0
        FileSeek(0,0);zum Anfang
        
        ;die ersten 10 Bytes einlesen
        Global Dim Bytes.b(9)
        For x = 0 To 9
            Bytes(x) = ReadByte(0)
        Next x
        
        ID3Ident$ = Chr(Bytes(0))+Chr(Bytes(1))+Chr(Bytes(2))
        ;Debug ID3Ident$
        
        ID3Version.l = Bytes(3)
        ID3SubVersion.l = Bytes(4)
        ID3Flags.l = Bytes(5)
        Debug "ID3V2-Version " +Str(ID3Version)+"."+Str(ID3SubVersion)
        ;Debug ID3Flags
        
        ;die nächsten 4 Bytes sind die Längenangabe
        ;brauchen wir nicht da die Länge schon
        ;bekannt ist (Headerstart-1)
        Debug "ID3V2Size : "+ Str(Headerstart-1)+" Bytes"
        
        ;Extendet Header vorhanden ?
        ;Ist der Header vorhanden verschieben sich die
        ;Frames um 6 Bytes nach hinten
        ExtHeader.l = Testbit(Bytes(5),6)
        ;Debug ExtHeader
        
        ;Frames auslesen
        If Extheader > 0
            FrameStart = 16
        Else
            FrameStart = 10
        EndIf
        
        ;unterschiedliche Behandlung der Versionen
        ;Versionen 3.x und 4.x bearbeiten
        
        If ID3Version = 3 Or ID3Version = 4
            DescriptPlus = 11
            Repeat
                FileSeek(0,FrameStart);zum Anfang
                FrameID$ = Chr(ReadByte(0))+Chr(ReadByte(0))+Chr(ReadByte(0))+Chr(ReadByte(0))
                ;Debug FrameID$
                Framesize   = ReadByte(0)*256*8*8
                Framesize   + ReadByte(0)*256*8
                Framesize   + ReadByte(0)*256
                Framesize   + ReadByte(0)
                DescriptionStart = FrameStart + DescriptPlus
                If Framesize <> 0 ; sonst Überlauf
                    FileSeek(0,DescriptionStart)
                    ;AllocateMemory(0,FrameSize-1,0)
                    MemoryID=AllocateMemory(Framesize-1)
                    ReadData(0,MemoryID,Framesize-1)
                    
                    ;Winamp schreibt da komisches Zeug rein
                    ;wahrscheinlich einen Sprachbezeichner
                    ;den brauchen wir nicht, also weg damit
                    Frame$ = PeekS(MemoryID,FrameSize-1)
                    
                    If FrameID$ = "COMM";Sprachbezeichner 3 Zeichen und NULLByte
                        Frame$ = PeekS(MemoryID+4,FrameSize-1)
                    EndIf
                    
                    If FrameId$ = "WXXX";Link fängt mit NULLByte an
                        Frame$ = PeekS(MemoryID+1,FrameSize-1)
                    EndIf
                    
                    FreeMemory(MemoryID)
                    Select FrameID$
                        Case "PCNT"
                            Framename$ = "Play Counter:"+Frame$
                        Case "TRCK"
                            Framename$ = "Track:"+Frame$
                        Case "TENC"
                            Framename$ = "Encoded von:"+Frame$
                        Case "WXXX"
                            Framename$ = "Link:"+Frame$
                        Case "TCOP"
                            Framename$ = "Copyright (c):"+Frame$
                        Case "TOPE"
                            Framename$ = "Ursprünglicher Künstler:"+Frame$
                        Case "TCOM"
                            Framename$ = "Composer:"+Frame$
                        Case "TCON"
                            Framename$ = "Genre:"+Frame$
                        Case "COMM"
                            Framename$ = "Kommentar:"+Frame$
                        Case "TYER"
                            Framename$ = "Jahr:"+Frame$
                        Case "TALB"
                            Framename$ = "Album:"+Frame$
                        Case "TPE1"
                            Framename$ = "Künstler:"+Frame$
                        Case "TIT2"
                            Framename$ = "Titel:"+Frame$
                        Case "TLAN"
                            Framename$ = "Sprache:"+Frame$
                        Case "TLEN"
                            Framename$ = "Länge:"+Frame$
                        Case "TMED"
                            Framename$ = "Medientyp:"+Frame$
                        Case "TPUB"
                            Framename$ = "Publisher:"+Frame$
                        Case "TSSE"
                            Framename$ = "Decoding-Software:"+Frame$
                            ;            Default
                            ;            Framename$ = "unbekanntes Frame-Format:"+Frame$
                    EndSelect
                    If Frame$ <> ""
                        Debug Framename$
                    EndIf
                EndIf
                FrameStart + DescriptPlus + Framesize -1
            Until FrameID$ = "" Or FrameID$ = "3DI";NULL Oder Footer
        EndIf
        
        ;Version 2.x bearbeiten
        If ID3Version = 2
            DescriptPlus = 6
            Framesize = 0
            FrameStart = 10
            Repeat
                FileSeek(0,FrameStart);zum Anfang
                FrameID$ = Chr(ReadByte(0))+Chr(ReadByte(0))+Chr(ReadByte(0))
                Framesize = 0
                Framesize   + Asc(Chr(ReadByte(0)))*256*8
                Framesize   + Asc(Chr(ReadByte(0)))*256
                Framesize   + Asc(Chr(ReadByte(0)))
                ReadByte(0)
                
                If Framesize > 0;sonst Überlauf
                    ;AllocateMemory(0,FrameSize-1,0)
                    MemoryID=AllocateMemory(Framesize-1)
                    ReadData(0,MemoryID,Framesize-1)
                    
                    ;Sprachbezeichner ausfiltern
                    Frame$ = PeekS(MemoryID,FrameSize-1)
                    For i = 1 To 4
                        If Mid(Frame$,i,1) = Chr(0)
                            Frame$ = PeekS(MemoryID+4,FrameSize-1)
                        EndIf
                    Next I
                    
                    ;Frame$ = PeekS(MemoryID,FrameSize-1)
                    FreeMemory(MemoryID)
                    Select FrameID$
                        Case "TRK"
                            Framename$ = "Track:"+Frame$
                        Case "TEN"
                            Framename$ = "Encoded von:"+Frame$
                        Case "TCR"
                            Framename$ = "Copyright (c):"+Frame$
                        Case "TOA"
                            Framename$ = "Ursprünglicher Künstler:"+Frame$
                        Case "TCM"
                            Framename$ = "Composer:"+Frame$
                        Case "TCO"
                            Framename$ = "Genre:"+Frame$
                        Case "COM"
                            Framename$ = "Kommentar:"+Frame$
                        Case "TYE"
                            Framename$ = "Jahr:"+Frame$
                        Case "TAL"
                            Framename$ = "Album:"+Frame$
                        Case "TP1"
                            Framename$ = "Künstler:"+Frame$
                        Case "TT2"
                            Framename$ = "Titel:"+Frame$
                        Case "TLA"
                            Framename$ = "Sprache:"+Frame$
                        Case "TMT"
                            Framename$ = "Medientyp:"+Frame$
                        Case "TSS"
                            Framename$ = "Decoding-Software:"+Frame$
                        Default
                            Framename$ = "unbekanntes Frame-Format:"+Frame$
                    EndSelect
                    If Frame$ <> ""
                        Debug Framename$
                    EndIf
                    
                EndIf
                FrameStart + Framesize + DescriptPlus
            Until Framesize = 0
        EndIf
        
    EndIf
    CloseFile(0)
Else
    Debug "Can't load File"
EndIf
End

DataSection
    Genre:
    Data.s "Blues"
    Data.s "Classic Rock"
    Data.s "Country"
    Data.s "Dance"
    Data.s "Disco"
    Data.s "Funk"
    Data.s "Grunge"
    Data.s "Hip-Hop"
    Data.s "Jazz"
    Data.s "Metal"
    Data.s "New Age"
    Data.s "Oldies"
    Data.s "Other"
    Data.s "Pop"
    Data.s "R&B"
    Data.s "Rap"
    Data.s "Reggae"
    Data.s "Rock"
    Data.s "Techno"
    Data.s "Industrial"
    Data.s "Alternative"
    Data.s "Ska"
    Data.s "Death Metal"
    Data.s "Pranks"
    Data.s "Soundtrack"
    Data.s "Euro-Techno"
    Data.s "Ambient"
    Data.s "Trip-Hop"
    Data.s "Vocal"
    Data.s "Jazz Funk"
    Data.s "Fusion"
    Data.s "Trance"
    Data.s "Classical"
    Data.s "Instrumental"
    Data.s "Acid"
    Data.s "House"
    Data.s "Game"
    Data.s "Sound Clip"
    Data.s "Gospel"
    Data.s "Noise"
    Data.s "AlternRock"
    Data.s "Bass"
    Data.s "Soul"
    Data.s "Punk"
    Data.s "Space"
    Data.s "Meditative"
    Data.s "Instrumental Pop"
    Data.s "Instrumental Rock"
    Data.s "Ethnic"
    Data.s "Gothic"
    Data.s "Darkwave"
    Data.s "Techno -Industrial"
    Data.s "Electronic"
    Data.s "Pop-Folk"
    Data.s "Eurodance"
    Data.s "Dream"
    Data.s "Southern Rock"
    Data.s "Comedy"
    Data.s "Cult"
    Data.s "Gangsta"
    Data.S "Top 40"
    Data.S "Christian Rap"
    Data.S "Pop/Funk"
    Data.S "Jungle"
    Data.S "Native American"
    Data.S "Cabaret"
    Data.S "New Wave"
    Data.S "Psychadelic"
    Data.S "Rave"
    Data.S "Showtunes"
    Data.S "TriGenreiler"
    Data.S "Lo-Fi"
    Data.S "Tribal"
    Data.S "Acid Punk"
    Data.S "Acid Jazz"
    Data.S "Polka"
    Data.S "Retro"
    Data.S "MusiciGenrel"
    Data.S "Rock & Roll"
    Data.S "Hard Rock"
    Data.S "Folk"
    Data.S "Folk-Rock"
    Data.S "National Folk"
    Data.S "Swing"
    Data.s "Fast Fusion"
    Data.s "Bebob"
    Data.s "Latin"
    Data.S "Revival"
    Data.S "Celtic"
    Data.S "Bluegrass"
    Data.S "Avantgarde"
    Data.S "Gothic Rock"
    Data.s "Progressive Rock"
    Data.s "Psychedelic Rock"
    Data.s "Symphonic Rock"
    Data.s "Slow Rock"
    Data.s "Big Band"
    Data.s "Chorus"
    Data.s "Easy Listening"
    Data.s "Acoustic"
    Data.s "Humour"
    Data.s "Speech"
    Data.s "Chanson"
    Data.s "Opera"
    Data.s "Chamber Music"
    Data.s "Sonata"
    Data.s "Symphony"
    Data.s "Booty Bass"
    Data.s "Primus"
    Data.s "Porn Groove"
    Data.S  "Satire"
    Data.S  "Slow Jam"
    Data.s "Club"
    Data.S "Tango"
    Data.S "Samba"
    Data.S "Folklore"
    Data.S "Ballad"
    Data.s "Power Ballad"
    Data.s "Rhythmic Soul"
    Data.s "Freestyle"
    Data.s "Duet"
    Data.s "Punk Rock"
    Data.s "Drum Solo"
    Data.s "A Capella"
    Data.s "Euro-House"
    Data.s "Dance Hall"
    Data.s "Goa"
    Data.s "Drum & Bass"
    Data.s "Club-House"
    Data.s "Hardcore"
    Data.s "Terror"
    Data.s "Indie"
    Data.s "BritPop"
    Data.s "Negerpunk"
    Data.s "Polsk Punk"
    Data.s "Beat"
    Data.s "Christian Gangsta Rap"
    Data.s "Heavy Metal"
    Data.s "Black Metal"
    Data.s "Crossover"
    Data.s "Contemporary Christian"
    Data.s "Christian Rock"
    Data.s "Merengue"
    Data.s "Salsa"
    Data.s "Thrash Metal"
    Data.s "Anime"
    Data.s "JPop"
    Data.s "Synthpop"
EndDataSection

; IDE Options = PureBasic v4.02 (Windows - x86)
; Folding = -
KrisJNT
Messages : 110
Inscription : ven. 31/oct./2008 16:51

Message par KrisJNT »

Ah merci beaucoup Dobro ! Pile ce qu'il me faut, et je poste la dll dès que c'est fini !
Répondre