我使用System.Window.Media.MediaPlayer对象来提取Windows应用程序中各种本地声音文件的持续时间。
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答案
答案 0 :(得分:1)
首先检查文件是否已加载。只需监控OpenStateChanged
事件即可。然后打电话给
duration = player.CurrentMedia.Duration;
或字符串结果:
duration = player.CurrentMedia.DurationString;
答案 1 :(得分:1)
我想你终于找到了问题的解决方案。无论如何,我给那些到达这里的人留下了答案。
备注:在MediaOpened发生之前无法确定NaturalDuration。
所以你必须等到媒体真正开启:
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
}
}