2011-02-14 78 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。