Usuário com melhor resposta
Reproduzir arquivo ".mp3"

Pergunta
-
Olá pessoal,
Bom, estou desenvolvendo um aplicativo simples onde é basicamente o seguinte:
Eu tenho uma pasta "Sounds" no projeto, e dentro dela tenho algumas subpastas com arquivos de músicas do formato ".mp3".
O meu problema no caso é reproduzi-las, tentei algumas opções como o MediaElement e o SoundEffect mas, não obtive muito sucesso. Funcionou com o SoundEffect quando o arquivo é .wav.
Eu fiz um método meio genérico na qual eu somente pego o objeto que chamou (um botão por exemplo), e pego no caso o nome dele. O nome dele seria no caso igual ao nome do arquivo, por exemplo, tenho um arquivo que se chama musica.mp3 e então musica seria o nome do botão. Segue o código:
private void ButtonTauntSounds_Click(object sender, RoutedEventArgs e) { Button b = (Button)sender; try { mediaTaunt.Source = new Uri("Sounds/Taunt/" + b.Name + ".mp3", UriKind.Relative); mediaTaunt.Play(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } private void ButtonTerrainSounds_Click(object sender, RoutedEventArgs e) { try { if (_sound != null) { _sound.Dispose(); Button b = (Button)sender; string path = "Sounds/Terrain/" + b.Name + ".wav"; LoadSound(path, out _sound); _sound.Play(); } else { Button b = (Button)sender; string path = "Sounds/Terrain/" + b.Name + ".wav"; LoadSound(path, out _sound); _sound.Play(); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Quando eu altero o Source do mídia ele não funciona, somente quando eu coloco ele na mão mesmo:
<MediaElement Name="mediaTaunt" AutoPlay="False" Source="Sounds\Taunt\Wololo.mp3"/>
Outro problema que acontece é que o som sai meio estranho, parece que falta alguns "sons".
Quem tiver alguma dica ai seria bem vinda! Desde alguma biblioteca para converter de mp3 pra wav, ou qualquer coisa do tipo.
Abraços! :D
Respostas
-
Rodrigo,
em relação a tocar o áudio, você precisa considerar os conceitos de background áudio. Isso porque caso não o faça, sua aplicação irá parar de tocar o som quando a deixar. além de tudo, acabamos recriando a roda, o que torna tudo mais complexo. você verá que, ao usar o template e o projeto de bg audio a coisa é bem simples, para que seu som seja executado usando soluções nativas , etc..
veja esses dois artigos, ficará MUITO claro.
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394039(v=vs.105).aspx
http://blogs.msdn.com/b/wpukcoe/archive/tags/background+audio/
E isso o fará poder tocar seus wma, mp3, isso não tem interferência. se é suportado pelo windows phone, então funcionará com o template e sua app background audio
grande abraço!Rodolpho Marques do Carmo Microsoft MVP - Windows Phone Development @rodocarmo http://www.conexaowindows.com http://www.rodolphomarques.com http://www.windowsphonebrasil.net
- Marcado como Resposta Rodrigo Exterkoetter sexta-feira, 16 de novembro de 2012 17:53
-
Opa, valeu pela ajuda Rodolfo.
Li os artigos que você indicou, realmente muito bons. Não pretendia usar esse conceito mas, ele vai me servir mais futuramente.
Eu fiz bem simples mesmo, dei mais uma pesquisada e fiz da seguinte forma. Como meu aplicativo somente executará o arquivo .mp3 (sendo que fechando o aplicativo o som para de tocar) fiz da seguinte forma:
Usei a biblioteca do xna.
using Microsoft.Xna.Framework.Media;
Criei a variável global
public Song _song;
O método que é ativado quando o botão é pressionado é este:
private void ButtonStreamSounds_Click(object sender, RoutedEventArgs e) { try { if (_song != null) { MediaPlayer.Stop(); Button b = (Button)sender; _song = Song.FromUri((string)b.Content, new Uri("Sounds/Stream/" + b.Content + ".mp3", UriKind.Relative)); MediaPlayer.Play(_song); } else { Button b = (Button)sender; _song = Song.FromUri((string)b.Content, new Uri("Sounds/Stream/" + b.Content + ".mp3", UriKind.Relative)); MediaPlayer.Play(_song); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Pra mim esse simples método resolveu o problema.
Agradeço o Rodolpho pelo apoio que conhecimento extra.
Abraços.
- Marcado como Resposta Rodrigo Exterkoetter sexta-feira, 16 de novembro de 2012 17:53
Todas as Respostas
-
Rodrigo,
em relação a tocar o áudio, você precisa considerar os conceitos de background áudio. Isso porque caso não o faça, sua aplicação irá parar de tocar o som quando a deixar. além de tudo, acabamos recriando a roda, o que torna tudo mais complexo. você verá que, ao usar o template e o projeto de bg audio a coisa é bem simples, para que seu som seja executado usando soluções nativas , etc..
veja esses dois artigos, ficará MUITO claro.
http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh394039(v=vs.105).aspx
http://blogs.msdn.com/b/wpukcoe/archive/tags/background+audio/
E isso o fará poder tocar seus wma, mp3, isso não tem interferência. se é suportado pelo windows phone, então funcionará com o template e sua app background audio
grande abraço!Rodolpho Marques do Carmo Microsoft MVP - Windows Phone Development @rodocarmo http://www.conexaowindows.com http://www.rodolphomarques.com http://www.windowsphonebrasil.net
- Marcado como Resposta Rodrigo Exterkoetter sexta-feira, 16 de novembro de 2012 17:53
-
aaaa , mais uma coisa. em relação ao seu wav.
aqui está a lista do que é suportado
http://msdn.microsoft.com/en-us/library/ff462087(VS.92).aspx
AAC, MP3, WMA, etc... procure usar um deles, ok ? até por ser algo empacotado, com provavelmente um tamanho menor e que torna sua aplicação mais leve..caso queira tocar um wav, dei uma olhada agora aqui, pois nunca tentei algo do tipo, mas veja essa solução proposta pela nokia... apesar de eu nãor ecomencar muito seguir um caminho desse, tudo bem?? tenta focar no mp3 se tiver como!
Rodolpho Marques do Carmo Microsoft MVP - Windows Phone Development @rodocarmo http://www.conexaowindows.com http://www.rodolphomarques.com http://www.windowsphonebrasil.net
-
Opa, valeu pela ajuda Rodolfo.
Li os artigos que você indicou, realmente muito bons. Não pretendia usar esse conceito mas, ele vai me servir mais futuramente.
Eu fiz bem simples mesmo, dei mais uma pesquisada e fiz da seguinte forma. Como meu aplicativo somente executará o arquivo .mp3 (sendo que fechando o aplicativo o som para de tocar) fiz da seguinte forma:
Usei a biblioteca do xna.
using Microsoft.Xna.Framework.Media;
Criei a variável global
public Song _song;
O método que é ativado quando o botão é pressionado é este:
private void ButtonStreamSounds_Click(object sender, RoutedEventArgs e) { try { if (_song != null) { MediaPlayer.Stop(); Button b = (Button)sender; _song = Song.FromUri((string)b.Content, new Uri("Sounds/Stream/" + b.Content + ".mp3", UriKind.Relative)); MediaPlayer.Play(_song); } else { Button b = (Button)sender; _song = Song.FromUri((string)b.Content, new Uri("Sounds/Stream/" + b.Content + ".mp3", UriKind.Relative)); MediaPlayer.Play(_song); } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
Pra mim esse simples método resolveu o problema.
Agradeço o Rodolpho pelo apoio que conhecimento extra.
Abraços.
- Marcado como Resposta Rodrigo Exterkoetter sexta-feira, 16 de novembro de 2012 17:53