Ver / editar datos ID3 para archivos MP3

152

¿Cuál es una manera rápida y fácil de ver y editar etiquetas ID3 (artista, álbum, etc.) usando C #?

Mag Roader
fuente

Respuestas:

186

Lanzamiento de TagLib Sharp .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Luke
fuente
1
¿Alguien puede decirme cómo configurar la propiedad del artista? Hay muchas propiedades relacionadas (FirstArtist, Artist, JointedArtists, FirstPerformer) y casi todas son de solo lectura o están en desuso ...
Laserson
3
Un poco tarde, pero puede agregar los artistas / artistas de la siguiente manera: mp3.Tag.Performers = new string [] {"Performer 1", "Performer 2", "Performer 3"};
nokturnal
Impresionante biblioteca. Lo usé para copiar etiquetas id3.
Ronnie Overby el
¿Esta biblioteca admite etiquetas ID3v2 modernas? El fragmento de Simucal sugiere que no (a menos que él haya tomado parte de él).
James
TagLib es GPL. Esta no es una respuesta apropiada aquí.
Sean O'Neil
65

TagLib Sharp es bastante popular.

Como nota al margen, si desea echar un vistazo rápido y sucio para hacerlo usted mismo ... aquí hay un fragmento de C # que encontré para leer la información de la etiqueta de un 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
fuente
12
Eso es solo para ID3v1. v2 tiene otra estructura, está al comienzo del archivo (en oposición a v1 que estaba al final) y tiene una longitud variable (v1 siempre es de 128 bytes).
jishi
Es una solución muy larga y no está optimizada. stackoverflow.com/a/4361634/1395101
Amin Ghaderi
Encoding.Defaultpuede ser reemplazado con Encoding.UTF8. Para obtener más información, visite: gigamonkeys.com/book/practical-an-id3-parser.html
Mirjalal
25

UltraID3Lib ...

Tenga en cuenta que UltraID3Lib ya no está oficialmente disponible y, por lo tanto, ya no se mantiene. Vea los comentarios a continuación para ver el enlace a un proyecto de Github que incluye 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();
Mate
fuente
+1 Esta es la mejor biblioteca con diferencia, ya que 'UltraID3Lib es compatible con la mayoría de los setenta y cuatro tipos de marcos especificados en ID3 v2.3', así como con las primeras etiquetas ID3v1. La mejor respuesta.
James
+1 Esto es mucho más fácil de usar y una forma más sencilla de tratar con metadatos mp3
amrswalha
1
Utilicé esto recientemente y funciona de maravilla y no carga el proceso. Es rápido y fácil de usar y representa casi todas las etiquetas que existen en las versiones ID3 1 y 2 (puede usar ambas a la vez o solo una u otra). Hace mucho más de lo que necesitaba. También tenía un archivo de ayuda muy completo. Se lo recomendaré a todos.
1934286
Saludos; El enlace es inaccesible. ¿Se descontinúa UltraID3Lib?
Adiós
Encontré una versión de UltraID3Lib incluida en este proyecto de GitHub. github.com/clementboone/MyWindowsMediaPlayer El proyecto contiene una carpeta UltraID3Lib que es el contenido completo del archivo zip que solía estar disponible.
Matt
15

TagLib Sharp tiene soporte para leer etiquetas ID3.

tslocum
fuente
Comencé a usar TagLib Sharp según la recomendación aquí y funcionó muy bien para mi aplicación (que era de solo lectura de información de MP3).
greg7gkb
Vea la respuesta de Hewins a continuación para la nueva ubicación del enlace
Conrad Frix
2

Envolví la biblioteca del decodificador de mp3 y la puse a disposición de los desarrolladores de .net. Lo puedes encontrar aquí:

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

Se incluyen las muestras para convertir archivos mp3 a PCM y leer etiquetas ID3.

Daniel Mošmondor
fuente
1

ID3.NET implementó ID3v1.xy ID3v2.3 y admite operaciones de lectura / escritura en la sección ID3 en archivos MP3. También hay un paquete NuGet disponible.

0x8BADF00D
fuente