none
Como tocar dois sons simultâneos em C# RRS feed

  • Pergunta

  • Boa noite pessoal.
    Montei um formulário Windows Forms que quando ativo toca uma "música de fundo". Nesse formulário, ao clicar em determinado botão eu gostaria de tocar um outro som, mas quando este inicia aquele para.

    Como poderei fazer os dois tocarem ao mesmo tempo?

    Eu utilizo o seguinte código:

    SoundPlayer simpleSound = new SoundPlayer(@"c:\Windows\Media\chimes.wav");
    simpleSound.Play();

    sexta-feira, 30 de outubro de 2015 22:06

Respostas

  • Utilizando a função mciSendString que é nativa do Windows:

    //Declaração
    
    [DllImport("winmm.dll")]
            static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
    
    
    //Chamadas
    
                mciSendString(@"open c:\sons\1.wav type waveaudio alias som1", null, 0, IntPtr.Zero);
                mciSendString(@"play som1", null, 0, IntPtr.Zero);
    
                mciSendString(@"open c:\sons\2.wav type waveaudio alias som2", null, 0, IntPtr.Zero);
                mciSendString(@"play som2", null, 0, IntPtr.Zero);
    Não se esqueça de declarar a namespace System.Runtime.InteropServices

    • Sugerido como Resposta SimorC domingo, 1 de novembro de 2015 22:57
    • Marcado como Resposta _Valentim sábado, 7 de novembro de 2015 18:00
    sábado, 31 de outubro de 2015 03:22

Todas as Respostas

  • Tenta assim:

    SoundPlayer play1 = new SoundPlayer(@"c:\Windows\Media\som1.wav");
    play1.Play();
    
    System.Threading.Thread.Sleep(500);
    
    SoundPlayer play2 = new SoundPlayer(@"c:\Windows\Media\som2.wav");
    play2.Play();

    sexta-feira, 30 de outubro de 2015 22:11
  • Boa noite.

    _Valentim, acredito que com SoundPlayer não seja possível dar play em dois sons ao mesmo tempo.

    Tente ver a biblioteca System.Windows.Media.MediaPlayer para fazer o que tu precisas.

    Edit: Acho que até é possível dar play em dois sons com o SoundPlayer, porém é preciso fazer o uso de outras API's. Se o uso do SoundPlayer não for obrigatório, recomendo a outra biblioteca.


    Att., Rafael Simor




    • Editado SimorC sexta-feira, 30 de outubro de 2015 23:23
    sexta-feira, 30 de outubro de 2015 22:53
  • Diego, fazendo dessa maneira o som "play1" para de tocar quando o "play2" começa.
    sexta-feira, 30 de outubro de 2015 22:56
  • Utilizando a função mciSendString que é nativa do Windows:

    //Declaração
    
    [DllImport("winmm.dll")]
            static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
    
    
    //Chamadas
    
                mciSendString(@"open c:\sons\1.wav type waveaudio alias som1", null, 0, IntPtr.Zero);
                mciSendString(@"play som1", null, 0, IntPtr.Zero);
    
                mciSendString(@"open c:\sons\2.wav type waveaudio alias som2", null, 0, IntPtr.Zero);
                mciSendString(@"play som2", null, 0, IntPtr.Zero);
    Não se esqueça de declarar a namespace System.Runtime.InteropServices

    • Sugerido como Resposta SimorC domingo, 1 de novembro de 2015 22:57
    • Marcado como Resposta _Valentim sábado, 7 de novembro de 2015 18:00
    sábado, 31 de outubro de 2015 03:22
  • Boa tarde.  Eu não consegui utilizar a biblioteca System.Windows.Media.MediaPlayer, recomendada pelo SimorC, ela nem sequer aparece. Teria que fazer algo antes para utiliza-la?

    Consegui tocar utilizando a função mciSendString. Obrigado André.

    E só pra complementar... Como eu faço pra quando o toque terminar, iniciar novamente?


    sábado, 7 de novembro de 2015 18:06