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.