Просмотр / редактирование данных ID3 для файлов MP3


152

Какой быстрый и простой способ просматривать и редактировать теги ID3 (исполнитель, альбом и т. Д.) С помощью C #?

Ответы:


186

Thirding TagLib Sharp .

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

1
Кто-нибудь может сказать мне, как установить свойство Artist? Есть много связанных свойств (FirstArtist, Artist, JointedArtists, FirstPerformer), и почти все они доступны только для чтения или устарели ...
Laserson

3
Немного поздно, но вы можете добавить исполнителей / исполнителей следующим образом: mp3.Tag.Performers = new string [] {"Performer 1", "Performer 2", "Performer 3"};
Ночной

Потрясающая библиотека. Я использовал его для копирования тегов id3.
Ронни Оверби

Эта библиотека поддерживает современные теги ID3v2? Фрагмент Simucal предлагает не (если он только не принял участие).
Джеймс

TagLib - это GPL. Это вряд ли подходящий ответ здесь.
Шон О'Нил

65

TagLib Sharp довольно популярен.

В качестве примечания: если вы хотите быстро и грязно взглянуть на это самостоятельно ... вот фрагмент кода C #, который я нашел, чтобы прочитать информацию о тегах 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
Это только для ID3v1. v2 имеет другую структуру, она находится в начале файла (в отличие от v1, который был в конце) и имеет переменную длину (v1 всегда 128 байтов).
Джиши

это слишком длинное решение и не оптимизировано. stackoverflow.com/a/4361634/1395101
Амин Гадери

Encoding.Defaultможно заменить на Encoding.UTF8. Для получения дополнительной информации посетите сайт: gigamonkeys.com/book/practical-an-id3-parser.html
Мирьялал

25

UltraID3Lib ...

Имейте в виду, что UltraID3Lib больше не доступен официально и, следовательно, больше не поддерживается. См. Комментарии ниже для ссылки на проект Github, который включает эту библиотеку

//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 На сегодняшний день это лучшая библиотека - поскольку «UltraID3Lib поддерживает большинство всех семидесяти четырех типов кадров, указанных в ID3 ​​v2.3», а также ранние теги ID3v1. Лучший ответ.
Джеймс

+1 Это намного проще в использовании и более простой способ работы с метаданными mp3
amrswalha

1
Я использовал это недавно, и это работает потрясающе и не отягощает процесс. Он быстрый и простой в использовании и учитывает практически все теги, существующие в ID3 ​​версий 1 и 2 (вы можете использовать оба сразу или только один или другой). Это намного больше, чем мне нужно. Он также имел очень полный файл справки. Я буду рекомендовать это всем.
1934286

Приветствую; Ссылка недоступна. UltraID3Lib прекращен?
До свидания

Я нашел версию UltraID3Lib, включенную в этот проект GitHub. github.com/clementboone/MyWindowsMediaPlayer Проект содержит папку UltraID3Lib, которая является полным содержимым zip-файла, который раньше был доступен.
Мэтт

15

TagLib Sharp поддерживает чтение ID3-тегов.


Я начал использовать TagLib sharp, основываясь на этой рекомендации, и он отлично работал для моего приложения (которое было доступно только для чтения информации MP3).
greg7gkb

См. Ответ Хевинса ниже для нового местоположения ссылки
Conrad Frix


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.