| |
|
|
| KompilierenMarqueSéparationSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
MP3-Dateien auslesen (ID3V2-Tag)
##########################################################
ID3V2-Tag Versionen 3 und 4 auslesen
ab Profan 7.6, da die Prozedur als Funktion benutzt wird !
##########################################################
Andreas Miethe * Januar 2003
##########################################################
Declare #MP3_ReadBytes#,File$
Proc ReadTag34
Parameters #MP3_Datei$
Declare #MP3_Result$
Declare #MP3_Ident$,#MP3_MajorVersion%,#MP3_SubVersion%,#MP3_TagLength&
Declare #MP3_ExtHeader%,#MP3_Framestart%,#MP3_Framename$,#MP3_FrameLength&,#MP3_FrameFlags%
Declare #MP3_Temp$,#MP3_Counter&
Declare #MP3_FrameList$,#MP3_NameList$,#MP3_Find%
Filemode 0
Assign #1,#MP3_Datei$
OpenRW #1
Dim #MP3_ReadBytes#,@FileSize(#MP3_Datei$)
@BlockRead(#1,#MP3_ReadBytes#,0,@FileSize(#MP3_Datei$))
CloseRW #1
Identifyer auslesen
#MP3_Ident$ = ID3
#MP3_Temp$ = chr$(Byte(#MP3_ReadBytes#,0))+chr$(Byte(#MP3_ReadBytes#,1))+chr$(Byte(#MP3_ReadBytes#,2))
If #MP3_Ident$ = #MP3_Temp$
#MP3_Result$ = ID3V2-Tag
Version auslesen
#MP3_MajorVersion% = Byte(#MP3_ReadBytes#,3)
#MP3_SubVersion% = Byte(#MP3_ReadBytes#,4)
If (#MP3_MajorVersion% = 3) or (#MP3_MajorVersion% = 4)
Behandlung von TAG-Versionen 3 und 4
#MP3_Result$ = #MP3_Result$ + Version : +Str$(#MP3_MajorVersion%)+.+str$(#MP3_SubVersion%)+chr$(13)
Extendet Haeder suchen
If Byte(#MP3_ReadBytes#,9) = 1
#MP3_ExtHeader% = 6 6 Bytes gross
else
#MP3_ExtHeader% = 0
endif
Frames bearbeiten
If (#MP3_MajorVersion% = 3) or (#MP3_MajorVersion% = 4)
#MP3_FrameList$ = PCNTTRCKTENCWXXXTCOPTOPETCOMTCONCOMMTYERTALBTPE1TIT2TLANTLENTMEDTPUBTSSE
#MP3_NameList$ = Play Counter:,Track:,Encoded von:,Link:,Copyright (c):,Ursprünglicher Künstler:,
#MP3_NameList$ = #MP3_NameList$ + Composer:,Genre:,Kommentar:,Jahr:,Album:,Künstler:,Titel:,
#MP3_NameList$ = #MP3_NameList$ + Sprache:,Länge:,Medientyp:,Publisher:,Decoding-Software:,unbekannt:
#MP3_Framestart% = 10 + #MP3_ExtHeader%
#MP3_FrameFlags% = 2
#MP3_Framename$ = X
Whilenot #MP3_Framename$ =
FrameName
#MP3_Framename$ = chr$(Byte(#MP3_ReadBytes#,#MP3_Framestart%))+chr$(Byte(#MP3_ReadBytes#,#MP3_Framestart%+1))+
chr$(Byte(#MP3_ReadBytes#,#MP3_Framestart%+2))+chr$(Byte(#MP3_ReadBytes#,#MP3_Framestart%+3))
Framelänge
$FF darf nicht vorkommen, daher sind die oberen 4 Bits eines Bytes LO
Die Berechnug der Länge ist darum etwas umständlich !
#MP3_FrameLength& = 256 * 8 * 8 * Byte(#MP3_ReadBytes#,#MP3_Framestart%+4)
#MP3_FrameLength& = #MP3_FrameLength& + 256 * 8 * Byte(#MP3_ReadBytes#,#MP3_Framestart%+5)
#MP3_FrameLength& = #MP3_FrameLength& + 256 * Byte(#MP3_ReadBytes#,#MP3_Framestart%+6)
#MP3_FrameLength& = #MP3_FrameLength& + Byte(#MP3_ReadBytes#,#MP3_Framestart%+7)
TAG
If #MP3_FrameLength& = 0
wenn die Länge NULL ist, dann fertig mit Auslesen !
break
else
#MP3_Temp$ =
#MP3_Counter& = 1
Whilenot #MP3_Counter& = #MP3_FrameLength&
String zusammensetzen
#MP3_Temp$ = #MP3_Temp$ + CHR$(Byte(#MP3_ReadBytes#,#MP3_Framestart%+8+#MP3_FrameFlags%+#MP3_Counter&))
#MP3_Counter& = #MP3_Counter& + 1
Wend
If Mid$(#MP3_Temp$,4,1) = chr$(0)
bei Winamp steht komische Zeug in den ersten 4 Bytes
wahrscheinlich Sprachbezeichner, weg damit !
#MP3_Temp$ = Mid$(#MP3_Temp$,5,Len(#MP3_Temp$))
endif
#MP3_Find% = Instr(#MP3_Framename$,#MP3_FrameList$) / 4
in der Liste nach Eintrag suchen
Case #MP3_Find% = 0 : #MP3_Find% = 19
unbekannte Frames bearbeiten
If Trim$(#MP3_Temp$) <>
nur wenn nicht leer !
#MP3_Result$ = #MP3_Result$ +Substr$(#MP3_NameList$,#MP3_Find%+1,,),Trim$(#MP3_Temp$)+chr$(13)
endif
#MP3_Framestart% = #MP3_Framestart% + 11 + (#MP3_FrameLength& - 1)
wend
endif
endif
else
#MP3_Result$ = #MP3_Result$ + Version kann nicht gelesen werden.+chr$(13)+chr$(13)
#MP3_Result$ = #MP3_Result$ + Es werden nur ID3V2TAG-Versionen 3 und 4 unterstützt !+chr$(13)
endif
else
#MP3_Result$ = Kein ID3V2-Tag
endif
Dispose #MP3_ReadBytes#
Return #MP3_Result$
endproc
#############################
DEMO :
#############################
File$ = Track01.mp3Pfad anpassen
#############################
gibt es die Datei ???
SetErrorlevel 1
Assign #1,File$
Reset #1
Close #1
If %IOResult
@Messagebox( add$(File$, gibt es nicht
Ende),Fehler...,0)
End
Endif
SetErrorlevel 0
#############################
Messagebox(ReadTag34(File$),ID3V2 von +File$,0)
end
#############################
|
|
|
| |
|
|