我正在制作一个采样器程序,其中从1到9的每个键都会发出不同的声音。一切正常,但当我同时按下两个(或更多)声音时,第二个声音会“杀死”第一个声音。
我使用SoundPlayer播放.WAV文件中的声音。我该如何解决这个问题呢?
发布于 2009-08-16 20:43:32
您将需要使用DirectX (DirectSound)或一些类似的API,这些API旨在允许同时播放多个声音。
发布于 2011-07-18 12:58:05
在C#或VB.Net中,有一种简单的方法可以同时播放多个声音。您必须调用mciSendString()接口函数来播放每个.wav文件。你甚至不需要做多线程,除非你是循环播放。Here是一个使用mciSendString()创建的MusicPlayer类的完整工作示例。
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);在上面的函数中,关键是第一个参数命令。只要您使用单独的命令名调用两个函数,它们将分别/同时播放。这是我在我的一个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;
}编辑:添加了工作示例的链接。
发布于 2012-02-03 05:53:18
你可以这样做:
SoundPlayer支持WAV流。你可以
并将这样的流作为参数提供给the SoundPlayer constructor。
这样你就不用使用复杂的DirectSound库了,而且仍然有混音功能(同时有多个声音)。
https://stackoverflow.com/questions/1285294
复制相似问题