且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

播放背景声音和声音的影响的Windows Phone 8

更新时间:2023-02-27 08:10:27

在与看到的问题你的的MediaElement 是您定义它是应用程序的一部分页面,并停止尽快消失了可视化树的播放(即后 OnNavigatedFrom )。

如果你定义了一个的MediaElement 是看得见作为应用程序框架的一部分,音频将继续播放,而你的应用程序被激活(您将需要处理停用事件,自然)。

如果你这样做的MediaElement 应该适用于你的背景音乐。

请注意你只能有一个单一的活跃的MediaElement 播放媒体在您的应用程序,但是你应该能够使用 SoundEffect中为您的音效。

更新:

要放你的的MediaElement 在一个框架,你需要创建一个自定义的 PhoneApplicationFrame 类/ XAML,加在的MediaElement 来的XAML,并参考App.xaml.cs您自定义的框架。

  //不添加任何额外的code此方法
私人无效InitializePhoneApplication()
{
    如果(phoneApplicationInitialized)
        返回;    //创建框架,但没有将其设置为RootVisu​​al之中;这允许溅
    //直到应用程序是准备呈现屏幕保持活跃。
    RootFrame =新MyCustomPhoneApplicationFrame();
    RootFrame.Navigated + = CompleteInitializePhoneApplication;

请参阅在Windows Phone的更多帧/页。

I have researched a lot on playing sounds for Windows Phone 8 devices and found multiple solutions but they don't quite match my case.

What I need : I'm writing an app (C#+XAML) that uses a file as background sound (must be active while navigating the whole app), and also to be able to play sound effects.

What are the issues :

  • For background sound I could use the BackgroundAudio Agent, but it doesn't meet my requirements because I want the sound to be played only in the background of my app, and to stop if my app closes or is not active.
  • For sound effects - I tried MediaElement which is okay, but I couldn't manage to make it somehow play while I am navigating the whole app. Media closes if I leave that page - I guess I could use this for the sound effects trick. Also, there's the SoundEffect which is not quite a good solution since it can play only .wav files... I could use it for sound effects only but not background sound (big sized files).

So, how should I proceed to play background sound (only inside my app) if I choose MediaElement/SoundEffect to play a sound effect in the app. I need a solution that would allow me to play 2 sounds at once (background and sound effect) and the background sound to be played only while the app runs (is active)...

So far I am confused and managed only to solve the sound effects issue.

Any suggestions are greatly appreciated.

The issue you are seeing with your MediaElement is that you are defining it to be part of the application page and it stops playing as soon as it disappears off of the Visual Tree (i.e. after OnNavigatedFrom).

If you define a MediaElement to be "visible" as part of the application frame, audio will keep playing while your app is active (you will need to handle deactivation events, naturally).

If you do this MediaElement should work for your "background audio".

Be aware you can only have one single active MediaElement playing media in your app, however you should be able to use SoundEffect for your sound effects.

Update:

To put your MediaElement in a frame, you will need to create a custom PhoneApplicationFrame class/XAML, add the MediaElement to that XAML, and refer to your custom frame in 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;

See this Dzone article for more about Frame/Page in Windows Phone.