繁体   English   中英

在Windows Phone 8中播放背景声音和声音效果

[英]Play Background Sound and Sound Effect in Windows Phone 8

我对Windows Phone 8设备的声音播放进行了大量研究,发现了多种解决方案,但它们与我的情况并不完全匹配。

我需要的是:我正在编写一个使用文件作为背景声音的应用程序(C#+ XAML)(在浏览整个应用程序时必须处于活动状态),并且还能够播放音效。

有什么问题:

  • 对于背景声音,我可以使用BackgroundAudio Agent,但它不符合我的要求,因为我希望声音仅在应用程序的背景下播放,并且在我的应用程序关闭或未激活时停止播放。
  • 对于声音效果-我尝试使用MediaElement可以,但在浏览整个应用程序时无法设法使其播放。 如果我离开该页面,媒体将关闭-我想我可以将其用于音效技巧。 另外,还有SoundEffect并不是一个很好的解决方案,因为它只能播放.wav文件...我只能将它用于声音效果,而不能用于背景声音(大文件)。

因此,如果我选择MediaElement / SoundEffect在应用程序中播放声音效果,应该如何继续播放背景声音(仅在我的应用程序内部)。 我需要一个可以让我同时播放2种声音(背景和声音效果)并且仅在应用程序运行时(活动)播放背景声音的解决方案...

到目前为止,我很困惑,只能解决声音效果问题。

任何建议,不胜感激。

您在MediaElement上看到的问题是,您正在将其定义为应用程序页面的一部分,并且一旦它从可视树中消失(即在OnNavigatedFrom之后),它就会停止播放。

如果将MediaElement定义为“可见”作为应用程序框架的一部分,则音频将在您的应用程序处于活动状态时继续播放(您自然需要处理停用事件)。

如果这样做, MediaElement应该可以用于“背景音频”。

请注意,您的应用程序中只能有一个活动的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;

有关Windows Phone中“框架/页面”的更多信息,请参见此Dzone文章

在实践中,MediaElement具有像可视化树要求这样的陷阱。 有很多方法可以解决它,但是它们不是最佳的。 我建议使用MediaElement进行剪贴,而改用XAudio2。 它是本机的,因此默认用法将是c ++,但是您也可以使用SharpDX从C#访问此框架。

XAudio2的优点是,您不必担心导航时声音掉落,因为它不依赖于UI。 另一个优点是,您可以有一个SourceVoice用于处理背景音频,而另一个SourceVoices用于处理声音效果播放。 这一切都非常适合该框架设计的使用模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM