Uwp app如何让搜索栏寻求媒体播放器元素

时间:2017-12-18 18:49:20

标签: uwp

我正在尝试为我的mediaplayerelement创建一个搜索栏,它有一个音频源。我试图将滑块的最大值设置为音频源的总秒数,但它设置为零。但是如果我在一段时间后做同样的事情,滑块的最大值就变成了音频的总时间 这是我的代码,用于将滑块的最大值设置为音频文件的持续时间

if(file != null) 
{
     var MusicFile = MediaSource.CreateFromStorageFile(file);
     Mp3Player.Source = MusicFile;
     Mp3Player.MediaPlayer.Play();
     MusicSlider.MaximumMp3Player.MediaPlayer.PlaybackSession.NaturalDuration.TotalSeconds;
     PlayPauseIm.Source = new BitmapImage(new Uri("ms-appx:///Assets/Pause_Button.png"));
}

(对不起,我在文中看不到它看起来不对劲) 我想如果我创建一个在MediaPlayerElement开始播放时运行的事件,它将工作正常,但我不知道如何实现它。

1 个答案:

答案 0 :(得分:1)

  

我尝试将滑块的最大值设置为音频源的总秒数,但它设置为零。

实际上,你的方法很好。但是,PlaybackSession.NaturalDuration.TotalSeconds的值未立即分配。根据官方文件:

  

媒体的natural duration。默认值是一个Duration结构,其值为Automatic,这是在MediaOpened之前查询此属性时保存的值。

根据您的要求,您可以在媒体打开后获得PlaybackSession.NaturalDuration.TotalSeconds的值,以确保它是值。

Mp3Player.MediaPlayer.MediaOpened += MediaPlayer_MediaOpened;

private async void MediaPlayer_MediaOpened(Windows.Media.Playback.MediaPlayer sender, object args)
{
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
     {
         MusicSlider.Maximum = Mp3Player.MediaPlayer.PlaybackSession.NaturalDuration.TotalSeconds;
     });
}

获得音乐持续时间的另一种方法是直接读取文件MusicProperties

MusicProperties properties = await file.Properties.GetMusicPropertiesAsync();
TimeSpan myTrackDuration = properties.Duration;
MusicSlider.Maximum = myTrackDuration.TotalSeconds;

两者都可用,您可以根据您的设计选择其中一种。