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.
Imports System.ioPublic Class MP3TagDataPrivate _Artista As String Private _Titulo As String Private _Album As String Private _Ano As StringPublic 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 Bytefs.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 SubPrivate 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