Exempel: Läsa och skriva data med direktåtkomst

Adobe AIR 1.0 och senare

MP3-filer kan inkludera ID3-koder, som är avsnitt i början eller slutet av filen som innehåller metadata som identifierar inspelningen. Själva ID3-kodformatet har olika revideringar. I det här exemplet beskrivs hur du läser och skriver från en MP3-fil som innehåller det enklaste ID3-formatet (ID3 version 1.0) med hjälp av ”direktåtkomst till fildata”, vilket innebär att det läser från och skriver till godtyckliga platser i filen.

En MP3-fil som innehåller en ID3 version 1-kod innehåller ID3-data i slutet av filen, i de sista 128 byten.

När du skaffar åtkomst till en fil för direkt läs-/skrivåtkomst är det viktigt att du anger FileMode.UPDATE som fileMode-parameter för metoden open() eller openAsync():

var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3"); 
var fileStr:FileStream = new FileStream(); 
fileStr.open(file, FileMode.UPDATE);  

Då kan du både läsa och skriva till filen.

När du öppnar filen kan du ställa in pekaren position på positionen 128 byte före slutet på filen:

fileStr.position = file.size - 128;

Den här koden ställer in egenskapen position på den här platsen i filen eftersom ID3 v1.0-formatet anger att ID3-koddata lagras i de sista 128 byten i filen. Specifikationen anger också följande:

  • De första tre byten i koden innehåller strängen "TAG".

  • De nästa 30 tecknen innehåller titeln för MP3-spåret, som en sträng.

  • De nästa 30 tecknen innehåller namnet på artisten, som en sträng.

  • De nästa 30 tecknen innehåller namnet på albumet, som en sträng.

  • De nästa fyra tecknen innehåller året, som en sträng.

  • De nästa 30 tecknen innehåller kommentaren, som en sträng.

  • Nästa byte innehåller en kod som anger spårets genre.

  • Alla textdata är i formatet ISO 8859-1.

Metoden id3TagRead() kontrollerar data efter att de har lästs in (vid händelsen 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); 
    } 
} 

Du kan också skriva med direktåtkomst till filen. Du kan till exempel analysera variabeln id3Title för att se till att skiftläget är korrekt (med metoderna för klassen String), och sedan skriva en ändrad sträng med namnet newTitle till filen, så här:

fileStr.position = file.length - 125;    // 128 - 3 
fileStr.writeMultiByte(newTitle, "iso-8859-1");

Om du vill följa ID3 version 1-standarden ska längden på strängen newTitle vara 30 tecken, utfyllda vid slutet med teckenkoden 0 (String.fromCharCode(0)).