Laden...

Bibliothek für ID3v1/ID3v2 Tags in mp3-Dateien

Erstellt von marsgk vor 17 Jahren Letzter Beitrag vor 12 Jahren 32.399 Views
M
marsgk Themenstarter:in
1.439 Beiträge seit 2005
vor 17 Jahren
Bibliothek für ID3v1/ID3v2 Tags in mp3-Dateien

Hallo,
ich hab mir für ein kleineres Projekt eine Bibliothek zum lesen und schreiben von ID3v1 bzw. ID3v2 Tags geschrieben.
Über Anregungen/Wünsche/Fehler würde ich mich freuen.

Hier ein kleines Beispiel zur Benutzung der Bibiothek.

Die Dokumentation ist in der Zip-Datei enthalten.


using ID3TagLib;

...

// Tags aus der Datei "x.mp3" laden.
// Die extrahierten Tags werden, sofern vorhanden in file.ID3v1Tag bzw.
// file.ID3v2Tag gespeichert, sonst werden diese Properties auf null gesetzt.
ID3File file = new ID3File("x.mp3");

// ID3v1-Tags sind recht einfach aufgebaut, haben eine fixe Größe
// und nur einige Felder wie Album, Interpret, etc.
// Die Klasse ID3v1Tag repräsentiert diese Art von Tags und hat 
// entsprechende String-Properties um diese Felder zu manipulieren.
ID3v1Tag v1Tag = file.ID3v1Tag;
if (v1Tag != null) {
	Console.WriteLine("Album: {0}", v1Tag.Album);
}

// ID3v2-Tags sind wesentlich komplizierter aufgebaut. Sie haben keine feste Größe 
// oder bestimmte Felder, sondern sind als ein Containerformat konzipiert. Frames,
// von denen ein ID3v2-Tag beliebig viel haben kann, speichern den eigentlichen Inhalt.
// Der Aufbau und die Bedeutung des Inhalts der Frames werden durch eine ID bestimmt.
// So speichert ein Frame mit der ID "TALB" das Album als Text. Die meisten Frames
// sind TextFrames(Album, Interpret, Titel, etc.) es gibt aber auch kompliziertere Frames
// die Bilder Speichern("APIC").
// Die wichtigste Eigenschaft der Klasse ID3v2Tag ist das Frames.Property. Dieses liefert
// eine FramesCollection, die die enthaltenen Frames speichert. Auf die Frames kann per Index
// oder über die ID zugegriffen werden.
ID3v2Tag v2Tag = file.ID3v2Tag;
if (v2Tag == null) {
	// keiner vorhanden, neuen anlegen
	v2Tag = new ID3v2Tag();
	file.ID3v2Tag = v2Tag;
}
// Frame mit der ID "TALB"(=FrameFactory.AlbumFrameId) im Tag suchen.
// Liefert null, wenn kein Frame mit der ID "TALB" vorhanden ist.
TextFrame f = v2Tag.Frames[FrameFactory.AlbumFrameId] as TextFrame;
if (f == null) {
	// neuen Frame anlegen. FrameFactory.GetFrame liefert den passenden
	// Frame zur ID. Also für z.B. "TALB" einen TextFrame, for "APIC" 
	// einen PictureFrame.
	f = FrameFactory.GetFrame(FrameFactory.AlbumFrameId) as TextFrame;
	v2Tag.Frames.Add(f);
}
f.Text = "Album";

// überschreibt in "x.mp3" enthaltene tags mit den Aktuellen.
// Wenn die Properties file.ID3v2Tag bzw. file.ID3v1Tag null sind werden
// in "x.mp3" enthaltene Tags gelöscht.
file.Save("x.mp3");

H
1 Beiträge seit 2009
vor 15 Jahren

danke anke,

hat mir geholfen :>

Das Leben ist kein Ponyhof,

visit: www.pupe.de

M
2 Beiträge seit 2009
vor 14 Jahren

Hi,

da ich im Moment bei meinem ersten größeren Projekt sehr viel mit Meta Daten arbeiten muss, bin ich auf meiner Suche zu ID3 Tags in MP3s zum Glück zügig zu diesem Beitrag gekommen.

Da ich allerdings auch gerne auf Flac Files zugreifen würde welche ja ebenso ID3 Tags verwenden, frage ich mich ob deine Bibliothek ebenso auf auf Flac files zugreifen kann oder ob sie komplett auf MP3 beschränkt ist.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo Mike Lowrey,

wenn die Header-Informationen die gleichen sind, wie bei MP3, sollte es keine Rolle spielen, dass die eigentlichen Nutzdaten unterschiedlich sind. Aber bevor wir lange spekulieren, kannst du es doch einfach ausprobieren. 😃

