I file MP3 possono includere tag ID3, che sono sezioni all'inizio o alla fine del file contenente i metadati che identificano la registrazione. Lo stesso formato tag ID3 ha diverse revisioni. Questo esempio descrive come leggere e scrivere da un file MP3 contenente il formato ID3 più semplice (versione ID3 1.0) mediante “accesso casuale a dati di file”, il che significa che legge e scrive in posizioni arbitrarie del file.
Un file MP3 contenente un tag della versione ID3 1 comprende i dati ID3 alla fine del fine, negli ultimi 128 byte.
Quando si accede a un file per l'accesso casuale di lettura/scrittura, è importante specificare
FileMode.UPDATE
come il parametro
fileMode
del metodo
open()
o
openAsync()
:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Ciò consente di eseguire sia la lettura sia la scrittura nel file.
All'apertura del file, è possibile impostare il puntatore
position
nei 128 byte di posizione prima della fine del file:
fileStr.position = file.size - 128;
Questo codice imposta la proprietà
position
in questo percorso nel file perché il formato ID3 v1.0 specifica che i dati del tag ID3 sono memorizzati negli ultimi 128 byte del file. La specifica indica sempre quanto segue:
-
I primi 3 byte del tag contengono la stringa
"TAG"
.
-
I successivi 30 caratteri contengono il titolo della traccia MP3, come una stringa.
-
I successivi 30 caratteri contengono il nome dell'artista, come una stringa.
-
I successivi 30 caratteri contengono il nome dell'album, come una stringa.
-
I successivi 4 caratteri contengono l'anno, come una stringa.
-
I successivi 30 caratteri contengono il commento, come una stringa.
-
Il byte successivo contiene un codice indicante il genere della traccia.
-
Tutti i dati di testo sono in formato ISO 8859-1.
Il metodo
id3TagRead()
controlla i dati dopo esser stati letti (in occasione dell'evento
complete
):
function id3TagRead():void
{
if (fileStr.readMultiByte(3, "iso-8859-1").match(/tag/i))
{
var id3Title:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Artist:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Album:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3Year:String = fileStr.readMultiByte(4, "iso-8859-1");
var id3Comment:String = fileStr.readMultiByte(30, "iso-8859-1");
var id3GenreCode:String = fileStr.readByte().toString(10);
}
}
È possibile inoltre eseguire una scrittura ad accesso casuale nel file. Ad esempio, è possibile analizzare la variabile
id3Title
per garantire che sia correttamente capitalizzata (mediante i metodi della classe String), e quindi scrivere una stringa modificata, denominata
newTitle
, nel file come nel caso seguente:
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
Per conformarsi alla versione ID3 1 standard, la lunghezza della stringa
newTitle
deve avere 30 caratteri, allungata alla fine del codice di carattere 0 (
String.fromCharCode(0)
).