Afficher / modifier les données ID3 pour les fichiers MP3


152

Quel est le moyen rapide et simple d'afficher et de modifier les tags ID3 (artiste, album, etc.) à l'aide de C #?

Réponses:


186

Tiers TagLib Sharp .

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

1
Quelqu'un peut-il me dire comment définir la propriété de l'artiste? Il existe de nombreuses propriétés connexes (FirstArtist, Artist, JointedArtists, FirstPerformer) et presque toutes sont en lecture seule ou obsolètes ...
— Laserson

3
Un peu tard, mais vous pouvez ajouter les interprètes / artistes par ce qui suit: mp3.Tag.Performers = new string [] {"Performer 1", "Performer 2", "Performer 3"};
— nokturnal

Bibliothèque géniale. Je l'ai utilisé pour copier les balises id3.
— Ronnie Overpar

Cette bibliothèque prend-elle en charge les balises ID3v2 modernes? L'extrait de Simucal suggère que non (à moins qu'il n'y ait juste participé).
— James

TagLib est GPL. Ce n'est guère une réponse appropriée ici.
— Sean O'Neil le

65

TagLib Sharp est assez populaire.

En remarque, si vous vouliez jeter un coup d'œil rapide et sale à le faire vous-même ... voici un extrait de code C # que j'ai trouvé pour lire les informations de balise d'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();
                }
            }
        }

12
Ce n'est que pour ID3v1. La v2 a une autre structure, elle est au début du fichier (par opposition à la v1 qui était à la fin) et a une longueur variable (la v1 est toujours de 128 octets).
— jishi

c'est une solution très trop longue et non optimisée. stackoverflow.com/a/4361634/1395101
— Amin Ghaderi

Encoding.Defaultpeut être remplacé par Encoding.UTF8. Pour plus d'informations, visitez: gigamonkeys.com/book/practical-an-id3-parser.html
— Mirjalal

25

UltraID3Lib ...

Sachez qu'UltraID3Lib n'est plus officiellement disponible et n'est donc plus maintenu. Voir les commentaires ci-dessous pour le lien vers un projet Github qui inclut cette bibliothèque

//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 C'est de loin la meilleure bibliothèque - puisque «UltraID3Lib prend en charge la plupart des soixante-quatorze types de trames spécifiés dans l'ID3 v2.3» ainsi que les balises ID3v1 précoces. Meilleure réponse.
— James

+1 C'est beaucoup plus facile à utiliser et un moyen plus simple de gérer les métadonnées mp3
— amrswalha

1
Je l'ai utilisé récemment et cela fonctionne à merveille et n'alourdit pas le processus. Il est rapide et facile à utiliser et prend en compte à peu près toutes les balises qui existent dans les versions ID3 1 et 2 (vous pouvez utiliser les deux à la fois ou juste l'une ou l'autre). Cela fait bien plus que ce dont j'avais besoin. Il avait également un fichier d'aide très complet. Je recommanderai ceci à tout le monde.
— 1934286

Salutations; Le lien est inaccessible. UltraID3Lib est-il abandonné?
— Au revoir le

J'ai trouvé une version d'UltraID3Lib incluse dans ce projet GitHub. github.com/clementboone/MyWindowsMediaPlayer Le projet contient un dossier UltraID3Lib qui est le contenu complet du fichier zip qui était auparavant disponible.
— Matt

15

TagLib Sharp prend en charge la lecture des balises ID3.


J'ai commencé à utiliser TagLib sharp sur la base de la recommandation ici et cela a très bien fonctionné pour mon application (qui était en lecture seule des informations MP3).
— greg7gkb

Voir la réponse de hewins ci-dessous pour le nouvel emplacement du lien
— Conrad Frix


1

ID3.NET a implémenté ID3v1.x et ID3v2.3 et prend en charge les opérations de lecture / écriture sur la section ID3 des fichiers MP3. Il y a aussi un paquet NuGet disponible.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.