Olá pessoal, no artigo passado, eu mostrei como criar uma aplicação windows em vb.net que reproduza vídeos. Neste artigo, eu mostrarei como fazer uma aplicação que reproduza arquivos de áudio.
Neste artigo, utilizarei uma biblioteca chamada csMusicLibraryPro.vb, que pode ser baixada neste link: http://www.vbcodesource.com/vbNetControls.php. Ela já encapsula diversas funções que nos ajudarão na criação do player, assim como a classe utilizada no artigo passado.
 
Abra seu Visual Basic 2010 Express Edition e crie um novo projeto Windows Form Aplication e inclua nas referências do projeto a biblioteca csMusicLibraryPro.vb. No formulário, inclua os seguintes controles com suas respectivas propriedades:
 
Controle
Propriedade
4 Button
Text = “Play”, “Pause”, “Parar” e “Adicionar Música”
1 DataGridView
AllowUserToAddRows = False
AllowUserToDeleteRows = False
AllowUserToResizeColumns = False
AllowUserToResizeRows = False
ColumnHeadersVisible = False
ReadOnly = True
RowHeadersVisible = False
SelectionMode = FullRowSelect
Columns = Arquivo (visible = false) e Musica
2 Label
Name = “Musica” e “Duracao”
2 TrackBar
Name = “Duracao” e “Volume”
1 Timer
Interval = 1000
 
O layout do form fica mais ou menos assim:
Imagem

 
Ao iniciar o aplicativo, o usuário deverá clicar no botão de adicionar música (o botão com o símbolo de mais verde) e selecionar um arquivo de música e o mesmo será adicionado a lista de músicas, que possui duas colunas: a primeira (que é oculta) fica o caminho do arquivo e a segunda fica somente o nome do arquivo. Então o usuário irá interagir com o aplicativo através dos botões play, pause e parar. Para tocar outro arquivo, o usuário seleciona o mesmo e clica em play, ou dá um duplo clique no nome do arquivo que fica na lista.
 
Abaixo está todo o código do formulário:
1. Variáveis globais
 
    Private oPlayer As New csMusicLibraryPro.csMusicLibrary
    Private mouse_down As Boolean
 
 
