MP3-Dateien können auch ID3-Tags enthalten. Das sind Abschnitte am Anfang oder Ende der Datei, die Metadaten für die Identifikation der Aufnahme enthalten. Von dem ID3-Tag-Format selbst gibt es verschiedene Versionen. Das folgenden Beispiel beschreibt, wie aus einer MP3-Datei gelesen bzw. in eine MP3-Datei geschrieben wird, die das einfachste ID3-Format enthält (ID3, Version 1.0). Dies geschieht durch einen „Zufallszugriff auf die Dateidaten“, d. h., es wird aus zufälligen Stellen in der Datei gelesen bzw. in zufällige Stellen geschrieben.
Bei einer MP3-Datei, die ein ID3-Tag der Version 1 enthält, befinden sich die ID3-Daten am Ende der Datei, d. h., in den letzten 128 Byte.
Beim Zugriff auf eine Datei mit zufälligem Schreib-/Lesezugriff ist es wichtig,
FileMode.UPDATE
als
fileMode
-Parameter für die
open()
- oder
openAsync()
-Methode anzugeben:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Dadurch können Sie aus der Datei lesen wie auch in die Datei schreiben.
Beim Öffnen der Datei können Sie den
position
-Zeiger auf die Position „128 Byte vor Dateiende“ setzen:
fileStr.position = file.size - 128;
Dieser Code setzt die Eigenschaft
position
auf diese Stelle in der Datei, da das ID3-Format der Version 1.0 festlegt, dass die ID3-Tag-Daten in den letzten 128 Byte einer Datei gespeichert werden. Darüber hinaus hat die Spezifikation die folgenden Vorschriften:
-
Die ersten drei Byte des Tags enthalten den String
„TAG"
.
-
Die nächsten 30 Zeichen enthalten den Titel für die MP3-Spur, und zwar als String.
-
Die nächsten 30 Zeichen enthalten den Namen des Interpreten, ebenfalls als String.
-
Die nächsten 30 Zeichen enthalten den Namen des Albums als String.
-
Die nächsten 4 Zeichen enthalten das Erscheinungsjahr als String.
-
Die nächsten 30 Zeichen enthalten den Kommentar als String.
-
Das nächste Byte enthält einen Code, der das Genre dieses Titels bezeichnet.
-
Alle Textdaten haben das ISO 8859-1-Format.
Die Methode
id3TagRead()
überprüft die Daten, nachdem sie gelesen wurden (nach dem
complete
-Ereignis):
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);
}
}
Sie können auch mit einem Zufallszugriff in die Datei schreiben. Sie könnten etwa die Variable
id3Title
mit einem Parser analysieren, um sicherzustellen, dass die Groß-/Kleinschreibung stimmt (anhand von Methoden der String-Klasse), und dann einen geänderten String mit dem Namen
newTitle
in die Datei zurückschreiben. Hier der Code:
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
Damit der
newTitle
-String dem ID3-Standard der Version 1 entspricht, muss die Länge 30 Zeichen betragen und am Ende muss der Zeichencode 0 (
String.fromCharCode(0)
) stehen.