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 #?

Odpowiedzi:


186

Trzeci TagLib Sharp .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();

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();
                }
            }
        }

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();

+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.


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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.