none
Reproduzir arquivo ".mp3" RRS feed

  • 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


    terça-feira, 13 de novembro de 2012 21:17

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

    quarta-feira, 14 de novembro de 2012 11:03
    Moderador
  • 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.

    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

    quarta-feira, 14 de novembro de 2012 11:03
    Moderador
  • 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!

    http://www.developer.nokia.com/Community/Wiki/How_to_embed_and_play_a_.wav_file_in_Windows_Phone_7_app 


    Rodolpho Marques do Carmo Microsoft MVP - Windows Phone Development @rodocarmo http://www.conexaowindows.com http://www.rodolphomarques.com http://www.windowsphonebrasil.net

    quarta-feira, 14 de novembro de 2012 11:07
    Moderador
  • 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.

    sexta-feira, 16 de novembro de 2012 17:53