Ver / editar dados ID3 para arquivos MP3

152

Qual é uma maneira rápida e fácil de visualizar e editar tags ID3 (artista, álbum etc.) usando C #?

Mag Roader
fonte

Respostas:

186

Thirding TagLib afiada .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Lucas
fonte
1
Alguém pode me dizer como definir a propriedade Artist? Há uma grande quantidade de propriedades relacionadas (FirstArtist, Ocupação Artística, JointedArtists, FirstPerformer) e quase todos eles são somente leitura ou obsoleto ...
Laserson
3
Um pouco tarde, mas você pode adicionar artistas / artistas da seguinte forma: mp3.Tag.Performers = new string [] {"Artista 1", "Artista 2", "Artista 3"};
Nokturnal
Biblioteca incrível. Eu usei para copiar tags id3.
Ronnie Overby
Esta biblioteca suporta tags ID3v2 modernas? O trecho de Simucal sugere que não (a menos que ele tenha participado).
18713 James James
TagLib é GPL. Esta dificilmente é uma resposta apropriada aqui.
Sean O'Neil
65

O TagLib Sharp é bastante popular.

Como uma observação lateral, se você quiser dar uma olhada rápida e suja em fazer você mesmo ... aqui está um trecho de C # que encontrei para ler as informações de tags de um 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
fonte
12
Isso é apenas para ID3v1. A v2 tem outra estrutura, está no início do arquivo (ao contrário da v1, que estava no final) e tem comprimento variável (a v1 é sempre 128 bytes).
11118
É uma solução muito longa e não otimizada. stackoverflow.com/a/4361634/1395101
Amin Ghaderi
Encoding.Defaultpode ser substituído por Encoding.UTF8. Para obter mais informações, visite: gigamonkeys.com/book/practical-an-id3-parser.html
Mirjalal
25

UltraID3Lib ...

Esteja ciente de que o UltraID3Lib não está mais disponível oficialmente e, portanto, não é mais mantido. Veja os comentários abaixo para o link para um projeto do Github que inclui esta biblioteca

//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
fonte
+1 Esta é a melhor biblioteca de longe - já que o 'UltraID3Lib suporta a maioria dos setenta e quatro tipos de quadros especificados no ID3 v2.3', bem como as tags ID3v1 anteriores. Melhor resposta.
18713 James
+1 Isto é muito mais fácil de usar e mais simples maneira de lidar com mp3 metadados
amrswalha
1
Eu usei isso recentemente e funciona muito bem e não sobrecarrega o processo. É rápido e fácil de usar e responde por quase todas as tags existentes nas versões 1 e 2 do ID3 (você pode usar as duas ao mesmo tempo ou apenas uma ou outra). Faz muito mais do que eu precisava. Ele também tinha um arquivo de ajuda muito abrangente. Vou recomendar isso a todos.
1934286
Saudações; O link está inacessível. O UltraID3Lib foi descontinuado?
Adeus
Encontrei uma versão do UltraID3Lib incluída neste projeto do GitHub. github.com/clementboone/MyWindowsMediaPlayer O projeto contém uma pasta UltraID3Lib que é o conteúdo completo do arquivo zip que costumava estar disponível.
Matt
15

O TagLib Sharp tem suporte para leitura de tags ID3.

tslocum
fonte
Comecei a usar o TagLib sharp com base na recomendação aqui e funcionou muito bem para o meu aplicativo (que era somente leitura de informações sobre MP3).
Greg7gkb 22/10/08
Veja a resposta de hewins abaixo para o novo local do link
Conrad Frix
2

Enrolei a biblioteca de decodificadores de mp3 e a disponibilizei para desenvolvedores .net. Você pode encontrá-lo aqui:

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

Estão incluídos os exemplos para converter arquivos mp3 em PCM e ler tags ID3.

Daniel Mošmondor
fonte
1

O ID3.NET implementou ID3v1.xe ID3v2.3 e suporta operações de leitura / gravação na seção ID3 em arquivos MP3. Há também um pacote NuGet disponível.

0x8BADF00D
fonte