我对Windows Phone 8设备的声音播放进行了很多研究,发现了多种解决方案,但它们与我的情况并不完全匹配。
我需要的是:我正在编写一个使用文件作为背景声音的应用程序(C#+ XAML)(在浏览整个应用程序时必须处于 Activity 状态),并且还能够播放音效。
有什么问题:
BackgroundAudio
代理,但它不符合我的要求,因为我希望声音仅在应用程序的后台播放,并且在我的应用程序关闭或未激活时停止播放。 MediaElement
,这没问题,但在浏览整个应用程序时,我无法使其以某种方式播放。如果我离开该页面,媒体将关闭-我想我可以将其用于音效技巧。另外,还有SoundEffect
并不是一个很好的解决方案,因为它只能播放.wav文件...我只能将其用于声音效果,而不能用于背景声音(大文件)。 因此,如果我选择MediaElement / SoundEffect在应用程序中播放声音效果,应该如何继续播放背景声音(仅在我的应用程序内部)。我需要一个解决方案,允许我一次播放2种声音(背景和声音效果),并且仅在应用程序运行时( Activity )播放背景声音...
到目前为止,我很困惑,只能解决声音效果问题。
任何建议,不胜感激。
最佳答案
您在MediaElement
上看到的问题是您将其定义为应用程序页面的一部分,并且一旦它消失在可视树之外(即OnNavigatedFrom
之后),它就会停止播放。
如果您将MediaElement
定义为“可见”作为应用程序框架的一部分,则在您的应用程序处于 Activity 状态时,音频将继续播放(您自然需要处理停用事件)。
如果您这样做,MediaElement
应该适用于您的“背景音频”。
请注意,您的应用程序中只能有一个 Activity 的MediaElement
播放媒体,但是您应该可以将SoundEffect
用于声音效果。
更新:
要将MediaElement
放入框架中,您将需要创建一个自定义PhoneApplicationFrame
类/ XAML,将MediaElement
添加到该XAML中,并在App.xaml.cs中引用您的自定义框架。
// Do not add any additional code to this method
private void InitializePhoneApplication()
{
if (phoneApplicationInitialized)
return;
// Create the frame but don't set it as RootVisual yet; this allows the splash
// screen to remain active until the application is ready to render.
RootFrame = new MyCustomPhoneApplicationFrame();
RootFrame.Navigated += CompleteInitializePhoneApplication;
参见this Dzone article for more about Frame/Page in Windows Phone。
关于c# - 在Windows Phone 8中播放背景声音和声音效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17515823/