Como tocar um som em C #, .NET

124

Eu tenho um aplicativo do Windows escrito em C # / .NET.

Como posso reproduzir um som específico quando um botão é clicado?

Khilen Maniyar
fonte

Respostas:

233

Você poderia usar:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();
bporter
fonte
32
Esta é a resposta perfeita porque um novo usuário pode entender que SoundPlayer pertence a System.Media ....
Khilen Maniyar
30
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Significa interpretar a seguinte string como literal. Significado, o \ na string será realmente um" \ "no saída, em vez de ter de colocar "\\" para significar o caráter literal"
Praveen
A resposta de @ Praveen deu apenas outro fato informativo. Agradecemos a Dexter por solicitar o símbolo "@".
Allen Linatoc
2
@bporter, isso parece não funcionar com arquivos mp3; ele está restrito a wav único formato
Najeeb
Que pena esta API! Não reproduz arquivos MP3 nem MIDI. Completamente inútil para mim. O Windows tem suporte nativo para MP3 e MIDI desde pelo menos o Windows XP. Que vergonha para a Microsoft!
Elmue
91

Você pode usar o SystemSound , por exemplo System.Media.SystemSounds.Asterisk.Play();,.

Ta01
fonte
muito útil. isso pode ajudar a usar os padrões do sistema.
Babak.Abad
4
É importante observar que, se você desativar os sons do sistema nas configurações do Windows (pelo menos no Windows mais recente), ele não reproduzirá nada.
Artholl
32

Para Windows Forms, uma maneira é usar o SoundPlayer

private void Button_Click(object sender, EventArgs e)
{
    using (var soundPlayer = new SoundPlayer(@"c:\Windows\Media\chimes.wav")) {
        soundPlayer.Play(); // can also use soundPlayer.PlaySync()
    }
}

Página MSDN

Isso também funcionará com o WPF, mas você tem outras opções, como usar a MediaPlayer página MSDN

ChrisF
fonte
1
Melhor ainda, no código de produção, crie-o apenas uma vez e use-o várias vezes, em vez de criá-lo sempre que o botão for pressionado.
Shibumi 8/03/12
Eu renomearia essa função para ButtonClick, simplesmente porque parece que segue o estilo de nomear C # mais.
Ethan Bierlein
1
@ EthanBierlein - provavelmente foi a convenção de nomenclatura quando eu
publiquei
1
Hã. Então essa era a antiga convenção?
Ethan Bierlein
@EthanBierlein ainda é o que é gerado automaticamente por projetos Windows Forms do Visual Studio
JAD
13

Informação adicional.

Esta é uma resposta um pouco de alto nível para aplicativos que desejam se encaixar perfeitamente no ambiente do Windows. Detalhes técnicos da reprodução de sons específicos foram fornecidos em outras respostas. Além disso, observe sempre estes dois pontos:

  1. Use cinco sons padrão do sistema em cenários típicos , ou seja,

    • Asterisco - reproduz quando você deseja destacar o evento atual

    • Pergunta - brinque com perguntas (a janela da caixa de mensagens do sistema reproduz esta)

    • Exclamação - toque com o ícone de excalamação (a janela da caixa de mensagens do sistema reproduz esta)

    • Sinal sonoro (som padrão do sistema)

    • Parada crítica ("Mão") - toque com erro (a janela da caixa de mensagens do sistema reproduz esta)
       

    Os métodos de aula System.Media.SystemSoundsos tocarão para você.
     

  2. Implemente outros sons personalizáveis ​​por seus usuários no painel de controle de som

    • Dessa forma, os usuários podem alterar ou remover facilmente sons do seu aplicativo e você não precisa escrever nenhuma interface do usuário para isso - ele já está lá
    • Cada perfil de usuário pode substituir esses sons de maneira própria
    • Como:
      • Crie o perfil sonoro do seu aplicativo no Registro do Windows (Dica: não há necessidade de programação, basta adicionar as chaves no instalador do seu aplicativo.)
      • No seu aplicativo, leia o caminho do arquivo de som ou o recurso DLL das chaves do registro e toque-o. (Como reproduzir sons que você pode ver em outras respostas.)
miroxlav
fonte
Obrigado por esta informação extra. Eu gostaria de adicionar um exemplo: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);toca o som Mão . Observe que ele é reproduzido de forma assíncrona, aqui eu adicionei um comando de suspensão para aguardar a conclusão do som. Se você não esperar e tocar outro som, o anterior pára imediatamente.
Matt
2

Para reproduzir um arquivo de áudio no formulário do Windows usando C #, vamos verificar um exemplo simples da seguinte maneira:

1.Go Visual Studio (VS-2008/2010/2012) -> Menu Arquivo -> clique em Novo projeto.

2.No Novo Projeto -> clique em Aplicativo Windows Forms -> Nome e, em seguida, clique em OK.

Um novo projeto "Windows Forms" será aberto.

3.Arraste e solte um controle de botão da caixa de ferramentas para o formulário do Windows.

4.Clique duas vezes no botão para criar automaticamente o manipulador de eventos Click padrão e adicione o seguinte código.

Este código exibe a caixa de diálogo Abrir arquivo e passa os resultados para um método chamado "playSound" que você criará na próxima etapa.

 OpenFileDialog dialog = new OpenFileDialog();
 dialog.Filter = "Audio Files (.wav)|*.wav";


if(dialog.ShowDialog() == DialogResult.OK)
{
  string path = dialog.FileName;
  playSound(path);
}

5. Adicione o seguinte código de método no manipulador de eventos button1_Click.

 private void playSound(string path)
 {
   System.Media.SoundPlayer player = new System.Media.SoundPlayer();
   player.SoundLocation = path;
   player.Load();
   player.Play();
 }

6.Agora vamos executar o aplicativo pressionando F5 para executar o código.

7.Clique no botão e selecione um arquivo de áudio. Após o carregamento do arquivo, o som será reproduzido.

Espero que este seja um exemplo útil para iniciantes ...

Vaibhav_Welcome_You
fonte
1

Eu acho que você deve primeiro adicionar um arquivo .wav aos recursos. Por exemplo, você tem um arquivo de som chamado Sound.wav. Depois de adicionar o arquivo Sound.wav ao Resources, você pode usar este código:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(Properties.Resources.Sound);
player.Play();

Esta é outra maneira de reproduzir som.

თემო ნემსიწვერიძე
fonte