WP7同时/动态地播放许多压缩(mp3,wma等)音频文件

时间:2011-08-11 07:32:56

标签: windows-phone-7 audio xna silverlight-3.0

由于尺寸原因,我需要将WP7应用程序与压缩音频(mp3,wma等)捆绑在一起。我如何自由/同时播放?

XNA框架只支持WAV文件,所以除非有一个纯C#托管代码库可以动态解压缩mp3 / wma / ogg(?),下一个选项就是......

的MediaElement。但我对MediaElement没有取得好成绩。您似乎需要在xaml中专门添加MediaElement作为标记,并且您不能使用多个实例(多个标记)。只要我播放某个MediaElement,我就无法在同一页面上播放另一个MediaElement。我没有找到任何关于参考中的限制(参考非常空)。 我也试过动态创建MediaElement对象,但这看起来根本没有用,或者我根本无法让它播放文件。

4 个答案:

答案 0 :(得分:3)

使用内置的XNA内容管道音效压缩!

SoundEffect内容类型的默认设置是“最佳”压缩质量(实际上似乎根本没有压缩)。将压缩质量设置为“低”,您将获得更小,更小的文件。或“中等”,以在尺寸和质量之间取得良好的平衡。

要更改此设置,请在解决方案资源管理器中选择.wav文件,按F4打开属性窗口,展开“内容处理器”节点,然后更改显示的压缩质量设置。


以下是截图说明:

创建一个新的WP7 XNA游戏项目(或以其他方式获得XNA内容项目)

Create Project

wav文件添加到内容项目中:

Add sound effect

Wav File Added

按F4并在解决方案资源管理器中选择wav文件,打开属性窗口。

Content Properties

展开“Content Processor”节点并将压缩质量更改为所需的设置。

Set Compression

“Best”设置不提供压缩(原始波形),“Medium”和“Low”设置提供更小的文件。

答案 1 :(得分:2)

根据我的经验,目前在WP7上没有很好的解决方案。您可以使用带有XNA的wavs并增加xap的大小,或者使用具有非常有限的MediaElement功能的mp3,从而影响您可以使用它实现的功能。

可能能够将一些C# audio libraries移植到WP7,到目前为止我还没有听说过,所以它可能是远射。

在我的一个应用程序中,我终于决定使用wav + XNA组合,然后玩了不同的选项。

答案 2 :(得分:2)

using Microsoft.Xna.Framework.Media;

void PlaySound(string pathToMp3) {
   Song song = Song.FromUri("name", new Uri(pathToMp3, UriKind.Relative));
   Microsoft.Xna.Framework.FrameworkDispatcher.Update();
   MediaPlayer.Play(song);
}

答案 3 :(得分:1)

您可以使用MediaElement并将源设置为mp3,但无法从代码中更改此内容。

MediaElement me = sender as MediaElement;
me.Source = new Uri(

因为您无法将资源加载到源中。 您可以在xaml中使用多个MediaElements并停止它们并启动您需要的那些。只要您预先确定要在编译时加载哪些文件。

您还可以将这些文件合并为一个并在特定位置播放,如此。

me.Position = new TimeSpan(0, 0, 0, 0, 1);
me.Play();