Arquivos MP3 podem incluir marcas ID3, que são seções no início ou no final do arquivo, contendo metadados que identificam a gravação. O próprio formato de marca ID3 tem revisões diferentes. Este exemplo descreve como fazer a leitura e a gravação de um arquivo MP3 que contém o formato ID3 mais simples (ID3 versão 1.0) usando o "acesso aleatório a dados do arquivo", o que significa que ele lê a partir de e grava em locais arbitrários no arquivo.
O arquivo MP3 que contém uma marca ID3 versão 1 inclui dados ID3 no final do arquivo, nos últimos 128 bytes.
Ao acessar um arquivo para acesso de leitura e gravação aleatório, é importante especificar
FileMode.UPDATE
como o parâmetro
fileMode
do método
open()
ou
openAsync()
:
var file:File = File.documentsDirectory.resolvePath("My Music/Sample ID3 v1.mp3");
var fileStr:FileStream = new FileStream();
fileStr.open(file, FileMode.UPDATE);
Isso permite ler e gravar no arquivo.
Ao abrir o arquivo, você pode definir o ponteiro
position
para a posição de 128 bytes antes do final do arquivo:
fileStr.position = file.size - 128;
Esse código define a propriedade
position
para esse local no arquivo, porque o formato ID3 v1.0 especifica que os dados da marca ID3 são armazenados nos últimos 128 bytes do arquivo. A especificação também diz o seguinte:
-
Os primeiros 3 bytes da marca contêm a sequência
"TAG"
.
-
Os 30 caracteres seguintes contêm o título da trilha MP3, como uma sequência.
-
Os 30 caracteres seguintes contêm o nome do artista, como uma sequência.
-
Os 30 caracteres seguintes contêm o nome do álbum, como uma sequência.
-
Os 4 caracteres seguintes contêm o ano, como uma sequência.
-
Os 30 caracteres seguintes contêm o comentário, como uma sequência.
-
O byte seguinte contém um código indicando o gênero da trilha.
-
Todos os dados de texto estão no formato ISO 8859-1.
O método
id3TagRead()
verifica os dados após serem lidos (no 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);
}
}
Você também pode realizar uma gravação com acesso aleatório no arquivo. Por exemplo, você pode analisar a variável
id3Title
para assegurar que ela esteja com as maiúsculas e minúsculas corretas (usando métodos da classe String) e, em seguida, fazer a gravação de uma sequência modificada, chamada
newTitle
, no arquivo, como no seguinte:
fileStr.position = file.length - 125; // 128 - 3
fileStr.writeMultiByte(newTitle, "iso-8859-1");
Para corresponder à versão 1 padrão do ID3, o tamanho da sequência
newTitle
deve ter 30 caracteres, preenchidos no final com o caractere de código 0 (
String.fromCharCode(0)
).