hallo liebe gemeinde
arbeiten mit taglib ist nicht so einfach, da es meiner meinung eine ziemlich schwachstelle hat.
sobald ein file-object erstellt wurde, wird sowohl der tag von ID3v1 und ID3v2 gelesen.
ich lade also in eine varable den tag von ID3v1, in einer anderen den tag von ID3v2
jetzt bearbeite ich die tags. wahlweise ID3v1 und/oder ID3v2.
speicher ich jetzt ID3v1 wird auch der zuvor gelesene ID3v2 geschrieben und umgekehrt.
das heißt der eine Tag bügelt immer über den anderen Tag drüber.
es gibt zwar eine möglichkeit einen tag zu entfernen wie hier beschrieben:
stackoverflow.com/questions/85…b-sharp-saving-only-id3v2
das betrifft aber nur tags, die hinzugefügt wurden.
ich habe mir in meiner verzweiflung eine routine gebastelt, die das problem behebt:
eigentlich ist es so:
ich öffne Tagv1 & TagV2
ich bearbeite beide Tags und/oder einen Tag.
TagV1 wird gespeichert und geschlossen.
TagV2 wird erneut geöffnet und der neue Tag hinein kopiert.
TagV2 wird gespeichert und geschlossen.
das problem hatte ich als ich vor monaten mit taglib angefangen habe und habe noch keine bessere möglichkeit gefunden.
ich bin etwas unglücklich mit meiner routine, obwohl sie funktioniert.
weiß jmd rat ?
oder habe ich iwas übersehen oder verstehe ich es nur nicht ?
arbeiten mit taglib ist nicht so einfach, da es meiner meinung eine ziemlich schwachstelle hat.
sobald ein file-object erstellt wurde, wird sowohl der tag von ID3v1 und ID3v2 gelesen.
ich lade also in eine varable den tag von ID3v1, in einer anderen den tag von ID3v2
jetzt bearbeite ich die tags. wahlweise ID3v1 und/oder ID3v2.
speicher ich jetzt ID3v1 wird auch der zuvor gelesene ID3v2 geschrieben und umgekehrt.
das heißt der eine Tag bügelt immer über den anderen Tag drüber.
es gibt zwar eine möglichkeit einen tag zu entfernen wie hier beschrieben:
stackoverflow.com/questions/85…b-sharp-saving-only-id3v2
das betrifft aber nur tags, die hinzugefügt wurden.
ich habe mir in meiner verzweiflung eine routine gebastelt, die das problem behebt:
VB.NET-Quellcode
- Public Sub ID3SaveTag(Optional ByRef mp3v1 As TagLib.File = Nothing,
- Optional ByRef mp3v2 As TagLib.File = Nothing,
- Optional ByVal newID3v2 As TagLib.Tag = Nothing,
- Optional showInfo As Boolean = True)
- Dim ID3v2 As TagLib.Tag
- If mp3v1 IsNot Nothing Then
- ID3v1SaveTag(mp3v1, showInfo) 'Tagv1 speichern
- End If
- CloseMP3(mp3v1) 'File-ObjectV1 schließen
- If mp3v2 IsNot Nothing Then
- Dim fInfo As New IO.FileInfo(mp3v2.Name)
- ID3v2GetTag(fInfo, mp3v2, ID3v2) 'Tagv2 lesen
- ID3CopyTag(newID3v2, ID3v2) 'zuvor übergebenen neuen Tag in den zuvor geöffneten Tag kopieren.
- ID3v2SaveTag(mp3v2,,, showInfo) 'Tagv2 speichern
- End If
- CloseMP3(mp3v2) 'File-ObjectV2 schließen
- ID3v2 = Nothing
- End Sub
eigentlich ist es so:
ich öffne Tagv1 & TagV2
ich bearbeite beide Tags und/oder einen Tag.
TagV1 wird gespeichert und geschlossen.
TagV2 wird erneut geöffnet und der neue Tag hinein kopiert.
TagV2 wird gespeichert und geschlossen.
das problem hatte ich als ich vor monaten mit taglib angefangen habe und habe noch keine bessere möglichkeit gefunden.
ich bin etwas unglücklich mit meiner routine, obwohl sie funktioniert.
weiß jmd rat ?
oder habe ich iwas übersehen oder verstehe ich es nur nicht ?