Anzeigen / Bearbeiten von ID3-Daten für MP3-Dateien

152

Was ist eine schnelle und einfache Möglichkeit, ID3-Tags (Interpreten, Alben usw.) mit C # anzuzeigen und zu bearbeiten?

Mag Roader
quelle

Antworten:

186

Thirding TagLib Sharp .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Luke
quelle
1
Kann mir jemand sagen, wie man das Eigentum eines Künstlers festlegt? Es gibt viele verwandte Eigenschaften (FirstArtist, Artist, JointedArtists, FirstPerformer) und fast alle von ihnen sind schreibgeschützt oder veraltet ...
Laserson
3
Ein bisschen spät, aber Sie können die Darsteller / Künstler wie folgt hinzufügen: mp3.Tag.Performers = new string [] {"Performer 1", "Performer 2", "Performer 3"};
Nokturnal
Tolle Bibliothek. Ich habe es verwendet, um ID3-Tags zu kopieren.
Ronnie Overby
Unterstützt diese Bibliothek moderne ID3v2-Tags? Simucals Ausschnitt schlägt nicht vor (es sei denn, er hat gerade daran teilgenommen).
James
TagLib ist GPL. Dies ist hier kaum eine angemessene Antwort.
Sean O'Neil
65

TagLib Sharp ist sehr beliebt.

Als Randnotiz, wenn Sie einen kurzen und schmutzigen Blick darauf werfen möchten, es selbst zu tun. Hier ist ein C # -Schnipsel, den ich gefunden habe, um die Tag-Informationen eines MP3s zu lesen.

class MusicID3Tag

{

    public byte[] TAGID = new byte[3];      //  3
    public byte[] Title = new byte[30];     //  30
    public byte[] Artist = new byte[30];    //  30 
    public byte[] Album = new byte[30];     //  30 
    public byte[] Year = new byte[4];       //  4 
    public byte[] Comment = new byte[30];   //  30 
    public byte[] Genre = new byte[1];      //  1

}

string filePath = @"C:\Documents and Settings\All Users\Documents\My Music\Sample Music\041105.mp3";

        using (FileStream fs = File.OpenRead(filePath))
        {
            if (fs.Length >= 128)
            {
                MusicID3Tag tag = new MusicID3Tag();
                fs.Seek(-128, SeekOrigin.End);
                fs.Read(tag.TAGID, 0, tag.TAGID.Length);
                fs.Read(tag.Title, 0, tag.Title.Length);
                fs.Read(tag.Artist, 0, tag.Artist.Length);
                fs.Read(tag.Album, 0, tag.Album.Length);
                fs.Read(tag.Year, 0, tag.Year.Length);
                fs.Read(tag.Comment, 0, tag.Comment.Length);
                fs.Read(tag.Genre, 0, tag.Genre.Length);
                string theTAGID = Encoding.Default.GetString(tag.TAGID);

                if (theTAGID.Equals("TAG"))
                {
                    string Title = Encoding.Default.GetString(tag.Title);
                    string Artist = Encoding.Default.GetString(tag.Artist);
                    string Album = Encoding.Default.GetString(tag.Album);
                    string Year = Encoding.Default.GetString(tag.Year);
                    string Comment = Encoding.Default.GetString(tag.Comment);
                    string Genre = Encoding.Default.GetString(tag.Genre);

                    Console.WriteLine(Title);
                    Console.WriteLine(Artist);
                    Console.WriteLine(Album);
                    Console.WriteLine(Year);
                    Console.WriteLine(Comment);
                    Console.WriteLine(Genre);
                    Console.WriteLine();
                }
            }
        }
mmcdole
quelle
12
Das ist nur für ID3v1. v2 hat eine andere Struktur, sie befindet sich am Anfang der Datei (im Gegensatz zu v1 am Ende) und hat eine variable Länge (v1 ist immer 128 Byte).
Jishi
Es ist eine viel zu lange Lösung und nicht optimiert. stackoverflow.com/a/4361634/1395101
Amin Ghaderi
Encoding.Defaultkann durch ersetzt werden Encoding.UTF8. Weitere Informationen finden Sie unter: gigamonkeys.com/book/practical-an-id3-parser.html
Mirjalal
25

UltraID3Lib ...

Beachten Sie, dass UltraID3Lib nicht mehr offiziell verfügbar ist und daher nicht mehr gewartet wird. In den Kommentaren unten finden Sie den Link zu einem Github-Projekt, das diese Bibliothek enthält

//using HundredMilesSoftware.UltraID3Lib;
UltraID3 u = new UltraID3();
u.Read(@"C:\mp3\song.mp3");
//view
Console.WriteLine(u.Artist);
//edit
u.Artist = "New Artist";
u.Write();
Matt
quelle
+1 Dies ist bei weitem die beste Bibliothek - da 'UltraID3Lib fast alle vierundsiebzig Arten von Frames unterstützt, die in ID3 v2.3 angegeben sind' sowie die frühen ID3v1-Tags. Beste Antwort.
James
+1 Dies ist viel einfacher zu bedienen und einfacher mit MP3-Metadaten
umzugehen
1
Ich habe dies kürzlich verwendet und es funktioniert fantastisch und belastet den Prozess nicht. Es ist schnell und einfach zu bedienen und berücksichtigt nahezu jedes Tag, das in den ID3-Versionen 1 und 2 vorhanden ist (Sie können beide gleichzeitig oder nur das eine oder andere verwenden). Es macht weit mehr als ich brauchte. Es hatte auch eine sehr umfassende Hilfedatei. Ich werde es jedem empfehlen.
1934286
Schöne Grüße; Link ist nicht zugänglich. Wird UltraID3Lib eingestellt?
Auf Wiedersehen
Ich habe eine Version von UltraID3Lib gefunden, die in diesem GitHub-Projekt enthalten ist. github.com/clementboone/MyWindowsMediaPlayer Das Projekt enthält einen UltraID3Lib-Ordner, der den vollständigen Inhalt der ZIP-Datei enthält, die früher verfügbar war.
Matt
15

TagLib Sharp unterstützt das Lesen von ID3-Tags.

tslocum
quelle
Ich habe angefangen, TagLib Sharp basierend auf der Empfehlung hier zu verwenden, und es hat für meine Anwendung (die nur MP3-Informationen enthält) hervorragend funktioniert.
Greg7gkb
Siehe hewins Antwort unten für den neuen
Linkstandort
2

Ich habe die MP3-Decoder-Bibliothek verpackt und sie für .net-Entwickler verfügbar gemacht. Sie finden es hier:

http://sourceforge.net/projects/mpg123net/

Enthalten sind die Beispiele zum Konvertieren von MP3-Dateien in PCM und zum Lesen von ID3-Tags.

Daniel Mošmondor
quelle
1

ID3.NET hat ID3v1.x und ID3v2.3 implementiert und unterstützt Lese- / Schreibvorgänge im Abschnitt ID3 in MP3-Dateien. Es gibt auch ein NuGet-Paket .

0x8BADF00D
quelle