繁体   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