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 #?

Roader Mag
la source

Réponses:

186

Tiers TagLib Sharp .

TagLib.File f = TagLib.File.Create(path);
f.Tag.Album = "New Album Title";
f.Save();
Luke
la source
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();
                }
            }
        }
mmcdole
la source
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();
Mat
la source
+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.

tslocum
la source
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
2

J'ai enveloppé la bibliothèque de décodeurs mp3 et l'ai rendue disponible pour les développeurs .net. Vous pouvez le trouver ici:

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

Inclus sont les exemples pour convertir un fichier mp3 en PCM et lire les balises ID3.

Daniel Mošmondor
la source
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.

0x8BADF00D
la source