ID3-Tags

  • Hi Leute, hab mich grad an ID3-Tags rangemacht, aber irgendwie funzt das nich so wie ich es wollte:
    Hier mein derzeitiger Stand:

    [autoit][/autoit][autoit][/autoit][autoit]

    $sFile = FileOpenDialog("Bitte MP3-Datei auswählen","","MP3-Dateien (*.mp3)")

    [/autoit][autoit][/autoit][autoit]

    $hFile = FileOpen($sFile,256)
    $sFileContent = FileRead($hFile)
    $ext = @extended

    [/autoit][autoit][/autoit][autoit]

    FileSetPos($hFile,$ext - 128,0)
    $sTag = FileRead($hFile)
    MsgBox(0,"",$sTag)
    FileClose($hFile)

    [/autoit][autoit][/autoit][autoit]

    If StringLeft($sTag,3) <> "TAG" Then
    MsgBox(48,"Fehler","Keine oder fehlerhafte TAG-Information gefunden!")
    FileClose($hFile)
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"Tag-Information-Raw",$sTag)

    [/autoit][autoit][/autoit][autoit]

    $sTagVerify = StringLeft($sTag,3)
    $sTag = StringTrimLeft($sTag,3)
    $sTagSongTitle = StringLeft($sTag,30)
    $sTag = StringTrimLeft($sTag,30)
    $sTagInterpret = StringLeft($sTag,30)
    $sTag = StringTrimLeft($sTag,30)
    $sTagAlbum = StringLeft($sTag,30)
    $sTag = StringTrimLeft($sTag,30)
    $sTagYear = StringLeft($sTag,4)
    $sTag = StringTrimLeft($sTag,4)
    $sTagComment = StringLeft($sTag,30)
    $sTag = StringTrimLeft($sTag,30)
    $sTagGenre = StringLeft($sTag,1)
    $sTag = StringTrimLeft($sTag,1)

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0,"Tag-Information","Titel: " & $sTagSongTitle & @LF & "Interpret: " & $sTagInterpret & @LF & "Album: " & $sTagAlbum & @LF & "Erscheinungsjahr: " & $sTagYear & @LF & "Kommentar: " & $sTagComment & @LF & "GenreIndex: " & $sTagGenre)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Problem ist, dass er mir das Anfangskürzel TAG richtig ausliest und den Titel auch, aber dananch ist schluss und ich weiß nicht warum -.-

    Wäre schön wenn einer den Fehler finden würde. .

  • Ich kann es im Moment zwar schlecht testen, halte es aber für unnötig.

    Das was Du ausliest ist ausschließlich das ID3Tag V1. Damit fehlen Dir mindestens die Info's, die ausschließlich im Tag V2.x stehen.
    Diese Info's auszulesen ist aber nicht mehr so einfach, da das TagV2 dynamisch in seiner Gesamtlänge, sowie der einzelnen Felder ist. Ich habe das auch schon einmal für V1 & V2 geschrieben, ist ein ziemlicher Aufwand. Nur gab es damals noch keine UDF dafür.

    Der Fehler könnte also an einem nicht komplett ausgefüllten V1-Tag liegen !

    Edit:

    Nun konnte ich es testen. Es liegt an der Null-Bytes mit denen fehlende Zeichen im Tag-V1 aufgefüllt werden.
    Hier ein Beispiel wie Du es umgehen könntest:

    Spoiler anzeigen
    [autoit]

    $sFile = FileOpenDialog("Bitte MP3-Datei auswählen","","MP3-Dateien (*.mp3)")

    [/autoit] [autoit][/autoit] [autoit]

    $hFile = FileOpen($sFile,0)
    $sFileContent = FileRead($hFile)
    $ext = @extended

    [/autoit] [autoit][/autoit] [autoit]

    $ret = FileSetPos($hFile,$ext - 128,0)
    $sTag = FileRead($hFile)

    [/autoit] [autoit][/autoit] [autoit]

    ; Null-Bytes durch Leerzeichen ersetzen
    $sTag = StringReplace($sTag, chr(00), " ")

    [/autoit] [autoit][/autoit] [autoit]

    FileClose($hFile)

    [/autoit] [autoit][/autoit] [autoit]

    If StringLeft($sTag,3) <> "TAG" Then
    MsgBox(48,"Fehler","Keine oder fehlerhafte TAG-Information gefunden!")
    FileClose($hFile)
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Tag-Information-Raw",$sTag)

    [/autoit] [autoit][/autoit] [autoit]

    $sTagVerify = StringStripWS(StringLeft($sTag,3),2)
    $sTag = StringTrimLeft($sTag,3)
    $sTagSongTitle = StringStripWS(StringLeft($sTag,30),2)
    $sTag = StringTrimLeft($sTag,30)
    $sTagInterpret = StringStripWS(StringLeft($sTag,30),2)
    $sTag = StringTrimLeft($sTag,30)
    $sTagAlbum = StringStripWS(StringLeft($sTag,30),2)
    $sTag = StringTrimLeft($sTag,30)
    $sTagYear = StringStripWS(StringLeft($sTag,4),2)
    $sTag = StringTrimLeft($sTag,4)
    $sTagComment = StringStripWS(StringLeft($sTag,30),2)
    $sTag = StringTrimLeft($sTag,30)
    $sTagGenre = StringStripWS(StringLeft($sTag,1),2)
    $sTag = StringTrimLeft($sTag,1)

    [/autoit] [autoit][/autoit] [autoit]

    MsgBox(0,"Tag-Information","Titel: " & $sTagSongTitle & @LF & "Interpret: " & $sTagInterpret & @LF & "Album: " & $sTagAlbum & @LF & "Erscheinungsjahr: " & $sTagYear & @LF & "Kommentar: " & $sTagComment & @LF & "GenreIndex: " & $sTagGenre)

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

    Einmal editiert, zuletzt von Micha_he (15. März 2010 um 13:55)