WPF中哪个音频播放框架?

时间:2011-02-14 13:17:06

标签: c# wpf .net-4.0 audio

我知道这可能听起来像是一个主观问题,但我需要一些有关这一主题的有根据的意见:

在C#/ WPF GUI中,我需要播放短波文件作为对用户交互的响应 规格如下:

  • 低延迟(立即开始播放)
  • 代码应为原生C#(。Net 4.0)
  • 必须与WPF相处
  • 多个同时播放
  • 对声音缓冲区操作没有限制
  • 保证未来(我想在几年内使用仍会有支持的东西。)
  • 声音播放器模块应该是一个简单的类(= C#代码),而不是封装的dll

到目前为止,我与DirectSound(使用Microsoft DirectX SDK)相处得很好,它符合上面提到的所有要求。从Visual Studio 2010(.Net 4.0)开始,Managed DirectX(MDX)不再受支持,并且它也从最新的DirectX SDK中消失。

我现在有什么选择?

  • XNA对我来说似乎有些过分(太大了),因为我不是在开发游戏,而是开发应用程序。有关更多信息,请参阅this question 它应该是MDX的替代品,但我读了很多关于它的实现的可怕故事。还是所有童话故事?
  • SlimDX可能是一个选项,但它是第三方产品,又是一个相当大的项目。
  • 我知道有一些“较小”的解决方案,每个都有它自己的缺点:
    • MediaElement(仅限WMP10 +)
    • P / Invoke with WinMM
    • PlaySound
    • 声音播放
    • MediaPlayer
  • 野外有大量的自定义音频库,或多或少都有效 (NAudio,BASS,waveOut ...)

我真的很困惑我应该用哪个新项目。我不想深入研究一个全新的框架,只是为了发现它的局限性使我无法使用它。

提前致谢!

1 个答案:

答案 0 :(得分:7)

听起来有很多选项可以满足您的需求,但我会回复您对NAudio的要求

低延迟(立即开始播放)

没有音频库会立即“立即”启动。使用WaveOut API,NAudio可以轻松地在大约50ms的延迟下工作。如果您使用WASAPI

,可能会更快

代码应为原生C#(。NET 4.0)

NAudio代码是原生C#&包含Windows API的包装器

必须与WPF相处

NAudio适用于WPF

多个同步播放

支持多次播放。您可以选择创建一个混音器,进行一次播放并混合输入和输出不同的输入。

对声音缓冲区操作没有限制

这是NAudio相对于您提到的其他一些选项的一大优势。您可以完全访问示例数据,并可以以您喜欢的任何方式进行操作。

保证未来(我想在几年内使用仍会提供支持的东西。)

开源软件无法保证。但是自从它的开源以来,没有什么能阻止你自己修复bug。 NAudio现在已经存在了10年。

声音播放器模块应该是一个简单的类(= C#代码),而不是封装的dll

那么你可以将代码复制到你自己的项目中,但是有很多辅助类,所以你可能会发现使用DLL更容易。