我正在尝试编写一个按下按钮时播放短音的WP8应用程序,但我似乎无法弄清楚如何播放声音。这是我的代码的一个简单示例:
XAML
<Rectangle x:Name="Rect1" Grid.Row="0" Grid.Column="0" Tap="RectTapped" Fill="White" />
App.cs
private void RectTapped(object sender, System.Windows.Input.GestureEventArgs e)
{
MediaElement sound = new MediaElement();
sound.AutoPlay = false;
sound.Source = new Uri("Assets\\Sounds\\bark-1.wav", UriKind.Relative);
sound.Play();
}
在我的Nokie 820设备上测试时,没有声音播放。我不明白为什么。
我有什么问题吗? .wav在我的资源中。
我已经读过MediaElement不应该用于此任务。我已经尝试在Xna.Framework.Audio中使用SoundEffect类;遵循MSDN中的示例,但也失败了,因为我无法使用Content.Load,因为Load不是Content类的可用方法。
我也看过XAudio2,但由于我不知道C ++,我无法理解这些例子。
答案 0 :(得分:1)
您需要将MediaElement
添加到XAML树
this.LayoutRoot.Children.Add(sound);
答案 1 :(得分:0)
使用Rectangle
而不是Button
。此外,MediaElement
适用于在Silverlight应用程序中播放短音。确保控件是可视化树的一部分(将其添加到XAML中)。然后绑定到按钮Click
事件处理程序:
private void YourClickHandler(object sender, RoutedEventArgs e)
{
myMediaElement.Source = new Uri("/Assets/Sounds/bark-1.wav", UriKind.Relative);
myMediaElement.Play();
}
答案 2 :(得分:0)
你应该使用XNA SoundEffect类而不是MediaElement,因为你正在播放声音效果。
这方面的文档很糟糕,但这就是你的做法:
effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update();
effect.Play();
所以要从你的应用包中发挥作用:
var stream = Application.GetResourceStream(filepath);
effect = SoundEffect.FromStream(stream);
FrameworkDispatcher.Update();
effect.Play();
MediaElement的优势在于SoundEffect不需要在可视化树中(并且它也不会搞砸背景音频播放器)。缺点是您没有MediaElement上的(有时是有用的)事件。
答案 3 :(得分:0)
对于Windows Phone 8.1 Silverlight,请前两个答案(来自@DenDelimarsky和@ onmyway133)播放声音。
不添加MediaElement
给我的情况下没有播放的XAML声音。
使用以下代码播放声音:
private void YourClickHandler(object sender, RoutedEventArgs e)
{
MediaElement myMediaElement = new MediaElement();
myMediaElement.Source = new Uri("/MP3/AirHornTwoBlows.mp3", UriKind.Relative);
LayoutRoot.Children.Add(myMediaElement);
myMediaElement.Play();
}
答案 4 :(得分:0)
删除行
sound.AutoPlay=false;
或将其更改为:
sound.AutoPlay = true;
它会起作用。