2. Código do botão Adicionar música
 
    Private Sub btnAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAdd.Click
        Dim abrir As New OpenFileDialog
 
        With abrir
            .Title = "Escolher arquivo"
            .CheckFileExists = True
            .CheckPathExists = True
            .Filter = "Todos os formatos|*.*|MP3|*.mp3|wma|*.wma|WAV|*.wav"
            .Multiselect = False
            .AutoUpgradeEnabled = True
            .RestoreDirectory = True
            If .ShowDialog = Windows.Forms.DialogResult.OK Then
                Me.grdLista.Rows.Add(.FileName, Me.ExtrairNomeDoArquivo(.FileName))
            End If
        End With
 
        abrir = Nothing
    End Sub
 
    Private Function ExtrairNomeDoArquivo(ByVal pCaminhoArquivo As String) As String
        Dim index As Integer = pCaminhoArquivo.LastIndexOf("\")
 
        If index >= 0 Then
            Return pCaminhoArquivo.Substring(index + 1)
        Else
            Return pCaminhoArquivo
        End If
    End Function
 
 
3. Código dos botões Play, pause e parar
 
 
    Private Sub btnPlay_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPlay.Click
        If Me.grdLista.Rows.Count > 0 Then
            With Me.oPlayer
                Dim status As String = .currentStatus
                Dim linha As DataGridViewRow
 
                If Me.grdLista.CurrentRow Is Nothing Then
                    linha = Me.grdLista.Rows(0)
                Else
                    linha = Me.grdLista.CurrentRow
                End If
 
                .filename = linha.Cells(0).Value.ToString
 
                If status.Contains("paused") Then
                    .resumePlay()
                Else
                    .playMusic()
 
                    Me.lblMusica.Text = linha.Cells(1).Value.ToString
                End If
 
                .volumeLevel = Me.trbVolume.Value
                Timer1.Start()
            End With
        End If
    End Sub
 
    Private Sub btnPause_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPause.Click
        Me.oPlayer.pausePlay()
        Timer1.Stop()
    End Sub
 
    Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
        Me.oPlayer.stopPlay()
        Me.Timer1.Stop()
        Me.oPlayer.changePosition(0)
        Me.lblDuracao.Text = Me.formataTempo(0) & " / " & Me.formataTempo(oPlayer.durationInSec)
        Me.trbDuracao.Value = 0
    End Sub
 
 
4. Código do Timer
 
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim duracao As Integer = oPlayer.durationInSec
        Dim posicao As Integer = oPlayer.positionInSec
 
        Me.lblDuracao.Text = Me.formataTempo(posicao) & " / " & Me.formataTempo(duracao)
 
        If duracao = posicao Then
            Me.trbDuracao.Value = Me.trbDuracao.Maximum
            Me.Timer1.Stop()
            Me.btnStop.PerformClick()
        Else
            Me.atualizaBarraDuracao(posicao, duracao)
        End If
    End Sub
 
    Private Sub atualizaBarraDuracao(ByVal posicao As Integer, ByVal duracao As Integer)
        If Not Me.mouse_down Then
            Me.trbDuracao.Value = Math.Truncate((Me.trbDuracao.Maximum * posicao) / duracao)
        End If
    End Sub
 
    Private Function formataTempo(ByVal tempoEmSegundos As Integer) As String
        Dim segundos As Integer
        Dim minutos As Integer
        Dim horas As Integer
        Dim retorno As String
 
        If tempoEmSegundos < 60 Then
            'menos de um minuto
            If tempoEmSegundos < 10 Then
                retorno = "00:0" & tempoEmSegundos
            Else
                retorno = "00:" & tempoEmSegundos
            End If
 
        ElseIf tempoEmSegundos < 3600 Then
            'menos de um hora
            minutos = Math.Truncate(tempoEmSegundos / 60)
            segundos = tempoEmSegundos Mod 60
 
            If minutos < 10 Then
                retorno = "0" & minutos & ":"
            Else
                retorno = minutos & ":"
            End If
 
            If segundos < 10 Then
                retorno &= "0" & segundos
            Else
                retorno &= segundos
            End If
 
        Else
            'uma hora ou mais
 
            horas = tempoEmSegundos / 3600
            If horas < 10 Then
                retorno = "0" & horas & ":"
            Else
                retorno = horas & ":"
            End If
 
 
            minutos = tempoEmSegundos - (3600 * horas)
            minutos = Math.Truncate(minutos / 60)
            If minutos < 10 Then
                retorno &= "0" & minutos & ":"
            Else
                retorno &= minutos & ":"
            End If
 
 
            segundos = tempoEmSegundos - (3600 * horas)
            segundos = segundos Mod 60
            If segundos < 10 Then
                retorno &= "0" & segundos
            Else
                retorno &= segundos
            End If
        End If
 
        Return retorno
    End Function
 
 
5. Código do duplo clique no DataGridView
 
 
    Private Sub grdLista_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grdLista.DoubleClick
        If Me.grdLista.CurrentRow IsNot Nothing Then
            Me.btnPlay.PerformClick()
        End If
    End Sub
 
 
6. Código da barra de duração
 
 
    Private Sub trbDuracao_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles trbDuracao.MouseDown
        Me.mouse_down = True
    End Sub
 
    Private Sub trbDuracao_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles trbDuracao.MouseUp
        Me.trbDuracao.Value = Math.Truncate((Me.trbDuracao.Maximum * e.X) / Me.trbDuracao.Width)
 
        Dim valor As Integer = Me.trbDuracao.Value
 
        valor = Math.Truncate((valor * Me.oPlayer.durationInSec) / Me.trbDuracao.Maximum)
 
        Me.mouse_down = False
        Me.oPlayer.changePosition(valor)
    End Sub
 
 
7. Código do Volume
 
 
    Private Sub trbVolume_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles trbVolume.Scroll
        Me.oPlayer.volumeLevel = Me.trbVolume.Value
    End Sub
 
 
Este aplicativo simples de reprodução de áudio está pronto, mas pode ser melhorado como, por exemplo: botões de próximo e anterior; passar para a próxima música da lista; opções de repetição de áudio; colocar a duração do arquivo de áudio na lista e muitas outras funcionalidades.
 
Com o conhecimento obtido neste artigo, podem ser criados softwares de auxílio a pessoas com deficiência visual; inserir opções de interação com usuário através de áudio e muitas outras idéias.