Hay una manera simple de reproducir varios sonidos a la vez en C# o VB.Net. Tendrá que llamar a la función de API mciSendString()
para reproducir cada archivo .wav. Ni siquiera tendrá que hacer varios subprocesos, a menos que esté jugando en bucle. Here es un ejemplo de trabajo completo de una clase MusicPlayer
creada usando mciSendString()
.
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
En la función anterior, la tecla es el primer comando de parámetro. Siempre que llame a dos funciones con un nombre de comando separado, se reproducirán por separado/simultáneamente. Esto es lo que hice en uno de mis programas C#:
private void PlayWorker()
{
StringBuilder sb = new StringBuilder();
mciSendString("open \"" + FileName + "\" alias " + this.TrackName, sb, 0, IntPtr.Zero);
mciSendString("play " + this.TrackName, sb, 0, IntPtr.Zero);
IsBeingPlayed = true;
}
EDITAR: Agregó un enlace a un ejemplo de trabajo.
Esto funciona pero solo si envía un nuevo nombre de pista único cada vez, ¿es esto por diseño?Si intenta reproducir otro sonido en un nombre de pista utilizado anteriormente (incluso mucho después de que se detuvo el primero), es silencioso. – Sire
@Sire Eso no debería suceder. ¿Estás seguro de que estás enviando el comando "detener" seguido del comando "cerrar" después de completar la reproducción? Puede consultar toda la implementación de MusicPlayer [aquí] (http://pastebin.com/TtrCdeER). Preste especial atención a PlayWorker() que se llama dentro de un hilo para reproducir un audio. –
¡Gracias por el código completo! Agregaría ese enlace a la respuesta. – Sire