Получение продолжительности от BackgroundAudioPlayer

Я использую фоновый аудиоплеер для воспроизведения аудиофайла. Я пытался получить продолжительность звука с помощью метода 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;
         }

Пожалуйста, предложите решение. Заранее спасибо.


person user2343269    schedule 02.05.2013    source источник


Ответы (2)


Пытаться

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

тогда

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

не знаю почему...но должно начаться

person Spode    schedule 18.07.2013

В исходном фрагменте кода вы запрашиваете длину дорожки сразу после установки дорожки для воспроизведения. С высокой вероятностью система фонового аудиоплеера не успела настроиться и определить длину дорожки и т. д. Таким образом, в этот момент вы получите нулевую длину. Однако, если вы вручную выполняете код в отладчике, вы, как правило, будете достаточно медленными, чтобы дать системе время для настройки, и поэтому вы получите правильную длину. Использование события PlayStateChanged, как было предложено выше, естественным образом решает проблему.

person juhariis    schedule 04.05.2014