2009-02-25 123 views
2

我期待開發一個Silverlight應用程序,它將從Web服務器中獲取數據流(不是音頻流本身)。Silverlight的音頻輸出

然後將操縱數據流以提供某種格式的音頻(例如G.711a-Law),然後將其轉換成PCM以便可以施加額外的效果(例如增大音量)。

我很好,至此。我已經獲得了我的數據,將G.711轉換爲PCM,但是我的問題是能夠將此PCM音頻輸出到聲卡。

我基於某個.NET應用程序的某些C#代碼的解決方案,但在Silverlight中,嘗試獲取代理(函數指針)的副本時會出現問題,這將成爲單獨問題的主題,已經生成了一個簡單的代碼示例

所以,問題是......我怎樣才能輸出我在我的Silverlight中的數據結構(當前是一個數組)中保存的PCM音頻給用戶? (請不要說將字節值寫入文本框)

如果是MP3或WMA文件,我會使用MediaElement播放它,但我不希望將其作爲文件存儲到此文件中會對音頻應用動態效果產生壓迫感。

我見過一些人說低級別的音頻支持很差/不存在於Silverlight中,所以我願意接受任何人的建議/想法。

回答

4

簡單的答案是,從Silverlight版本2中不支持PCM播放。所以,除非你想寫一個完全託管的PCM到MP3轉換器,否則你會被卡住。即使那樣我也不確定你可以讓MediaElement從孤立的存儲中播放。

有沒有可能使用Web服務執行轉換?

也看到這個問題: Where's the sound API in Silverlight? Or, how do I write a music app to run in the browser?

更新:的Silverlight 3支持自定義音頻源。但是,它不會讓你攔截樣本來對WMA或MP3進行效果,這大概是出於DRM原因,所以你仍然可能需要編寫自己的解碼器。

+0

馬克, 感謝您的迴應。 Silverlight看起來並不會讓我做我想做的事(然而 - 也許有時候會這樣),所以現在我將焦點轉向WPF/XBAP。只需要理清部署一個完全可信的應用程序,但如果我正在努力掙扎,我會提出另一個問題。 – LeeC 2009-03-02 09:15:48

0

馬克希思的答案是正確的 - 只支持某些格式 - mp3和某些WMA風格(遺憾的是不是WMA無損,與PCM更接近)。

要在Silverlight中播放PCM數據,您可以執行以下操作:
*將P​​CM轉換爲mp3數據並將其存儲在內存中。
*使用ManagedMediaHelpers提供的技術播放mp3數據。這裏的想法涉及一個名爲Mp3MediaStreamSource的類(從System.Windows.Media.MediaStreamSource派生),它爲MediaElement播放提供了mp3塊。這些塊需要在流中,但是當然會有內存流。

我最初認爲你可能能夠通過MediaStreamSource提供PCM塊,但這是行不通的。這真是太遺憾了,因爲它可以很容易地解決你的問題(以及我正在面對的 - 製作Speex音頻文件播放器)!

0

看起來Silverlight 3現在支持直接PCM輸出,或者將會在發佈時支持。我還沒有看到有關原始AV管道的文檔中的任何內容。