Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
In C#, come potrei fare a leggere i tag id3?
|
|
andrea.b89 (Ex-Member)
Pro
Messaggi: 129
Iscritto: 03/03/2009
|
Mah, di solito i tag ID3 nei file mp3 sono inseriti negli ultimi 128 byte del file.
Quindi il consiglio è di posizionarti alla fine del file.
"Tornare" indietro di 128 byte, e poi leggere fino alla fine del file.
Poi ovviamente trasformi questi 128 byte in stringa e dopo la sconponi.
Magari se non sai esattamente come essa è composta per prima cosa la stampi e poi ti studi un modo per spezzarla nelle varie componenti.
Spero di essere stato chiaro e di aiuto
|
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Postato originariamente da andrea.b89:
Mah, di solito i tag ID3 nei file mp3 sono inseriti negli ultimi 128 byte del file.
Quindi il consiglio è di posizionarti alla fine del file.
"Tornare" indietro di 128 byte, e poi leggere fino alla fine del file.
Poi ovviamente trasformi questi 128 byte in stringa e dopo la sconponi.
Magari se non sai esattamente come essa è composta per prima cosa la stampi e poi ti studi un modo per spezzarla nelle varie componenti.
Spero di essere stato chiaro e di aiuto |
Ok, ci sono.. ma come faccio a leggere gli ultimi 128 byte del file? |
|
andrea.b89 (Ex-Member)
Pro
Messaggi: 129
Iscritto: 03/03/2009
|
Ovviamente devi sapere come si leggono in file in generale.
In questo caso specifico devi fare
Codice sorgente - presumibilmente C# |
FileStream fs = new FileStream (percorso, FileMode. Open); // byte[] buf = new byte[128 ]; //buffer di lettura fs.Seek(-128, SeekOrigin.End); //ti posizioni alla fine del file - 128 byte fs.Read(buf,0, 128); //leggi 128 byte che vengono salvati sul vettore di byte chiamato buf fs.Close();
|
Percorso è solo indicativo, spetterà a te inerire il path corretto
A questo punto dovrai codificare il vettore di byte in stringa e poi spezzarla
Spero di essere stato chiaro e di aiuto
Ultima modifica effettuata da andrea.b89 il 24/03/2009 alle 23:01 |
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Ok, ci siamo quasi
Quando converto "buf" in stringa, la stringa contiene "System.Byte[]".
Mi era già successo.. ma non ricordo come si risolve oubt:
|
|
andrea.b89 (Ex-Member)
Pro
Messaggi: 129
Iscritto: 03/03/2009
|
Probabilmente perchè hai usato il metodo ToString().
Ciò che devi fare è codificare il vettore di byte, non convertirlo come avviene con la chiamata a ToString().
Per la codifica fai così :
Codice sorgente - presumibilmente C# |
// Codifichi l'array di byte in stringa Encoding enc = new ASCIIEncoding ();string id3TagStr= enc.GetString(buf);
|
Spero di esserti stato di aiuto
Ultima modifica effettuata da andrea.b89 il 25/03/2009 alle 16:01 |
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Grazie =P
Però se faccio visualizzare il contenuto, mi visualizza "TAG" o solo il titolo.. why?
|
|
andrea.b89 (Ex-Member)
Pro
Messaggi: 129
Iscritto: 03/03/2009
|
posta il codice che usi.
A me funziona bene, magari hai fatto qualche errore.
|
|
Luk3 (Ex-Member)
Guru
Messaggi: 615
Iscritto: 16/08/2008
|
Codice sorgente - presumibilmente C++ |
private void button1_Click(object sender, EventArgs e) { OpenFileDialog open = new OpenFileDialog(); open.Filter = "File Musica MP3|*.mp3"; if (open.ShowDialog() == DialogResult.OK) { textBox1.Text = open.FileName; FileStream fs = new FileStream(textBox1.Text.ToString(), FileMode.Open); byte[] buf = new byte[128]; fs.Seek(-128, SeekOrigin.End); fs.Read(buf, 0, 128); Encoding enc = new ASCIIEncoding(); string info = enc.GetString(buf); fs.Close(); textBox2.Text = info; } }
|
Ultima modifica effettuata da Luk3 il 26/03/2009 alle 17:47 |
|