Exemple : Lecture et écriture de données en mode aléatoire

Adobe AIR 1.0 et les versions ultérieures

Les fichiers MP3 peuvent renfermer des balises ID3, autrement dit, des sections en début ou fin de fichier contenant des métadonnées identifiant l’enregistrement. Il existe différentes versions du format de balise ID3. L’exemple suivant explique comment accéder en lecture et écriture à un fichier MP3 contenant le format ID3 le plus simple (ID3 version 1.0) par le biais d’un « accès aléatoire aux données », c’est-à-dire en lisant et écrivant des données à des emplacements arbitraires dans le fichier.

Dans un fichier MP3 contenant une balise ID3 version 1, les données ID3 figurent dans les 128 derniers octets du fichier.

Lorsque vous accédez à un fichier en mode de lecture/écriture aléatoire, il est important de définir le paramètre fileMode de la méthode open() ouopenAsync() sur FileMode.UPDATE :

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

Vous pouvez ainsi accéder au fichier en lecture et écriture.

A l’ouverture du fichier, vous pouvez définir le pointeur position sur 128 octets avant la fin du fichier :

fileStr.position = file.size - 128;

Ce code définit la propriété position sur cet emplacement du fichier car le format ID3 v1.0 stipule que les balises ID3 sont stockées dans les derniers 128 octets du fichier. La spécification définit également les informations suivantes :

  • Les 3 premiers octets de la balise représentent la chaîne "TAG".

  • Les 30 caractères suivants représentent le titre de la piste MP3, sous forme de chaîne.

  • Les 30 caractères suivants représentent le nom de l’interprète, sous forme de chaîne.

  • Les 30 caractères suivants représentent le nom de l’album, sous forme de chaîne.

  • Les 4 caractères suivants représentent l’année, sous forme de chaîne.

  • Les 30 caractères suivants représentent le commentaire, sous forme de chaîne.

  • L’octet suivant contient un code identifiant le genre de la piste.

  • Toutes les données texte sont au format ISO 8859-1.

La méthode id3TagRead() vérifie les données après leur lecture (sur envoi de l’événement 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); 
    } 
} 

Vous pouvez également écrire dans le fichier en mode aléatoire. Par exemple, vous pourriez analyser la variable id3Title pour vérifier que l’utilisation des majuscules est correcte (à l’aide des méthodes de la classe String), puis écrire une chaîne modifiée, newTitle, dans le fichier, comme l’illustre l’exemple suivant :

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

Conformément à la norme ID3 version 1, la chaîne newTitle doit comprendre 30 caractères et être remplie à droite par le code de caractère 0 (String.fromCharCode(0)).