从BackgroundAudioPlayer获取持续时间

时间:2013-05-02 13:25:59

标签: c# windows-phone-7 background-audio

我正在使用背景音频播放器播放音频文件。我尝试使用background.instance.track.duration.totalseconds方法获取音频的持续时间。但是当我运行app方法时返回“0” everytime。如果我通过断点运行代码,则检索持续时间。 以下是我的代码。

   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;
         }

请提出解决方案。谢谢。

2 个答案:

答案 0 :(得分:1)

尝试

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

然后

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

我不知道为什么......但它应该开始

答案 1 :(得分:0)

在原始代码段中,您在设置要播放的曲目后立即询问曲目的长度。很有可能背景音频播放器系统没有机会设置自己并找到轨道的长度等。所以在那时你将获得零长度。但是,如果您手动单步执行调试器中的代码,通常会慢到足以让系统有时间进行设置,因此您将获得正确的长度。如上所述使用PlayStateChanged事件可以自然地解决问题。