herbivore

M
marsgk Themenstarter:in
1.439 Beiträge seit 2005
vor 14 Jahren

Flac-Dateien verwenden leider einen anderen Metadaten-Container.

M
2 Beiträge seit 2009
vor 14 Jahren

Hi,

hab's heute mal getestet(darauf hätte man auch selber kommen können^^) und hat leider nicht geklappt.

Nun gut dann heißt's weiter suchen!

Edit: Oh Antwort ganz überlesen! Tja da hat man das Problem.

E
26 Beiträge seit 2004
vor 14 Jahren

hi,

es gibt 2 fette ID3 Tag Projekte. Es lohnt sich nicht sowas selber zu machen.

http://id3tag.codeplex.com/

wahrscheinlich noch besser das vom Mono Project, weil es auch mehr als
MP3 kann.

EDIT von winSharp93: Link zur TagLibSharp Wiki entfernt, da Inhalt nun anstößig (möglicherweise durch gehackten Server)

Allerdings hat die Seite gerade Probleme. Hier sind ein paar Beispiele:

http://developer.novell.com/wiki/index.php/TagLib_Sharp:_Examples

elli

B
3 Beiträge seit 2009
vor 14 Jahren
ID3TagLib.Net

Hi,

das erste Projekt kenne ich ( ist von mir 😉 ) und kann dazu etwas sagen. Die
aktuelle Version unterstützt ID3v2.4 und ID3v2.3 mit ISO 8859 ( ANSI ) / UTF16 / UT8.
Ich habe das Projekt ins Leben gerufen, damit ich mich in das neue .NET 3.5
einarbeiten und praktische Erfahrung sammeln kann. Die Library selber ist mit
Unit Tests geprüft.

Das zweite Projekt kenne ich nicht. Wenn man auch andere Formate ausser ID3
lesen möchte, dann ist das bestimmt ein Vorteil.

Allgeimein habe ich gemerkt, dass es sehr schwierig ist eine "saubere" ID3 Kodierung zu finden. Die Player und die Encoder halten sich nicht immer an die Standarts. Gut ist das Programm Mp3Tag ( http://www.mp3tag.de/ ), weil es der Spezifikation sehr nahe kommt.

E
26 Beiträge seit 2004
vor 14 Jahren

Hi,

Ich habe das Projekt ins Leben gerufen, damit ich mich in das neue .NET 3.5

Cool zu hören. Ich bin noch am überlegen auf welches ich umstellen will, denn ich will
V 2.4 benutzen wegen den GAIN Tags. Den Weg den MP3Gain geht, alle MP3 Frame Header zur verdändern gefällt mir nicht.

Allgeimein habe ich gemerkt, dass es sehr schwierig ist eine "saubere" ID3 Kodierung zu finden.

Jopp, da hast Du ja das Grundproblem von Standards schon mitbekommen. Ich plage mich mit sowas schon seit 20 Jahren rum. Man muß es allen recht machen. Pochen auf Standards und die Regeln nützt nichts. Tolerant sein und alles unterstützen 😃., schlicht kompatibel sein.

elli

B
3 Beiträge seit 2009
vor 14 Jahren

Hallo,

auf GAIN tags bin ich bisher nicht gestossen. Hast Du dazu einen guten Link ?
Müsste man mal prüfen, ob man die Lib erweitern kann.

Aber Du hast Recht.. Spezifikation und populäre Implementierungen sind immer zwei paar Schuhe. Meine Library unterstützt auch nicht alle spezifizierten Frames, aber die wenigsten davon habe ich bisher auch real gesehen.

Apple erfindet auch gerne eigene 😉

bye
Bjoern

D
1 Beiträge seit 2011
vor 12 Jahren
Erweiterte TAGs

Hallo,

danke für die DLL, funktioniert wirklich gut. Schreiben,lesen von ID3 Tags habe ich soweit hinbekommen. Jetzt habe ich noch 2 Fragen zu der DLL.

  1. Kann man sich auch eigene Tags erstellen? Z.B bräuchte ich einen Tag für ISBN.
  2. Wie kann man bei den Lyrics die Sprache hinterlegen?
5
37 Beiträge seit 2010
vor 12 Jahren

Hallo erstmal...

alos die ID3TagLib funktionirt soweit ganz gut..

einziges Problem was mir aufgefallen ist...
wie komme ich an das Genre Frame... (ID3V2)

Es funktioniert nicht auf dem gleichen Wege wie z.B. Artist, Title, comment etc...

wie kann ich denn auf anderen Wege an die Genre ran kommen?