 VB .NET  - 
Decifrando detalhes de arquivos MP3
 VB .NET  - 
Decifrando detalhes de arquivos MP3
Os arquivos MP3 são um padrão e revolucionaram 
nosso relacionamento com a música. Devido ao seu tamanho, fica fácil carregar 
centenas de arquivos em um pequeno dispositivo como um pen-drive para 
ouvir em qualquer lugar. Quem imaginaria tal cenário a uns 15 anos atrás...
Vou apresentar uma singela aplicação que permite obter alguns detalhes como nome do artista, título da música, nome do álbum e ano de gravação, de arquivos padrão MP3 usando o Visual Basic 2005 Express.
Vamos então direto ao que interessa.
A interface da nossa aplicação é muito simples; ela tem o seguinte leiaute:

Com apenas dois controles ListBox , um botão de comando e uma caixa de texto temos a interface pronta. Pode ser melhorada , talvez com um componente OpenFileDialog , mas o quis ser o mais simples possível.
Abra o VB 2005 Express e crie um novo projeto do tipo Windows Application usando a linguagem Visual Basic com o nome decifa_MP3 ou algo parecido.
No menu Project selecione a opção Add Class e informe o nome mp3.vb ao arquivo. Em seguida vamos criar uma classe chamada MP3TagData com o seguinte código.
| ImportsSystem.io PublicClass MP3TagData Private _Artista As StringPrivate _Titulo As String Private _Album As String Private _Ano As String Public ReadOnly Property Artista() As String Get Return _Artista End Get End Property 
 Public ReadOnly Property Album() As String Get Return _Album End Get End Property Public ReadOnly Property Ano() As String Get Return _Ano End Get End Property Public Sub ReadFromFile(ByVal filename As String) ' Limpa valores Me._Titulo = "" Me._Artista = "" Me._Album = "" Me._Ano = "" Dim fs As New FileStream(filename, FileMode.Open) '---------------------------------- ' Le a tag MP3. '---------------------------------- fs.Seek(0 - 128, SeekOrigin.End)Dim Tag(2) As Byte fs.Read(Tag, 0, 3)'---------------------------------- ' Verifa se a tag existe. '---------------------------------- If System.Text.Encoding.ASCII.GetString(Tag).Trim() = "TAG" Then ' Titulo. Me._Titulo = GetTagData(fs, 30) ' Artista. Me._Artista = GetTagData(fs, 30) ' Album. Me._Album = GetTagData(fs, 30) ' Ano. Me._Ano = GetTagData(fs, 4) End If fs.Close()End Sub Private Function GetTagData(ByVal stream As Stream, ByVal length As Integer) As String '--------------------------- ' Le os dados. '--------------------------- Dim Bytes(length - 1) As Byte stream.Read(Bytes, 0, length)Dim TagData As String = System.Text.Encoding.ASCII.GetString(Bytes) ' Trim nulls. Dim TrimChars() As Char = {Char.Parse(" "), Char.Parse(vbNullChar)} TagData = TagData.Trim(TrimChars)Return TagData End Function 
 | Nossa classe possui  4 
    membros privados: 
     
 Possui também 4 propriedades públicas: 
 Que são as informações que vamos obter do arquivo MP3 
 Temos também os seguintes métodos: 
 
 | 
Na interface temos o código do botão - Exibir Relação de músicas - que preenche o listbox com a relação de músicas , e, é mostrado a seguir:
| Private Sub 
    Button1_Click(ByVal sender
    As System.Object, ByVal 
    e As System.EventArgs) 
    Handles Button1.Click Dim di As New IO.DirectoryInfo(txtMusicas.Text) Dim diar1 As IO.FileInfo() = di.GetFiles() Dim dra As IO.FileInfo 
     ListBox1.Items.Add(dra) Next Label2.Text = "Total de musicas = " + ListBox1.Items.Count.ToString End Sub 
 | 
Nota: Devemos informar o nome do diretório informando o local de localização dos arquivos MP3. (Use um componente OpenFileDialog para automatizar esta tarefa)
Veja o artigo: VB.NET - Criando um Slide Show onde eu mostro como usar este recurso.
Após preencher o ListBox com a relação de músicas o usuário poderá selecionar qualquer uma delas e obter os detalhes no segundo ListBox. Para isso estou usando o evento ListBox1_SelectedIndexChanged do ListBox cujo código é exibido abaixo:
| Private Sub 
    ListBox1_SelectedIndexChanged(ByVal sender
    As System.Object, ByVal 
    e As System.EventArgs) 
    Handles ListBox1.SelectedIndexChanged 
     '------------------------------------------' Caminho completo e nome do arquivo.MP3 '------------------------------------------ Dim caminho As String = txtMusicas.Text + ListBox1.Text 
 
 ListBox2.Items.Add("Album: " & MP3Tag.Album) ListBox2.Items.Add("Artista: " & MP3Tag.Artista) ListBox2.Items.Add("Música: " & MP3Tag.Titulo) ListBox2.Items.Add("Ano: " & MP3Tag.Ano) End Sub 
 | 
Com apenas isso já podemos obter os detalhes dos arquivos MP3. Basta executar o projeto e iremos obter:

Podemos melhorar a interface usando os antigos componentes COM DirListBox , FileListBox e DriveListBox do VB6. No próximo artigo eu vou mostrar como você pode referenciar estes componentes no VB 2005 sem problema.
Ps: Que tal incrementar o programa criando uma rotina para tocar os arquivos MP3 ???
Eu sei é apenas Visual Basic , mas
eu gosto...
José Carlos Macoratti