1. Introdução
A popularização do formato MP3
para o armazenamento de arquivos de áudio
e a facilidade para baixar tais arquivos da
Internet fez de cada um de nós proprietários
de uma coleção de centenas ou
milhares de arquivos de músicas. Freqüentemente
estes arquivos são baixados por aplicativos
diferentes, ou são recebidos por e-mail,
e se espalham por diversas pastas no hard disk
do usuário.
Este artigo descreve uma aplicação
simples usando a API DOM em Java para gerar
um arquivo XML contendo informações
sobre os arquivos MP3 encontrados no sistema
de arquivos da máquina do usuário.
As informações apresentadas são
aquelas descritas nas tags ID3 dos arquivos
MP3.
O arquivo XML gerado pode ser importado por
um banco de dados e utilizado por uma aplicação
relacional através de consultas SQL.
Pode-se ainda manter a base de dados no arquivo
XML e percorrê-la usando DOM. Finalmente,
pode-se aplicar uma folha de estilo XSLT ao
arquivo XML original e transformá-lo,
por exemplo, em HTML para visualização
no browser.
2. DOM
O XML DOM (XML Document Object Model) define
uma forma padrão para acessar e manipular
documentos XML.
A API DOM transforma um documento XML em uma
estrutura em árvore e fornece acesso
a essa estrutura através de um conjunto
de objetos. Todos os elementos, o texto que
eles contêm e seus atributos podem ser
acessados através da árvore DOM.
Seu conteúdo pode ser modificado ou apagado
e novos elementos podem ser criados pelo DOM.
Os elementos, seu texto e seus atributos são
todos conhecidos como nós da árvore
DOM.
Um parser XML é um componente que permite
às aplicações analisar
um documento XML, validá-lo, montar a
árvore DOM e alterar a estrutura deste
documento. Esta aplicação usa
a implementação de referência
da API JAXP (Java API for XML Processing) incluída
como parte do J2SE v1.4.2 (pacote javax.xml.parsers).
Usando as classes deste pacote, podemos obter
uma instância da classe DOM Document que,
conceitualmente, corresponde à raiz da
árvore DOM, e fornece o acesso básico
aos dados do documento. A figura a seguir mostra
os detalhes de algumas das classes do pacote
org.w3c.dom. Observe a utilização
de uma classe concreta XmlDocument, pertencente
ao pacote org.apache.crimson.tree e que implementa
a interface Document.
Figura 1 - Algumas classes
da interface DOM
(clique na imagem p/ ampliar)
3. Arquivos MP3 e as tags ID3v2
ID3v2 é um novo sistema de tags que
permite que você acrescente informações
relevantes sobre seus arquivos de áudio
dentro dos próprios arquivos. As informações
com as quais você provavelmente está
acostumado são: o título da música,
o nome do artista, o nome do álbum, ano
e gênero. Esta é a informação
mostrada no display dos aparelhos eletrônicos
quando você reproduz um arquivo MP3.
O formato original foi desenvolvido em 1996
por Eric Kemp e, naquele tempo, significava
apenas “IDentificar um mp3”. As
tags ID3 podem ser atualizadas por um dos inúmeros
editores de ID3 disponíveis para download
na Internet ou por algum dos players MP3 mais
populares, como por exemplo o Winamp da Nullsoft.
Neste projeto, para ler as tags ID3 dos arquivos
MP3, utilizamos um conjunto de classes disponíveis
para download em http://sourceforge.net/projects/mp3info.
Este projeto é conhecido como mp3info
no Sourceforge.
Neste pacote, todas as informações
do arquivo MP3 são obtidas por uma instância
da classe ExtendedID3Tag como mostrado no código
a seguir:
ID3Reader x = new ID3Reader(file.getAbsolutePath());
ExtendedID3Tag tag = x.getExtendedID3Tag();
Os seguintes métodos são disponibilizados
na interface da classe ExtendedID3Tag:
String getAlbum()
String getArtist()
String getComment()
byte getGenre()
String getGenreS()
String getTitle()
byte getTrack()
String getTracks()
String getYear()
boolean isValidTag()
void setAlbum(String alb)
void setArtist(String art)
void setComment(String c)
void setGenre(byte g)
void setGenre(int g)
void setTitle(String tit)
void setTrack(byte t)
void setTrack(int t)
void setYear(String y)
byte[] toByteArray()
4. O programa
O programa percorre recursivamente uma sub-árvore
do sistema de arquivos do usuário a partir
de um diretório raiz especificado (figura
a seguir).
Figura 2 - Detalhes da interface com o usuário
Para cada arquivo MP3 encontrado, é
criada uma instância da classe ExtendedID3Tag
para ler as informações da tag
ID3v2. As informações lidas são
então gravadas em um novo nó da
árvore DOM. Ao final do processamento,
toda a árvore DOM é gravada no
arquivo XML de saída (figura a seguir).

Figura 3 - Trecho de um arquivo XML resultante
da execução do aplicativo
(clique na
imagem p/ ampliar)
Observe na linha 2 do arquivo XML a associação
com uma folha de estilo XSLT que transforma
o arquivo XML em HTML.
5. Visualização
do arquivo XML
Uma das possibilidades de utilização
do arquivo XML resultante é associá-lo
a uma folha de estilo para transformá-lo
em um documento HTML. A figura a seguir mostra
o resultado da aplicação de uma
folha de estilo simples ao documento XML da
Figura 3.

Figura 4 - Arquivo
HTML resultante da aplicação de
uma folha de estilo XSLT ao arquivo XML
Observe que o elemento
<path> no arquivo XML, foi utilizado para
criar um atributo href no arquivo HTML de saída.
Desta forma, quando o usuário clicar
sobre o nome do arquivo, o aplicativo associado
à execução de arquivos
MP3 em sua máquina é aberto automaticamente
(figura abaixo).
Figura 5 - Execução
automática de um arquivo MP3 a partir
da página HTML
6. Conclusão
Este artigo apresenta um aplicativo simples
para a organização de uma coleção
de arquivos MP3 usando XML e DOM.
Todos os arquivos necessários para rodar
a aplicação encontram-se disponíveis
para download em http://equipe.nce.ufrj.br/jonas/conceito/mp3.
Se você quiser aprender mais sobre Java,
XML, XSLT, DOM e tecnologias associadas, consulte
o catálogo de cursos disponíveis
em http://www.nce.ufrj.br.
|