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