WPF中哪个音频播放框架?

Mar*_*ngs 5 c# audio wpf .net-4.0

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

在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对我来说似乎有点过分(太大),因为我不是在开发游戏,而是开发应用程序.有关更多信息,请参阅此问题.
    它应该是MDX的替代品,但我读了很多关于它的实现的可怕故事.还是所有童话故事?
  • SlimDX可能是一个选项,但它是第三方产品,也是一个相当大的项目.
  • 我知道有一些"较小"的解决方案,每个都有它自己的缺点:
    • MediaElement(仅限WMP10 +)
    • 使用WinMM进行P/Invoke
    • 播放声音
    • 声音播放
    • 媒体播放器
  • 野外有大量的自定义音频库,它们或多或少都能正常工作.
    (NAudio,BASS,waveOut ......)

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

提前致谢!

Mar*_*ath 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更容易.