如何在Silverlight中将mp3流转换为wav流

本文关键字:转换 wav mp3 中将 Silverlight | 更新日期: 2023-09-27 18:24:28

最近我一直在研究如何在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吗,这样SoundEffects就可以工作了?

顺便说一句,由于性能问题,我不会使用wcf服务发送字节,并在托管的web应用程序中转换它们,这会给我的服务器增加很大的压力,所以像NAudio这样的库可能没有帮助。

所以,任何解决这个难题的好办法,我都会感谢你的帮助。

如何在Silverlight中将mp3流转换为wav流

您可以尝试查看NLayer以从MP3中获取原始音频数据。我建议使用DynamicSoundEffectInstance(请参阅此答案)直接输出音频(无需经过WAV格式流)。

免责声明:我是NLayer的主要贡献者。

祝你好运!