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.

浙公网安备 33010602011771号