É quase que impossível ficar um único dia sem ouvir uma pequena parte de uma música, seja em casa, no trabalho ou até mesmo em um pequeno passeio pelas ruas.
O fato é que não conseguimos mais ficar sem as músicas, mas para que elas sejam tocadas, é necessário que um Software possa reproduzi-la, seja em um Rádio, Computador ou em Celulares.
Neste artigo vamos criar um simples reprodutor de músicas no formado de WAV, existem DLLs para reprodução de outros formatos, mas para utiliza-los, seria um projeto maior, que consiste em validações para chamar o método correto.
Será utilizado neste projeto o Visual Studio 2013, se você tem a versão 2012 vai funcionar corretamente.
Crie um novo projeto utilizando o Windows Forms Application, escolha .NET Framework 4.5, atribua um nome ao seu projeto e por fim, clique em OK.
Com o projeto criado, altere as configurações do form1 para.
Name |
frmPrincipal |
Text |
WAV Player |
Start Position |
CenterScreen |
MaximizeBox |
False |
FormBorderStyle |
FixedDialog |
Insira no formulário 1 TextBox e 2 Buttons, organize os componentes conforme mostra a imagem a seguir.
Agora será necessário fazer algumas alterações nos componentes como fizemos no formulário.
TextBox1
Name |
frmCaminho |
Font |
Segoe UI 12 |
Button1
Name |
btnAbrir |
Text |
Abrir |
Font |
Segoe UI 12 |
Button2
Name |
btnPlay |
Text |
Play |
Font |
Segoe UI 12 |
ForeColor |
ForestGreen |
Na imagem a seguir é apresentado nosso formulário totalmente configurado, restando apenas a programação.
Agora vamos inserir a programação, mas para isto precisamos entender a lógica que devemos programar.
1º - Carregamos os arquivos WAV.
2º - Inserimos o caminho do arquivo no txtCaminho.
3º - Verificamos se o arquivo existe.
4º - Reproduzimos o arquivo.
De um duplo clique no botão btnAbrir, insira o código abaixo, note que o mesmo está todo comentado, dispensando assim quaisquer explicações.
Código 01:
OpenFileDialog ofd = new OpenFileDialog();
//Criamos um objeto responsável por carregar caixas de dialogos especficar para carregamento de arquivos.
ofd.Filter = "WAV Files (.wav)|*.wav"; //Filtramos na caixa de dialogo apenas arquivos que tenham a extensão .WAV.
/*
* ofd.ShowDialog() - Exibe a caixa de dialogo.
* DialogResult.OK - Retorna uma ação que corresponde ao botão abrir.
* o IF abaixo pergunta se o usuário informou um arquivo e clicou no botão abrir.
*/
if (ofd.ShowDialog() == DialogResult.OK)
{
/*
*txtCaminho.Text - Propriedade que recebe um texto.
*ofd.FileName - Retorna o diretório completo do arquivo especificado.
*/
txtCaminho.Text = ofd.FileName;
}
Para o botão de Play, devemos verificar se o arquivo existe para posteriormente reproduzir a o áudio. Vamos utilizar o Método File.Exists(), ele nos retorna se um determinado arquivo existe, mas para isto é necessário adicionar o using System.IO, por questões de performance vamos utilizar Threads, para que nosso software não trave, então adicione também using System.Threading.
Vamos declarar um novo objeto do tipo Thread, para isto crie um novo atributo e no construtor da classe de um NEW no atributo criado.
Código 02:
private Thread t;
public frmPrincipal()
{
InitializeComponent();
t = new Thread(tocar);
}
Como estamos trabalhando com a Thread você já deve ter notado que ao instanciarmos a Thread passamos um parâmetro chamado de tocar, ele nada mais é do que um o método na qual a Thread deverá iniciar.
As Thread executam operações em paralelos com a aplicação, permitindo assim que tenhamos mais de uma operação rodando na mesma aplicação. Em outras palavras ele inicia um novo Processo no Windows.
Crie um método chamado de tocar, como mostra o código a seguir.
Código 03:
private void tocar()
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
//Criamos um objeto do tipo SoundPlayer.
player.SoundLocation = txtCaminho.Text; //Informamos o caminho do arquivo.
player.Load(); //O objeto Player carrega o arquivo.
player.PlaySync(); //Finalmente chamamos o método responsável por reproduzir o arquivo.
}
No botão de Play, devemos verificar se o arquivo existe e ainda assim garantir que o campo txtCaminho não está vazio, por fim iniciar a Thread através do Método Start(). Caso o arquivo não exista, será exibido uma mensagem para o usuário.
Insira o código abaixo no botão de Play.
Código 04:
//Verificamos se o arquivo existe e o txtCaminho contém algo.
if (File.Exists(txtCaminho.Text) && txtCaminho.Text != "")
{
t.Start(); //Iniciamos a Thread
}
else
{
//Caso o arquivo não exista, exibe uma mensagem
MessageBox.Show("Ops!!! o arquivo parece não existir.");
}
Finalmente nosso Player irá reproduzir a música sem que trave a aplicação. Se você fechar a aplicação enquanto a música toda, irá notar que mesmo fechado ela continua tocando, isto porque o Windows alocou um novo processo para reproduzir a música.
Como o intuito aqui não é trabalhar com Thread e sim reproduzir mídias WAV, recomendo que leia o artigo http://www.macoratti.net/10/09/c_thd1.htm, nele você poderá conhecer amplamente o poder das Thread e é claro, encontrar novas soluções para seu Player.
Espero que tenham aprendido, dúvidas, críticas ou sugestões, deixem nos comentários.
Código 05:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Threading;
namespace wav_player
{
public partial class frmPrincipal : Form
{
private Thread t; //Declaramos um atributo do tipo Thread
public frmPrincipal()
{
InitializeComponent();
t = new Thread(tocar); //Instanciamos o objeto Thread.
}
private void btnAbrir_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
//Criamos um objeto responsável por carregar caixas de dialogos especficar para carregamento de arquivos.
ofd.Filter = "WAV Files (.wav)|*.wav"; //Filtramos na caixa de dialogo apenas arquivos que tenham a extensão .WAV.
/*
* ofd.ShowDialog() - Exibe a caixa de dialogo.
* DialogResult.OK - Retorna uma ação que corresponde ao botão abrir.
* o IF abaixo pergunta se o usuário informou um arquivo e clicou no botão abrir.
*/
if (ofd.ShowDialog() == DialogResult.OK)
{
/*
*txtCaminho.Text - Propriedade que recebe um texto.
*ofd.FileName - Retorna o diretório completo do arquivo especificado.
*/
txtCaminho.Text = ofd.FileName;
}
}
private void btnPlay_Click(object sender, EventArgs e)
{
//Verificamos se o arquivo existe e o txtCaminho contém algo.
if (File.Exists(txtCaminho.Text) && txtCaminho.Text != "")
{
t.Start(); //Iniciamos a Thread
}
else
{
//Caso o arquivo não exista, exibe uma mensagem
MessageBox.Show("Ops!!! o arquivo parece não existir.");
}
}
private void tocar()
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
//Criamos um objeto do tipo SoundPlayer.
player.SoundLocation = txtCaminho.Text; //Informamos o caminho do arquivo.
player.Load(); //O objeto Player carrega o arquivo.
player.PlaySync(); //Finalmente chamamos o método responsável por reproduzir o arquivo.
}
}
}