VB.NET ID3v2-Tag entfernen

  • VB.NET

Es gibt 14 Antworten in diesem Thema. Der letzte Beitrag () ist von simpelSoft.

    VB.NET ID3v2-Tag entfernen

    Hey,

    gibt es eine Möglichkeit, einen Mp3-ID3v2 Tag zu entfernen?
    Wie es mit ID3v1 funktioniert, weiss ich bereits, aber wie funktioniert das bei ID3v2? Bei ID3v1 müssen ja nur 126 Bytes abgezogen werden. Könnte mir da jemand eine kleine Funktion geben?

    Danke im Vorraus!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jannis22“ ()

    Jannis22 schrieb:

    müssen ja nur 126 Bytes abgezogen werden.
    Ersetze in Deinem Code die 128 durch eine 126 und wiederhole den Vorgang.
    Wo genau liegen denn die Daten dieses Tags?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Jannis22 schrieb:

    wo sich die Daten befinden?
    an welcher Byte-Position in der Datei.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    So liest du die Größe des kompletten ID3-Tags aus(Header plus Tags). Wenn ein Extended-Header da ist, sind die ersten 4 Bytes des Ex...-Headers die Größe. Im eigendlichem Header das 6.Byte, musst du schauen ob das 7. Bit gesetzt ist(%1%%%%%%), wenn ja gibt es einen Ex...-Header, also dessen größe nicht vergessen zu addieren.

    VB.NET-Quellcode

    1. .
    2. Using fs As New FileStream("Filename", FileMode.Open, FileAccess.Read)
    3. Using br As New BinaryReader(fs)
    4. Dim b() As Byte = br.ReadBytes(10)
    5. Dim tagsize As Integer = (b(9) And &HFF) Or ((b(8) And &HFF) << 7) Or ((b(7) And &HFF) << 14) Or ((b(6) And &HFF) << 21) + 10
    6. Dim haveExHeader As Boolean = If((b(5) And &H40) <> 0, True, False)
    7. End Using
    8. End Using


    Schau auch in die Doku!
    id3.org/id3v2.3.0#ID3v2_header

    Dort hättest du erfahren, das der Header 10 Bytes lang ist, wobei mit den letzen 4 Bytes die Größe ermittelt wird.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Murdock“ ()

    Du kansst die länge des Tags auslesen, wenn dann kein Extended Header da ist, schreibst du einfach die Bytes ab Tagsize(-1), sonst addierst du die Größe des Ex-Headers hinzu. Aber bedenke, das ab ID3V2.4 der Tag auch am Ende der Datei sein kann, vorm ID3V1(falls vorhanden), evtl sind auch APE Tags da. Dann musst du die Position des Tags ausfindig machen, und die Bytes ab position bis postion + länge entfernen. Wenn du mit C++ umgehen kannst, mach dir eine DLL, welche dir die Position des Tags rausgibt, mit .net dauert es sonst ewig, musste ich bei APE-Tags feststellen.
    Ich hab mal eine ganze Zeit mit den Tags herumprobiert.
    Definitionen auf id3.org
    Dabei wird man feststellen, dass man sich nicht nur intensiv mit dem Aufbau der Tags in den verschiedenen Versionen (v1, v1.1, v2, v2.1-v2.4) befassen muss, sondern auch mit ihrer dynamischen Lage in der mp3-Datei. So kann z.B. per Definition eine Lücke zwischen den Tags existieren, die Sound-Nutzdaten enthält (z.B. bei iTunes-Downloads). Auch die mp3-Struktur als solche mit den checksums in den einzelnen Frames erfordert dringend Beachtung.
    Man kann sich seine mp3-Datei als recht leicht zerschiessen.

    Wenn Du slbst programmieren willst, kann ich die oben schon zitierte TagLib-Sharp nur empfehlen. Es gab (gibt?) von HundredMilesSoftware die UltraId3Lib, aber da gibt's keinen Support mehr, die Website ist nicht mehr auffindbar.

    Aber schau' Dir doch einmal mp3Tag an, dies ist für mich das Tool der Wahl. Kann auch recht einfach für einen Batch-Ablauf verwendet werden, wenn Du in mehr als ein paar Dateien Tags verändern/entfernen möchtest.

    Selbst programmieren ist sicher machbar, aber der Weg dahin ist dornig ...
    Okay, hat funktioniert!!!! :thumbsup: :thumbsup:

    Hier der Code:

    VB.NET-Quellcode

    1. Dim sFile As String = "C:\Datei.mp3"
    2. mp3 As TagLib.File = TagLib.File.Create(sFile)
    3. mp3.RemoveTags(TagTypes.AllTags)
    4. mp3.Save()
    5. mp3.Dispose()

    ( Alle Tags werden entfernt)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Jannis22“ ()