2011-01-19 14 views
7

Diseñando un juego para cualquier computadora portátil:Reproducción de 2 sonidos juntos al mismo tiempo

¡Quiero tocar 2 sonidos al mismo tiempo! ¡Una música de fondo y un sonido al presionar un botón!

Usar System.Media no me permitirá reproducir 2 sonidos juntos. Para música de fondo, he utilizado la siguiente:

SoundPlayer sp = new SoundPlayer(@"..\..\bin\debug\tribal dance.wav"); 
sp.Play; 

Si he jugado otra SoundPlayer, la anterior se detiene!

¡Quiero que la música de fondo siga reproduciéndose hasta que se cierre el formulario! Y al mismo tiempo, si se hace clic en un botón, se reproducirá otro sonido con la música.

También probé a agregar el Windows Media Player a la caja de herramientas y lo usé (permitiéndome 2 sonidos play 2 al mismo tiempo). Eso funciona bien, pero la ruta dará un error si lo puse (@""..\..\bin\debug\tribal dance.wav"); y necesito decirlo de esa manera para que cualquier computadora pueda leerlo.

¿Alguna sugerencia?

+0

posible duplicación de [Reproducir archivo wav asincrónico varias veces con .net] (http://stackoverflow.com/questions/4429513/play-wav-file-async-multiple-times-with-net) –

+1

Esto no es una respuesta directa a su pregunta, pero le recomiendo usar FMOD para el sonido en su juego. Es muy fácil de usar y diseñado para juegos. – JimDaniel

Respuesta

6

no puede reproducir dos sonidos a la vez utilizando SoundPlayer.

SoundPlayer está utilizando la función nativa WINAPI PlaySound para realizar la tarea que no admite la reproducción de sonidos simultáneos. Crear múltiples instancias de SoundPlayer no ayudará.

hay muchas opciones mayoría de las cuales implican la aplicación de una gran cantidad de la API de bajo nivel de audio nativo de ventana library o DirectSound (nota tampoco lo son C# y requieren una gran cantidad de código de interoperabilidad)

La opción más simple sería que depender en Windows Media Player para reproducir el audio por ti.

Añadir una referencia a "C: \ Windows \ System32 \ wmp.dll"

a continuación, utilizar

var player = new WMPLib.WindowsMediaPlayer(); 
player.URL = @"..\..\bin\debug\tribal dance.wav"; 

Nota: La reproducción se inicia inmediatamente después de establecer la propiedad URL

El lado negativo de este enfoque es su confianza en el reproductor multimedia para que su aplicación funcione correctamente. Por el lado positivo, puede usar cualquier formato de archivo compatible con el reproductor multimedia.

Cuestiones relacionadas