2

我正在尝试编写一个 WP8 应用程序,该应用程序在按下按钮时播放短声,但我似乎无法弄清楚如何播放声音。这是我的代码的一个简单示例:

XAML

<Rectangle x:Name="Rect1" Grid.Row="0" Grid.Column="0" Tap="RectTapped" Fill="White" />

应用程序.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++,所以我无法理解这些示例。

4

5 回答 5

1

您需要添加MediaElement到您的 XAML 树

this.LayoutRoot.Children.Add(sound);
于 2013-07-05T08:04:31.797 回答
0

代替 a Rectangle,使用 a 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();
}
于 2013-03-18T01:39:16.083 回答
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 上拥有的(有时有用的)事件。

于 2013-03-19T16:48:01.847 回答
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();
        }
于 2015-07-21T10:30:28.797 回答
0

删除线

sound.AutoPlay=false;

或将其更改为:

sound.AutoPlay = true; 

它将起作用。

于 2015-08-03T06:02:43.133 回答