Cómo reproducir un sonido en C #, .NET

124

Tengo una aplicación de Windows escrita en C # /. NET.

¿Cómo puedo reproducir un sonido específico cuando se hace clic en un botón?

Khilen Maniyar
fuente

Respuestas:

233

Podrías usar:

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"c:\mywavfile.wav");
player.Play();
bporter
fuente
32
Esta es la respuesta perfecta porque un nuevo usuario puede entender que SoundPlayer pertenece a System.Media ....
Khilen Maniyar
30
@Ali ... stackoverflow.com/questions/2361857/what-does-means-in-c-sharp "Significa interpretar la siguiente cadena como literal. Es decir, la \ en la cadena será realmente una" \ "en el salida, en lugar de tener que poner "\\" para significar el carácter literal "
Praveen
La respuesta de @ Praveen acaba de dar otro hecho informativo. Gracias a Dexter por preguntar ese símbolo "@".
Allen Linatoc
2
@bporter, esto no parece funcionar con archivos mp3; está restringido solo al formato wav
Najeeb
¡Qué pena esta API! No reproduce archivos MP3 ni MIDI. Completamente inútil para mí. Windows tiene soporte nativo para MP3 y MIDI desde al menos Windows XP. ¡Qué vergüenza en Microsoft!
Elmue
91

Puede utilizar SystemSound , por ejemplo, System.Media.SystemSounds.Asterisk.Play();.

Ta01
fuente
muy útil. Puede ayudar usar los valores predeterminados del sistema.
Babak.Abad
44
Es importante tener en cuenta que si desactiva los sonidos del sistema en la configuración de Windows (al menos Windows más reciente), no reproduce nada.
Artholl
32

Para Windows Forms, una forma es utilizar el 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 de MSDN

Esto también funcionará con WPF, pero tiene otras opciones como usar la MediaPlayer página MSDN

ChrisF
fuente
1
Aún mejor, en el código de producción, créelo solo una vez y úselo muchas veces en lugar de crearlo cada vez que presione el botón.
Shibumi
Cambiaría el nombre de esa función a ButtonClick, simplemente porque parece que sigue el estilo de C # nombrando más.
Ethan Bierlein
1
@EthanBierlein: probablemente fue la convención de nombres cuando
publiqué
1
Huh Entonces, ¿esa era la antigua convención?
Ethan Bierlein
@EthanBierlein sigue siendo lo que se genera automáticamente mediante los proyectos de formularios de Windows de Visual Studio
JAD
13

Información Adicional.

Esta es una respuesta de alto nivel para aplicaciones que desean encajar perfectamente en el entorno de Windows.Los detalles técnicos de la reproducción de un sonido particular se proporcionaron en otras respuestas. Además de eso, siempre tenga en cuenta estos dos puntos:

  1. Use cinco sonidos estándar del sistema en escenarios típicos , es decir

    • Asterisco : juega cuando quieras resaltar el evento actual

    • Pregunta : jugar con preguntas (la ventana del cuadro de mensaje del sistema reproduce esta)

    • Exclamación : juega con el icono de excalamación (la ventana del cuadro de mensaje del sistema reproduce este)

    • Bip (sonido predeterminado del sistema)

    • Parada crítica ("Mano"): juega con error (la ventana del cuadro de mensaje del sistema reproduce esta)
       

    Los métodos de clase System.Media.SystemSoundslos jugarán por ti.
     

  2. Implemente cualquier otro sonido que sus usuarios puedan personalizar en Sound panel de control de

    • De esta forma, los usuarios pueden cambiar o eliminar fácilmente los sonidos de su aplicación y no necesita escribir ninguna interfaz de usuario para esto: ya está allí
    • Cada perfil de usuario puede anular estos sonidos a su manera
    • Cómo:
      • Cree el perfil de sonido de su aplicación en el Registro de Windows (Sugerencia: no necesita programación, simplemente agregue las claves al instalador de su aplicación).
      • En su aplicación, lea la ruta del archivo de sonido o el recurso DLL de sus claves de registro y reprodúzcalo. (Cómo reproducir sonidos que puedes ver en otras respuestas).
miroxlav
fuente
Gracias por esta información extra. Me gustaría agregar un ejemplo: System.Media.SystemSounds.Hand.Play(); Thread.Sleep(2000);reproduce el sonido Hand . Tenga en cuenta que se reproduce de forma asincrónica, aquí agregué un comando de suspensión para esperar la finalización del sonido. Si no espera y reproduce otro sonido, el anterior se detiene inmediatamente.
Matt
2

Para reproducir un archivo de audio en el formulario de Windows usando C #, veamos un ejemplo simple de la siguiente manera:

1.Vaya a Visual Studio (VS-2008/2010/2012) -> Menú Archivo -> haga clic en Nuevo proyecto.

2.En el Proyecto nuevo -> haga clic en Aplicación de formularios Windows Forms -> Dar nombre y luego haga clic en Aceptar.

Se abrirá un nuevo proyecto de "Formularios de Windows".

3.Arrastre y suelte un control de botón desde el cuadro de herramientas al formulario de Windows.

4. Haga doble clic en el botón para crear automáticamente el controlador de eventos Click predeterminado y agregue el siguiente código.

Este código muestra el cuadro de diálogo Abrir archivo y pasa los resultados a un método llamado "playSound" que creará en el siguiente paso.

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


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

5. Agregue el siguiente código de método debajo del botón1_Haga clic en el controlador de eventos.

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

6. Ahora ejecutemos la aplicación simplemente presionando el F5 para ejecutar el código.

7. Haga clic en el botón y seleccione un archivo de audio. Después de cargar el archivo, se reproducirá el sonido.

Espero que este sea un ejemplo útil para principiantes ...

Vaibhav_Welcomes_You
fuente
1

Creo que primero debe agregar un archivo .wav a Recursos. Por ejemplo, tiene un archivo de sonido llamado Sound.wav. Después de agregar el archivo Sound.wav a Recursos, puede usar este código:

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

Esta es otra forma de reproducir sonido.

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