Play Background Sound and Sound Effect in Windows Phone 8

后端 未结 2 1810
再見小時候
再見小時候 2020-12-22 04:09

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

相关标签:
2条回答
  • 2020-12-22 05:08

    In practice, MediaElement is has some gotchas like the visual tree requirement. There are ways to get around it, but they are not optimal. I would suggest scrapping using MediaElement and use XAudio2 instead. It is native so default usage would be in c++, but you can also use SharpDX to access this framework from C#.

    The advantage of XAudio2 is that you would not need to worry about sound dropping out when navigating around since it is not dependent on the UI. Another advantage is you could have one SourceVoice for handling your background audio, and other SourceVoices for handling sound effect playback. This all fits well within the model of usage the framework was designed for.

    0 讨论(0)
  • 2020-12-22 05:12

    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.

    0 讨论(0)
提交回复
热议问题