使用SoundPlayer播放多个声音

10 .net c# audio wav

我正在制作一个采样器程序,其中从1到9的每个键将发出不同的声音.一切正常,但当我同时按下两个(或更多)声音时,第二个"杀死"第一个声音.

我正在使用.WAV文件播放声音SoundPlayer.我怎么解决这个问题?

Rob*_*vey 6

您需要使用DirectX(DirectSound)或一些类似的API,旨在允许同时播放多个声音.


Pra*_*eri 6

有一种简单的方法可以在C#或VB.Net中一次播放多个声音.您必须调用mciSendString()API函数来播放每个.wav文件.除非你是循环播放,否则你甚至不需要做多线程.MusicPlayer使用创建的类的完整工作示例mciSendString().

// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);
Run Code Online (Sandbox Code Playgroud)

在上面的函数中,键是第一个参数命令.只要您使用单独的命令名称调用两个函数,它们将单独/同时播放.这就是我在我的一个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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:添加了一个工作示例的链接.


Pra*_*nan 5

using System.Windows.Media

Function void Play(string audioPath)
{
MediaPlayer myPlayer = new MediaPlayer();
myPlayer.Open(new System.Uri(audioPath));
myPlayer.Play();
}

Play(Application.StartupPath + "\\Track1.wav");
Play(Application.StartupPath + "\\Track2.wav");
Run Code Online (Sandbox Code Playgroud)

该代码可以同时播放两个音频文件,第二个音频的调用track2.wav不会干扰播放track1.wav