Esempio: lettura e scrittura di dati con accesso casuale

Adobe AIR 1.0 e versioni successive

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'eventocomplete):

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)).