从BackgroundAudioPlayer获取持续时间

本文关键字:持续时间 获取 BackgroundAudioPlayer | 更新日期: 2023-09-27 18:11:54

我正在使用后台音频播放器播放音频文件。我已经尝试使用background.instance.track.duration.totalseconds方法获得音频的持续时间。但是当我运行应用程序方法返回"0"每次。如果我通过断点运行代码,则检索持续时间。下面是我的代码。

   if (BackgroundAudioPlayer.Instance.PlayerState != PlayState.Playing)
            {
                progressBar1.Visibility = System.Windows.Visibility.Visible;
                TotalTimeDisplay.Visibility = System.Windows.Visibility.Visible;
                //this.TotalTimeDisplay.Time = TimeSpan.Parse("00:00:00.0");
                imgplay.Source = new System.Windows.Media.Imaging.BitmapImage(new Uri("Images/player_pause_new.png", UriKind.Relative));
                AudioTrack audioTrack = new AudioTrack(new Uri("a" + imgname + ".MP3", UriKind.Relative), "", "", "", null);
                BackgroundAudioPlayer.Instance.Track = audioTrack;
                duration = BackgroundAudioPlayer.Instance.Track.Duration.TotalMilliseconds;
         }

从BackgroundAudioPlayer获取持续时间

请提出解决方案。

Try

BackgroundAudioPlayer.Instance.PlayStateChanged += new EventHandler(Instance_PlayStateChanged);
然后

   void Instance_PlayStateChanged(object sender, EventArgs e)
   {
       int duration = (sender as BackgroundAudioPlayer).Track.Duration.TotalMilliseconds;
   }

我不知道为什么……但是应该从

开始

在原始代码片段中,您在设置要播放的音轨后立即请求音轨的长度。背景音频播放器系统很可能没有机会设置自己并找到音轨的长度等。所以在这一点上得到的长度为零。但是,如果您在调试器中手动分步执行代码,则通常会慢到足以给系统时间进行设置,因此您将获得正确的长度。使用上面建议的playstatechange事件以一种自然的方式解决了这个问题。