2013-05-02 52 views
0

我正在使用背景音頻播放器來播放音頻文件。我嘗試使用background.instance.track.duration.totalseconds方法獲取音頻的持續時間。但是當我運行應用程序方法每次返回「0」。如果我通過斷點運行代碼,持續時間會被恢復。 以下是我的代碼。從BackgroundAudioPlayer獲取持續時間

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

請提示解決方法。提前致謝。

回答

1

嘗試

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

然後

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

我不知道爲什麼...但它應該開始

0

在原來的代碼段你所要求的軌道的長度在設置了曲目後立即播放。很有可能背景音頻播放器系統沒有機會設置自己並找到軌道的長度等等。所以在那一點上你會得到零長度。但是,如果您在調試程序中手動逐步執行代碼,則通常速度會很慢,從而無法爲系統設置時間,因此您將獲得正確的長度。如上所示使用PlayStateChanged事件以自然的方式解決了這個問題。