Istnieje jeden prosty sposób na odtwarzanie wielu dźwięków jednocześnie w C# lub VB.Net. Będziesz musiał zadzwonić do funkcji API mciSendString()
, aby odtworzyć każdy plik .wav. Nie musisz nawet wykonywać wielowątkowości, chyba że grasz w pętli. Here to kompletny przykład działania klasy MusicPlayer
utworzonej przy użyciu mciSendString()
.
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
W powyższej funkcji klucz jest pierwszym poleceniem parametru. Dopóki wywołasz dwie funkcje z osobną nazwą polecenia, będą one odtwarzane oddzielnie/jednocześnie. Oto co zrobiłem w jednym z moich programów 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;
}
EDYCJA: Dodano link do działającego przykładu.
Działa to tylko wtedy, gdy za każdym razem wysyłasz NOWY, niepowtarzalny tytuł utworu, czy jest to zgodne z projektem?Jeśli spróbujesz odtworzyć inny dźwięk na poprzednio używanej nazwie utworu (nawet długo po zatrzymaniu pierwszego), jest cicho. – Sire
@Sire To nie powinno się zdarzyć. Czy na pewno wysyłasz polecenie "stop", a następnie polecenie "zamknij" po zakończeniu odtwarzania? Możesz odwołać się do mojej całej implementacji MusicPlayer [tutaj] (http://pastebin.com/TtrCdeER). Zwróć szczególną uwagę na PlayWorker(), który jest nazywany wewnątrz wątku do odtwarzania dźwięku. –
Dzięki za kompletny kod! Dodałbym ten link do odpowiedzi. – Sire