我正在尝试为我的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开始播放时运行的事件,它将工作正常,但我不知道如何实现它。
答案 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;
两者都可用,您可以根据您的设计选择其中一种。