由于尺寸原因,我需要将WP7应用程序与压缩音频(mp3,wma等)捆绑在一起。我如何自由/同时播放?
XNA框架只支持WAV文件,所以除非有一个纯C#托管代码库可以动态解压缩mp3 / wma / ogg(?),下一个选项就是......
的MediaElement。但我对MediaElement没有取得好成绩。您似乎需要在xaml中专门添加MediaElement作为标记,并且您不能使用多个实例(多个标记)。只要我播放某个MediaElement,我就无法在同一页面上播放另一个MediaElement。我没有找到任何关于参考中的限制(参考非常空)。 我也试过动态创建MediaElement对象,但这看起来根本没有用,或者我根本无法让它播放文件。
答案 0 :(得分:3)
使用内置的XNA内容管道音效压缩!
SoundEffect
内容类型的默认设置是“最佳”压缩质量(实际上似乎根本没有压缩)。将压缩质量设置为“低”,您将获得更小,更小的文件。或“中等”,以在尺寸和质量之间取得良好的平衡。
要更改此设置,请在解决方案资源管理器中选择.wav
文件,按F4打开属性窗口,展开“内容处理器”节点,然后更改显示的压缩质量设置。
以下是截图说明:
创建一个新的WP7 XNA游戏项目(或以其他方式获得XNA内容项目)
将wav
文件添加到内容项目中:
按F4并在解决方案资源管理器中选择wav
文件,打开属性窗口。
展开“Content Processor”节点并将压缩质量更改为所需的设置。
“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();