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:
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.