Voorbeeld: Gegevens lezen en schrijven met willekeurige toegang

Adobe AIR 1.0 of hoger

MP3-bestanden kunnen ID3-tags bevatten. Dit zijn secties aan het begin of einde van een bestand die metagegevens bevatten die de opname identificeren. Van de indeling van de ID3-tag bestaan verschillende versies. In dit voorbeeld ziet u hoe u kunt lezen van en schrijven naar een MP3-bestand dat de eenvoudigste ID3-indeling bevat (ID3 versie 1.0) met gebruikmaking van willekeurige toegang tot de gegevens. Dit wil zeggen dat wordt gelezen van en geschreven naar willekeurige locaties in het bestand.

Bij een MP3-bestand dat een ID3-tag van versie 1 bevat, bevinden de ID3-gegevens zich aan het einde van het bestand, in de laatste 128 bytes.

Wanneer een bestand wordt geopend voor willekeurige lees-/schrijftoegang, is het belangrijk om FileMode.UPDATE op te geven als de parameter fileMode voor de methode open() of openAsync() :

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

Hiermee kunt u zowel lezen van als schrijven naar het bestand.

Bij het openen van het bestand kunt u de aanwijzer position neerzetten op de positie 128 bytes vóór het einde van het bestand:

fileStr.position = file.size - 128;

Deze code stelt de eigenschap position in op deze locatie in het bestand, aangezien de ID3-indeling v1.0 bepaalt dat de ID3-taggegevens worden opgeslagen in de laatste 128 bytes van het bestand. Deze specificatie bevat verder het volgende:

  • De eerste 3 bytes van de tag bevatten de tekenreeks "TAG" .

  • De volgende 30 tekens bevatten de titel van de MP3-track in de vorm van een tekenreeks.

  • De volgende 30 tekens bevatten de naam van de artiest in de vorm van een tekenreeks.

  • De volgende 30 tekens bevatten de naam van het album in de vorm van een tekenreeks.

  • De volgende 4 tekens bevatten het jaar in de vorm van een tekenreeks.

  • De volgende 30 tekens bevatten het commentaar in de vorm van een tekenreeks.

  • De volgende byte bevat een code die het genre van de track aangeeft.

  • Alle tekstgegevens hebben de indeling ISO 8859-1.

De methode id3TagRead() controleert de gegevens nadat deze zijn ingelezen (na het plaatsvinden van de gebeurtenis 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); 
    } 
} 

U kunt ook met willekeurige toegang naar het bestand schrijven. U kunt bijvoorbeeld de variabele id3Title parseren om er zeker van te zijn dat het correcte hoofdlettergebruik wordt toegepast (met behulp van methoden van de klasse String) en dan een gewijzigde tekenreeks met de naam newTitle naar het bestand schrijven, zoals in de volgende code:

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

Ten einde te voldoen aan de standaard voor ID3 versie 1, moet de lengte van de tekenreeks newTitle 30 tekens zijn, aan het einde opgevuld met de tekencode 0 ( String.fromCharCode(0) ).