C'è un modo semplice per riprodurre più suoni contemporaneamente in C# o VB.Net. Dovrai chiamare la funzione API mciSendString()
per riprodurre ogni file .wav. Non dovrai nemmeno fare il multi-threading, a meno che non stiate eseguendo il loop. Here è un esempio operativo completo di una classe MusicPlayer
creata utilizzando mciSendString()
.
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
Nella funzione sopra riportata, il tasto è il primo comando di parametro. Finché si chiamano due funzioni con un nome di comando separato, queste suoneranno separatamente/simultaneamente. Questo è quello che ho fatto in uno dei miei programmi 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;
}
MODIFICA: aggiunto collegamento a un esempio di lavoro.
fonte
2011-07-18 04:58:05
Questo funziona, ma solo se si invia ogni volta un nuovo nome traccia univoco, è questo in base alla progettazione?Se provi a riprodurre un altro suono su un trackname utilizzato in precedenza (anche molto tempo dopo che il primo si è fermato), è silenzioso. – Sire
@Sire Questo non dovrebbe accadere. Sei sicuro di inviare il comando "stop" seguito dal comando "close" una volta completata la riproduzione? Puoi fare riferimento alla mia intera implementazione di MusicPlayer [qui] (http://pastebin.com/TtrCdeER). Prestare particolare attenzione a PlayWorker() che viene chiamato all'interno di un thread per la riproduzione di un audio. –
Grazie per il codice completo! Vorrei aggiungere questo link alla risposta. – Sire