如何一次播放多个 mp3/wma 文件?

Posted

技术标签:

【中文标题】如何一次播放多个 mp3/wma 文件?【英文标题】:How to play multiple mp3/wma files at once? 【发布时间】:2011-04-25 19:35:22 【问题描述】:

我需要在我的 WP7 应用程序中同时播放多个音效。 我目前使用它处理大约 5 兆字节的 wav 文件,而不是使用 wma/mp3 编码时的 500kb。

当前部分代码:

 Stream stream = TitleContainer.OpenStream(String.Format("/location/0.wav", value)
 SoundEffect effect = SoundEffect.FromStream(stream);
 effect.Play();

这在循环中效果很好,准备好所有效果,然后播放它们。

但是,我真的很想使用 mp3/wma/whatever-codec 来精简我的 xap 文件。

我尝试使用MediaElement,但您似乎也无法使用它来播放多个文件。此外,XNA MediaPlayer 无法实例化,据我所知,无法同时播放多个文件。

我看到的唯一解决方案是我以某种方式将mp3 解码为wav 并将Stream 提供给SoundEffect

关于如何完成多重播放的任何想法?或者关于如何将mp3 解码为wav 的建议?

【问题讨论】:

我不是移动开发人员,但我可能会建议 WAV 可能是最好的选择。解码 MP3 需要一些 CPU 能力。我不知道在较新的设备上这有多么微不足道,但是一次执行多个操作可能会遇到麻烦。您可能会考虑使用更轻量级的编解码器,或者在应用程序启动时将 MP3 解码为 RAM 中的原始未压缩音频。 【参考方案1】:

关于转换...抱歉 - 但我认为目前没有任何可用于 WMA 或 MP3 解码的 api。

另外,我认为没有任何 MP3、WMA 或 Ogg 解码器的实现可以在纯 c# 代码中使用——我见过所有这些都使用 DirectShow 或 PInvoke——例如见C# Audio Library。

我个人确实希望音频/视频压缩/解压缩功能在不久的将来在 WP7 API 中可用 - 但我无法猜测何时!

对于一些简单的压缩,您可以尝试发送单声道文件而不是立体声文件,或者发送 8 位而不是 16 位音频文件 - 这些很容易在手机上转换回 16 位(分辨率明显下降)。

使用 zip 之类的压缩也可能有助于一些声音效果...但我不认为它会取得巨大成功。

【讨论】:

以上是关于如何一次播放多个 mp3/wma 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何将mp3等音频文件转换为asf格式?

怎样把(波形)声音格式(wav)转换成mp3、wma等其他音频格式?

一次播放多个声音文件

C++ 一次播放多个 WAVE 资源文件

一次在 Safari 上播放多个音频文件

如何在 C# 中一次播放多个声音