【问题标题】:Playing 2 sounds together at same time同时播放 2 个声音
【发布时间】:2011-01-19 20:19:05
【问题描述】:

为任何笔记本电脑设计游戏:

我想同时播放 2 个声音!按下按钮时的背景音乐和声音!

使用 System.Media 不允许我同时播放 2 个声音。对于背景音乐,我使用了以下内容:

SoundPlayer sp = new SoundPlayer(@"..\..\bin\debug\tribal dance.wav");
sp.Play;

如果我再玩一个SoundPlayer,前一个就会停止!

我希望背景音乐一直播放到表单关闭!同时,如果点击一个按钮,音乐会播放另一种声音!

我还尝试将 Windows Media Player 添加到工具箱并使用它(允许我同时播放 2 个声音)。这很好,但如果我把它放在(@""..\..\bin\debug\tribal dance.wav"); 上,路径会出错 我需要这样说才能被任何计算机读取。

有什么建议吗?

【问题讨论】:

标签: c# .net-3.5


【解决方案1】:

您不能使用 SoundPlayer 同时播放两种声音。

SoundPlayer 正在使用本机 WINAPI PlaySound 函数来完成不支持同时播放声音的任务。创建多个 SoundPlayer 实例无济于事。

有很多选项,其中大部分涉及为窗口的原生音频libraryDirectSound 实现大量低级 API(注意两者都不是 C# 并且需要大量互操作代码)

最简单的选择是依靠 windows 媒体播放器为您播放音频。

添加对“C:\Windows\System32\wmp.dll”的引用

然后使用

var player = new WMPLib.WindowsMediaPlayer();
player.URL = @"..\..\bin\debug\tribal dance.wav";

注意:设置 URL 属性后立即开始播放

这种方法的缺点是您需要依赖媒体播放器才能让您的应用程序正常工作。从好的方面来说,您可以使用媒体播放器支持的任何文件格式。

【讨论】:

    【解决方案2】:

    使用 (WMPLib) Windows Media Player Library,您可以轻松做到这一点。将您的文件保存在 Debug/Sound 文件夹中并遵循以下代码。这将同时运行 2 个文件。要在项目中添加 WMPLib,请通过 NuGet 包管理器添加它。

     WMPLib.WindowsMediaPlayer wplayer = new WMPLib.WindowsMediaPlayer();
     WMPLib.WindowsMediaPlayer wplayer2 = new WMPLib.WindowsMediaPlayer();     
     string play_string = "be.mp3";
     wplayer.URL = @"SOUND/" + play_string;
     wplayer.controls.play();
     string play_string2 = "ba.mp3";
     wplayer2.URL = @"SOUND/" + play_string2;
     wplayer2.controls.play();
    

    【讨论】:

      【解决方案3】:

      http://msdn.microsoft.com/en-us/library/dd562851%28v=VS.85%29.aspx这篇文章可能会有所帮助 如果您需要文件的绝对路径,您可以使用下一个代码

      string soundFile = Path.Combine(Directory.GetCurrentDirectory() + "file.wav");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-20
        • 1970-01-01
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多