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);
fffffffffffffffff
test red font.