弹来弹去跑马灯!

UWP 播放声音文件

 

这个方案不是太好,但是可以应付:

另外可以参考Microsoft.Xna.Framework.Audio 下的 SoundEffect ,SoundEffectInstance效果更好

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Reflection;
using System.Windows;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Windows.UI.Xaml;
using Windows.ApplicationModel.Resources.Core;
using System.IO;
using Windows.Media.Audio;
using System.Diagnostics;
using Windows.Media.Streaming.Adaptive;
using Windows.Media.Core;
using Windows.UI.Xaml.Controls;
using Windows.Storage;
using Windows.UI.Core;

namespace TestSound
{
    // Sounds
    public  class Sounds
    {
     
        public static SoundEffectInstance shi;
        public static SoundEffectInstance ding;
        static async Task<Stream> GetResource(string res)
        {
            var _filePath = "Smash.res.ding.wav";//"Smash.res.ding.wav";
            var assembly =new ClassA(). GetType().GetTypeInfo().Assembly;
            var stream = assembly.GetManifestResourceStream(_filePath);
            return stream;
        }
       public static async void LoadSounds()
        {
            if (shi == null || ding == null)
            { 
                var stream = await GetResource("bird2");
                stream.Position = 0;
               var se = SoundEffect.FromStream(stream);
                if (se != null)
                {
                  shi= ding=se.CreateInstance();
                }
                     

                   //ding = SoundEffect.FromStream(stream).CreateInstance();
            }
        }


    }
    public class ClassA 
    {
        public string name; 
    
    }
    public enum SoundEfxEnum
    {
        NORMALMOVE,
        CHECK,
        CAPTURE,
        CASTLING,
    }


    public class SoundEffects
    {
        private Dictionary<SoundEfxEnum, MediaElement> effects;

        public SoundEffects()
        {
            effects = new Dictionary<SoundEfxEnum, MediaElement>();
            LoadEfx();
        }

        private async void LoadEfx()
        {
            effects.Add(SoundEfxEnum.NORMALMOVE, await LoadSoundFile("ding.wav"));
            effects.Add(SoundEfxEnum.CHECK, await LoadSoundFile("ding.wav"));
            effects.Add(SoundEfxEnum.CAPTURE, await LoadSoundFile("ding.wav"));
            effects.Add(SoundEfxEnum.CASTLING, await LoadSoundFile("ding.wav"));
        }

        private async Task<MediaElement> LoadSoundFile(string v)
        {
            MediaElement snd = new MediaElement();
            snd.AutoPlay = false;
            StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("sounds");
            var file = await folder.GetFileAsync(v);
            var stream = await file.OpenAsync(FileAccessMode.Read);
            snd.SetSource(stream, file.ContentType);
            return snd;
        }

        public async Task Play(SoundEfxEnum efx)
        {
            var mediaElement = effects[efx];

            await mediaElement.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>
            {
                mediaElement.Stop();
                await Task.Delay(20);//很关键
                mediaElement.Play();
            });
        }
    }





}



//在App class调用


public App()
        {
            this.InitializeComponent();
            this.Suspending += OnSuspending;
            Sound = new SoundEffects();

        }

        public static SoundEffects Sound;


//其它地方就可以这样调用:App.Sound.Play( SoundEfxEnum.CAPTURE);

  

posted @ 2017-10-21 16:06  wgscd  阅读(623)  评论(0)    收藏  举报