首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SoundPlayer播放多个声音

使用SoundPlayer播放多个声音
EN

Stack Overflow用户
提问于 2009-08-16 20:37:56
回答 6查看 24.2K关注 0票数 14

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

我使用SoundPlayer播放.WAV文件中的声音。我该如何解决这个问题呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-08-16 20:43:32

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

票数 7
EN

Stack Overflow用户

发布于 2011-07-18 12:58:05

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

代码语言:javascript
复制
// Sound api functions
[DllImport("winmm.dll")]
static extern Int32 mciSendString(string command, StringBuilder buffer, int bufferSize, IntPtr hwndCallback);

在上面的函数中,关键是第一个参数命令。只要您使用单独的命令名调用两个函数,它们将分别/同时播放。这是我在我的一个C#程序中所做的:

代码语言:javascript
复制
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;
}

编辑:添加了工作示例的链接。

票数 7
EN

Stack Overflow用户

发布于 2012-02-03 05:53:18

你可以这样做:

SoundPlayer支持WAV流。你可以

  • MIX samples you play 'by-hand‘and,
  • Fake (从某个地方获取WAV报头,这并不复杂)。

并将这样的流作为参数提供给the SoundPlayer constructor

这样你就不用使用复杂的DirectSound库了,而且仍然有混音功能(同时有多个声音)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1285294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档