2011-09-09 28 views
0

我使用System.Window.Media.MediaPlayer對象來提取Windows應用程序中各種本地聲音文件的持續時間。使用System.Window.Media.MediaPlayer提取持續時間有時不起作用

TimeSpan duration = new TimeSpan(0); 
MediaPlayer player = new MediaPlayer(); 

player.Open(new Uri(filename)); 

if (player.NaturalDuration.HasTimeSpan) 
{ 
    duration = player.NaturalDuration.TimeSpan; 
} 

player.Close(); 

但問題是,有時(即使在相同的文件和不同的代碼位置)持續時間爲「0」。

有沒有人有想法?

Thx 4 answers

回答

1

首先檢查文件是否被加載。只需監視一個OpenStateChanged事件。然後調用類似

duration = player.CurrentMedia.Duration;

或字符串結果:

duration = player.CurrentMedia.DurationString;

1

我想你終於找到了解決您的問題。無論如何,我給那些到這裏的人留下了答案。

documentation

備註:NaturalDuration不能確定,直到發生MediaOpened後。

所以,你必須等待,直到媒體居然開:

player.MediaOpened += new EventHandler(player_MediaOpened); 

... 

private void player_MediaOpened(Object sender, EventArgs e) 
{ 
    if (player.NaturalDuration.HasTimeSpan) 
    { 
     duration = player.NaturalDuration.TimeSpan; 
    } 
    else 
    { 
     // Duration is Automatic 
    } 
} 
相關問題