簡體   English   中英

如何在Silverlight中將mp3流轉換為WAV流

[英]How to convert mp3 stream to wav stream in Silverlight

最近,我一直在研究如何在Silverlight應用程序中播放音樂,這就是我現在面臨的情況:

(1)我可以使用MediaElement ,但一次只能播放一個音樂文件,因為我無法在項目中使用用戶控件,所以這可能不是解決方案。

(2)我可以使用SoundEffect ,但它僅支持wav文件,即使中等質量的文件也很大。

由於我想同時播放多個音樂文件並控制是否循環播放,因此我認為后一種可能是我的解決方案。

我沒有在項目中放入音樂文件(因此Load<Song>函數對我不起作用),而是將它們放入數據庫中,在獲得所有字節后便可以播放它,如下所示代碼片段:

MemoryStream stream = new MemoryStream(bytes);
SoundEffect sound = SoundEffect.FromStream(stream);
SoundEffectInstance soundInstance = sound.CreateInstance();
if (loopValue.Number == 1.0) soundInstance.IsLooped = true;
soundInstance.Play();

這對wav文件很好用,但是當我用它播放mp3文件時如果拋出異常:

System.Exception: 對 COM 組件的調用返回了錯誤 HRESULT E_FAIL。
位於 Microsoft.Xna.Framework.Audio.XcpImports.CheckHResult(UInt32 hr)
位於 Microsoft.Xna.Framework.Audio.XcpImports.SoundEffect_LoadWavFromStream(SoundEffect soundEffect, Stream stream)
位於 Microsoft.Xna.Framework.Audio.SoundEffect.FromStream(Stream stream)
....

我沒有找到任何可以在Silverlight平台中直接將mp3轉換為wav的庫,我不太了解SoundEffect的內部,因此沒有人可以告訴我如何將mp3字節流轉換為wav,因此SoundEffect可以工作嗎?

順便說一句,由於性能問題,我不會使用wcf服務發送字節,並在托管的Web應用程序中將其轉換,這會給服務器帶來很大壓力,因此像NAudio這樣的庫可能無濟於事。

因此,對於這個難題的任何有效解決方案,我都會感謝您的幫助。

您可以嘗試查看NLayer ,以從MP3中獲取原始音頻數據。 我建議使用DynamicSoundEffectInstance(請參見此答案 )直接輸出音頻(不通過WAV格式流)。

免責聲明:我是NLayer的主要貢獻者。

祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM