在Windows Phone 8中播放声音片段

时间:2014-03-01 17:37:28

标签: xaml audio windows-phone-8 xna

我正在尝试做一些我认为非常简单的事情,但它没有证明这一点。我想从我从API获取的URI中播放声音片段。 URI为音频剪辑提供绝对URI。

我尝试过使用MediaElement组件,但是在下载/播放剪辑时它会挂起UI。这意味着用户体验不佳,也可能无法通过商店认证。

我也尝试过XNA框架中的SoundEffect类,但是抱怨绝对URI - 看起来这只适用于相对链接,因此不够。

我想知道我在Windows手机8应用程序中播放声音片段还有哪些其他选项不会挂起UI

欢迎任何建议。

由于

1 个答案:

答案 0 :(得分:0)

在网络或互联网上使用媒体文件会增加应用程序的延迟。在手机加载文件之前,您无法开始播放媒体。使用MediaElement.MediaOpened确定媒体何时就绪,然后调用.Play();

当然,您需要让用户知道媒体正在下载。我的示例使用SystemTray ProgressIndicator向用户显示消息。

<强> XAML

<Grid x:Name="ContentPanel"
      Grid.Row="1"
      Margin="12,0,12,0">
  <StackPanel>
  <Button  x:Name='PlayButton'
           Click='PlayButton_Click'
           Content='Play Media' />
  <MediaElement x:Name='media1'
                MediaOpened='Media1_MediaOpened'
                AutoPlay='False' />
  </StackPanel>

</Grid>

<强> CODE

 
private void Media1_MediaOpened(object sender, RoutedEventArgs e) {
  // MediaOpened event occurs when the media stream has been
  // validated and opened, and the file headers have been read.

  ShowProgressIndicator(false);
  media1.Play();
}

private void PlayButton_Click(object sender, RoutedEventArgs e) {
  // the SystemTray  has a ProgressIndicator 
  // that you can use to display progress during async operations.
  SystemTray.ProgressIndicator = new ProgressIndicator();
  SystemTray.ProgressIndicator.Text = "Acquiring media - OverTheTop.mp3 ";

  ShowProgressIndicator(true);

  // Get the media
  media1.Source =
    new Uri(@"http://freesologuitar.com/mps/DonAlder_OverTheTop.mp3",
              UriKind.Absolute);
}

private static void ShowProgressIndicator(bool isVisible) {
  SystemTray.ProgressIndicator.IsIndeterminate = isVisible;
  SystemTray.ProgressIndicator.IsVisible = isVisible;
}