在WP8 App中播放Soundbite

时间:2013-03-18 01:20:38

标签: windows-phone-8

我正在尝试编写一个按下按钮时播放短音的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 ++,我无法理解这些例子。

5 个答案:

答案 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; 

它会起作用。