Visualizza / modifica i dati ID3 per i file MP3


152

Qual è un modo semplice e veloce per visualizzare e modificare i tag ID3 (artista, album, ecc.) Usando C #?

Risposte:


186

Terzo TagLib Sharp .

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

1
Qualcuno può dirmi come impostare la proprietà dell'artista? Ci sono molte proprietà correlate (FirstArtist, Artist, JointedArtists, FirstPerformer) e quasi tutte sono di sola lettura o deprecate ...
Laserson,

3
Un po 'in ritardo, ma è possibile aggiungere artisti / artisti come segue: mp3.Tag.Performers = new string [] {"Performer 1", "Performer 2", "Performer 3"};
notte del

Biblioteca fantastica. L'ho usato per copiare i tag id3.
Ronnie Overby il

Questa libreria supporta i moderni tag ID3v2? Lo snippet di Simucal suggerisce di no (a meno che non ne abbia appena preso parte).
James,

TagLib è GPL. Questa non è una risposta appropriata qui.
Sean O'Neil,

65

TagLib Sharp è piuttosto popolare.

Come nota a margine, se volevi dare una sbirciatina veloce e sporca a farlo da soli .. ecco uno snippet C # che ho trovato per leggere le informazioni sui tag di 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
Questo è solo per ID3v1. v2 ha un'altra struttura, è all'inizio del file (al contrario di v1 che era alla fine) e ha una lunghezza variabile (v1 è sempre 128 byte).
jishi,

è una soluzione troppo lunga e non ottimizzata. stackoverflow.com/a/4361634/1395101
Amin Ghaderi

Encoding.Defaultpuò essere sostituito con Encoding.UTF8. Per maggiori informazioni visita: gigamonkeys.com/book/practical-an-id3-parser.html
Mirjalal

25

UltraID3Lib ...

Tenere presente che UltraID3Lib non è più ufficialmente disponibile e pertanto non viene più mantenuto. Vedi i commenti qui sotto per il link a un progetto Github che include questa libreria

//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 Questa è di gran lunga la migliore libreria, poiché "UltraID3Lib supporta la maggior parte dei settantaquattro tipi di frame specificati in ID3 v2.3", nonché i primi tag ID3v1. Migliore risposta.
James,

+1 Questo è molto più facile da usare e un modo più semplice per gestire i metadati mp3
amrswalha,

1
L'ho usato di recente e funziona benissimo e non grava sul processo. È veloce e facile da usare e tiene conto di quasi tutti i tag esistenti nelle versioni ID3 1 e 2 (è possibile utilizzare contemporaneamente o solo l'uno o l'altro). Fa molto più del necessario. Aveva anche un file di aiuto molto completo. Lo consiglierò a tutti.
1934286,

Saluti; Il collegamento è inaccessibile. UltraID3Lib è sospeso?
Arrivederci

Ho trovato una versione di UltraID3Lib inclusa in questo progetto GitHub. github.com/clementboone/MyWindowsMediaPlayer Il progetto contiene una cartella UltraID3Lib che è il contenuto completo del file zip che era disponibile.
Matt

15

TagLib Sharp ha il supporto per la lettura di tag ID3.


Ho iniziato a utilizzare TagLib Sharp in base alla raccomandazione qui e ha funzionato benissimo per la mia applicazione (che era di sola lettura delle informazioni MP3).
greg7gkb,

Vedi la risposta di Hewins di seguito per la nuova posizione del collegamento
Conrad Frix,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.