Es gibt wahrscheinlich etliche Varianten. Diese habe ich mal zu Anfangszeiten meiner AutoIt-Karriere geschrieben:
Spoiler anzeigen
;#include <Array.au3>
; Folgende Funktionen zum Auslesen der ID3Tag's
; werden bereitgestellt :
; Zurückgegeben wird ein Array mit 8 Feldern
; Das erste Feld (0) enthält "true" wenn mindestens
; ein Titel & Interpret gefunden wurde.
; _GetID3Tag_V1
; _GetID3Tag_V2
;
; Feldnummer: Inhalt:
; 0 True/False
; 1 Interpret
; 2 Titel
; 3 Album
; 4 Tracknummer
; 5 Year
; 6 Genre
; 7 Kommentar
#include-once
[/autoit] [autoit][/autoit] [autoit]Func _GetID3Tag_V2($dateiname)
dim $feld [8]
$feld[0] = False
if fileexists($dateiname) then
if FileGetSize($dateiname) > 0 then
$handle=fileopen($dateiname,0)
$inhalt=fileread($handle)
FileClose($handle)
; finde ID3-Header
$header_pos=StringInStr($inhalt,"ID3")
if $header_pos <> 0 then
; ID3Tag-Länge bestimmen und einlesen
$taglaenge = Asc(Stringmid($inhalt,$header_pos + 6,1))*2097152 + Asc(Stringmid($inhalt,$header_pos + 7,1))*16384 + Asc(Stringmid($inhalt,$header_pos + 8,1))*128 + Asc(Stringmid($inhalt,$header_pos + 9,1)) +10
$inhalt = StringMid($inhalt,$header_pos,$taglaenge)
; Unterversion ermitteln
$version = Stringmid($inhalt,4,2)
$version = asc(stringleft($version, 1)) & "." & asc(stringright($version,1))
; ID3Tag-Header entfernen
$inhalt = StringMid($inhalt,11)
; wenn Version 2.3.x bis 2.4.x
if $version >= 3.0 and $version < 5.0 then
While StringLen($inhalt) >= 4 and StringLeft($inhalt,3) <> "3DI"
$framelaenge = 256 * 8 * 8 * Asc(StringMid($inhalt,5,1)) + 256 * 8 * Asc(StringMid($inhalt,6,1)) + 256 * Asc(StringMid($inhalt,7,1)) + Asc(StringMid($inhalt,8,1))
Select
Case StringLeft($inhalt,4) = "TPE1"
$feld[1] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,4) = "TIT2"
$feld[2] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,4) = "TALB"
$feld[3] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,4) = "TRCK"
$feld[4] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,4) = "TYER"
$feld[5] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,4) = "TCON"
$feld[6] = StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
$feld[6] = StringMid($feld[6],StringInStr($feld[6],")")+1)
Case StringLeft($inhalt,4) = "COMM"
$feld[7] = $feld[7] & StringReplace(StringReplace(StringMid($inhalt,11,$framelaenge),chr(0),""),chr(1),"")
EndSelect
$inhalt = StringMid($inhalt,11 + $framelaenge)
Wend
else
; wenn Version 2.2.0 bis 2.2.x
if $version >=2.0 and $version < 3.0 then
While StringLen($inhalt) >= 3 and StringLeft($inhalt,3) <> "3DI"
$framelaenge = 256 * 8 * Asc(StringMid($inhalt,4,1)) + 256 * Asc(StringMid($inhalt,5,1)) + Asc(StringMid($inhalt,6,1))
Select
Case StringLeft($inhalt,3) = "TP1"
$feld[1] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "TT2"
$feld[2] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "TAL"
$feld[3] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "TRK"
$feld[4] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "TYE"
$feld[5] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "TCO"
$feld[6] = StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
Case StringLeft($inhalt,3) = "COM"
$feld[7] = $feld[7] & StringReplace(StringReplace(StringMid($inhalt,7,$framelaenge),chr(0),""),chr(1),"")
EndSelect
$inhalt = StringMid($inhalt,7 + $framelaenge)
Wend
endif
endif
if $feld[1] <> "" and $feld[2] <> "" then $feld[0] = true
endif
endif
endif
Return $feld
EndFunc ;_GetID3Tag_V2
Func _GetID3Tag_V1($dateiname)
dim $feld [8]
dim $genre [148] = ["Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge","Hip- Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient","Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound Clip","Gospel","Noise","Alternative Rock","Bass","Soul","Punk","Space","Meditative","Instrumental Pop","Instrumental Rock","Ethnic","Gothic","Darkwave","Techno-Industrial","Electronic","Pop-Folk","Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta","Top 40","Christian Rap","Pop/Funk","Jungle","Native US","Cabaret","New Wave","Psychadelic","Rave","Showtunes","Trailer","Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro","Musical","Rock & Roll","Hard Rock","Folk","Folk-Rock","National Folk","Swing","Fast Fusion","Bebob","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock","Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band","Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus","Porn Groove","Satire","Slow Jam","Club","Tango","Samba","Folklore","Ballad","Power Ballad","Rhytmic Soul","Freestyle","Duet","Punk Rock","Drum Solo","Acapella","Euro-House","Dance Hall","Goa","Drum & Bass","Club-House","Hardcore","Terror","Indie","BritPop","Negerpunk","Polsk Punk","Beat","Christian Gangsta","Heavy Metal","Black Metal","Crossover","Contemporary C","Christian Rock","Merengue","Salsa","Thrash Metal","Anime","JPop","SynthPop"]
$feld[0] = false
if fileexists($dateiname) then
if FileGetSize($dateiname) > 0 then
$handle=fileopen($dateiname,0)
$inhalt=fileread($handle)
FileClose($handle)
$laenge = stringlen($inhalt)
$inhalt = StringRight($inhalt,128)
If StringLeft($inhalt,3) = "TAG" then
$feld[2] = StringStripWS(StringMid($inhalt,4,30),3)
$feld[1] = StringStripWS(StringMid($inhalt,34,30),3)
$feld[3] = StringStripWS(StringMid($inhalt,64,30),3)
$feld[4] = asc(StringMid($inhalt,126,1)) * 10 + asc(StringMid($inhalt,127,1))
$feld[5] = StringStripWS(StringMid($inhalt,94,4),3)
$feld[6] = $genre[asc(StringMid($inhalt,128,1))]
$feld[7] = StringStripWS(StringMid($inhalt,98,28),3)
endif
if $feld[1] <> "" and $feld[2] <> "" then $feld[0] = true
endif
endif
Return $feld
EndFunc ;_GetID3Tag_V1
Edit: weitere Möglichkeit - suche mal nach "_GetExtProperty()"