c# - 同时播放两种声音

标签 c# winforms

有没有办法同时播放两种声音?

我知道 SoundPlayer 无法执行此操作。 我不能使用 SoundEffect,因为我相信它只是 XNA 的一部分。

这两个必需的声音将在未知的随机时间被调用。声音播放后需要进行控制。即,声音必须能够在播放结束之前停止。

最佳答案

引用 PresentationCoreWindowsBase 并试试这个...

var p1 = new System.Windows.Media.MediaPlayer();
p1.Open(new System.Uri(@"C:\windows\media\tada.wav"));
p1.Play();

// this sleep is here just so you can distinguish the two sounds playing simultaneously
System.Threading.Thread.Sleep(500);

var p2 = new System.Windows.Media.MediaPlayer();
p2.Open(new System.Uri(@"C:\windows\media\tada.wav"));
p2.Play();

编辑 我收到了反对票,可能是因为乍一看,这似乎会在第一个声音结束后播放第二个声音。不是,它们是由windows异步播放的。 sleep 就在那里,所以如果你逐字测试这段代码,你可以听到声音一起播放,如果没有延迟就不会引人注意,因为它们是相同的声音。

这段代码演示了两个声音在不同的线程上相互重叠播放,这有点毫无意义,因为播放无论如何都不会阻塞

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"C:\windows\media\tada.wav"));
        c.Play();
    }).Start();

System.Threading.Thread.Sleep(500);

new System.Threading.Thread(() => {
        var c = new System.Windows.Media.MediaPlayer();
        c.Open(new System.Uri(@"C:\windows\media\tada.wav"));
        c.Play();
    }).Start();

http://msdn.microsoft.com/en-us/library/system.windows.media.mediaplayer.stop.aspx 该类还具有停止播放所需的控件

关于c# - 同时播放两种声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240002/

相关文章:

c# - 如何保存 ObservableCollection?

c# - MSBuild 项可以使用目标设置的属性吗?

C# Windows 窗体 : Splitter flickering

c# - 为 DataGridView 行分配颜色

c# - 使用 DataGridViewImageColumn 将图像添加到 DataGridView

c# - 读取二进制文件并使用 Response.BinaryWrite()

c# - 我的应用域不会卸载

c# - 如何使用X509证书和C#进行非对称加密?

c# - NotifyIcon Windows 10 适用于调试但不适用于发布

c# - 保留最后 N 个项目并从 ListBox 中删除其他项目