2011-02-14 52 views
4

我知道这听起来像一个主观的问题,但我需要一些关于这个论题有理有据的观点:WPF中的音频播放框架?

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

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

直到现在我用的DirectSound相处得很好(使用微软的DirectX SDK),它适合所有提到的要求以上。由于Visual Studio 2010(.Net 4.0),Managed DirectX(MDX)不再受支持,并且它也从最新的DirectX SDK中消失。

我现在有哪些选择?

  • XNA对我来说看起来有些矫枉过正(太大),因为我没有开发一款游戏,而是一款应用程序。有关更多信息,请参阅this question
    它应该是MDX的替代品,但我读了很多关于它的实现的可怕故事。或者是所有的童话故事?
  • SlimDX可能是一个选项,但它是第三方产品,也是一个相当大的项目。
  • 有一些 “更小” 的解决方案,我所知道的,每个都有它自身的缺点:与WINMM
  • PlaySound
  • 声音播放
    • 的MediaElement(只有WMP10 +)
    • 的P/Invoke MediaPlayer
  • 有很多自定义音频库在野外工作,或多或少地工作湖
    (n音讯,BASS,waveOut ...)

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

在此先感谢!

+0

我很好奇你为什么排除第三方非托管库。毕竟,DirectX是非托管代码。任何声音库都会在某个级别具有非托管代码。为什么Microsoft非托管库可以,第三方库不可以? – 2011-02-14 13:32:45

+0

他们一开始就没问题,因为我认为M $会为他们自己的产品提供比第三方解决方案更好的支持,但是因为他们停止了DirectX,所以我甚至不知道这些......现在我害怕一些未来的.Net版本将不支持现在可能工作的任何东西,因为它不是来自M $。 – 2011-02-14 13:45:24

回答

5

听起来相当多的选项会做你需要什么,但我会根据您的要求作出回应的NAudio

低延迟(回放立即开始)

没有音频库将立即开始。使用WaveOut API,NAudio可以轻松处理大约50ms的延迟。可能更快,如果你使用WASAPI

代码应该是原生的C#(.NET 4.0)

n音讯代码是原生的C#&包括包装的Windows API的

必须用WPF

相处

n音讯正常工作与WPF

多个同时播放

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

声音缓冲操作

这是对一些你提到的其他选项n音讯的一大优势没有限制。您可以完全访问示例数据,并可以以任何您喜欢的方式进行操作。

保证未来(我想用的东西,还会有几年的支持。)

没有与开源软件没有任何保证。但是由于它的开源,没有任何东西可以阻止你自己修复错误。 NAudio已经有10年了。

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

那么你可以将代码复制到自己的项目,但也有相当多的辅助类的,所以你实际上可能更容易使用该DLL。