Przeglądaj / edytuj dane ID3 dla plików MP3

152

Jaki jest szybki i łatwy sposób przeglądania i edytowania tagów ID3 (wykonawcy, albumu itp.) Przy użyciu C #?

Mag Roader
źródło

Odpowiedzi:

186

Trzeci TagLib Sharp .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Łukasz
źródło
1
Czy ktoś może mi powiedzieć, jak ustawić właściwość Artist? Istnieje wiele powiązanych właściwości (FirstArtist, Artist, JointedArtists, FirstPerformer) i prawie wszystkie z nich są tylko do odczytu lub wycofane ...
Laserson
3
Trochę późno, ale możesz dodać wykonawców / artystów w następujący sposób: mp3.Tag.Performers = nowy ciąg [] {"Performer 1", "Performer 2", "Performer 3"};
nokturnal
Niesamowita biblioteka. Użyłem go do skopiowania tagów id3.
Ronnie Overby
Czy ta biblioteka obsługuje nowoczesne tagi ID3v2? Fragment Simucala sugeruje, że nie (chyba, że ​​po prostu wziął jego część).
James
TagLib jest objęty licencją GPL. To raczej nie jest właściwa odpowiedź.
Sean O'Neil
65

TagLib Sharp jest dość popularny.

Na marginesie, jeśli chciałbyś rzucić okiem na to, jak zrobić to sam, oto fragment kodu C #, który znalazłem, aby przeczytać informacje o tagach mp3.

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
źródło
12
To dotyczy tylko ID3v1. v2 ma inną strukturę, znajduje się na początku pliku (w przeciwieństwie do v1, który był na końcu) i ma zmienną długość (v1 ma zawsze 128 bajtów).
jishi
jest to bardzo długie rozwiązanie i niezoptymalizowane. stackoverflow.com/a/4361634/1395101
Amin Ghaderi,
Encoding.Defaultmożna zastąpić Encoding.UTF8. Więcej informacji można znaleźć na stronie: gigamonkeys.com/book/practical-an-id3-parser.html
Mirjalal
25

UltraID3Lib ...

Należy pamiętać, że UltraID3Lib nie jest już oficjalnie dostępny, a zatem nie jest już obsługiwany. Zobacz komentarze poniżej, aby uzyskać link do projektu Github, który zawiera tę bibliotekę

//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
źródło
+1 To zdecydowanie najlepsza biblioteka - ponieważ „UltraID3Lib obsługuje większość z siedemdziesięciu czterech typów ramek określonych w ID3 v2.3”, a także wczesne znaczniki ID3v1. Najlepsza odpowiedź.
James
+1 To znacznie łatwiejsze w użyciu i prostszy sposób radzenia sobie z metadanymi mp3
amrswalha
1
Użyłem tego niedawno i działa niesamowicie i nie obciąża procesu. Jest szybki i łatwy w użyciu i uwzględnia prawie każdy tag, który istnieje w wersjach ID3 1 i 2 (możesz używać obu jednocześnie lub tylko jednego lub drugiego). Robi o wiele więcej niż potrzebowałem. Miał również bardzo obszerny plik pomocy. Polecę to każdemu.
1934286
Pozdrowienia; Link jest niedostępny. Czy UltraID3Lib zostało wycofane?
Do widzenia,
Znalazłem wersję UltraID3Lib zawartą w tym projekcie GitHub. github.com/clementboone/MyWindowsMediaPlayer Projekt zawiera folder UltraID3Lib, który jest pełną zawartością pliku zip, który był wcześniej dostępny.
Matt
15

TagLib Sharp obsługuje odczytywanie tagów ID3.

tslocum
źródło
Zacząłem używać TagLib sharp na podstawie rekomendacji tutaj i działało świetnie dla mojej aplikacji (która była tylko do odczytu informacji MP3).
greg7gkb
Zobacz odpowiedź hewinsa poniżej dla nowej lokalizacji linku
Conrad Frix
2

Zapakowałem bibliotekę dekoderów mp3 i udostępniłem ją programistom .net. Znajdziesz go tutaj:

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

Dołączone są próbki do konwersji pliku mp3 na PCM i odczytu znaczników ID3.

Daniel Mošmondor
źródło
1

ID3.NET zaimplementował ID3v1.x i ID3v2.3 i obsługuje operacje odczytu / zapisu w sekcji ID3 w plikach MP3. Dostępny jest również pakiet NuGet .

0x8BADF00D
źródło