Los archivos MP3 pueden incluir etiquetas ID3, que son secciones al principio o al final del archivo que contienen metadatos para identificar la grabación. El formato mismo de la etiqueta ID3 tiene distintas revisiones. Este ejemplo describe cómo leer y escribir de un archivo MP3 que contiene el formato ID3 más sencillo (ID3 versión 1.0) usando "datos de acceso directo al archivo", que significa que lee y escribe en lugares arbitrarios del archivo.
Un archivo MP3 que contiene una etiqueta ID3 versión 1 incluye los datos ID3 al final del archivo, en los últimos 128 bytes.
Al acceder a un archivo para fines de lectura/escritura directa, es importante especificar
FileMode.UPDATE
como parámetro
fileMode
para el método
open()
o
openAsync()
:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Esto permite tanto leer como escribir en el archivo.
Al abrir el archivo se puede definir el puntero
position
en la posición de 128 bytes antes del final del archivo:
fileStr.position = file.size - 128;
Este código define la propiedad
position
en esta ubicación del archivo porque el formato ID3 v1.0 especifica que los datos de la etiqueta ID3 se guardan en los últimos 128 bytes del archivo. La especificación también estipula lo siguiente:
-
Los 3 primeros bytes de la etiqueta contienen la cadena
"TAG"
.
-
Los 30 caracteres siguientes contienen el título del tema MP3 en forma de cadena.
-
Los 30 caracteres siguientes contienen el nombre del artista en forma de cadena.
-
Los 30 caracteres siguientes contienen el nombre del álbum en forma de cadena.
-
Los 4 caracteres siguientes contienen el año en forma de cadena.
-
Los 30 caracteres siguientes contienen el comentario en forma de cadena.
-
El siguiente byte contiene un código que indica el género del tema.
-
Todos los datos de texto están en formato ISO 8859-1.
El método
id3TagRead()
comprueba los datos después de leídos (en el momento del evento
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);
}
}
También se puede realizar una escritura de acceso directo en el archivo. Por ejemplo, se podría analizar la variable
id3Title
para asegurarse de que las mayúsculas sean correctas (empleando los métodos de la clase String) y después escribir en el archivo una cadena modificada, denominada
newTitle
, como en el caso siguiente:
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
Para cumplir la norma ID3 versión 1, la longitud de la cadena
newTitle
debe ser de 30 caracteres, con el carácter 0 de relleno al final (
String.fromCharCode(0)
).