以编程方式从Windows Media Player获取歌曲的曲目长度

时间:2011-10-25 19:10:39

标签: c# media-player

我想获得一首歌的曲目长度。当我调试它时,我能够获得轨道长度并将其设置为一个名为songDuration的字符串变量。但是,当我实际执行它时,它不起作用,字符串为空。我如何使它工作?我已经尝试过首先初始化变量但仍然是相同的结果。我错过了什么?它在我逐行调试时工作,只是没有运行它。

这是一段代码:

wplayer.controls.play();
songDuration = wplayer.currentMedia.durationString;

3 个答案:

答案 0 :(得分:0)

这应该是您正在寻找的属性,它接受一个双倍,因此您需要考虑如何使用您目前拥有的songDuration字符串变量:

  

player.controls。的 currentPosition

This MSDN article应该为您提供更多信息,虽然示例指出在网页中使用控件我相信内容应该是相似的。

另外this SO问题似乎相似,但已包含答案。

答案 1 :(得分:0)

label3.Text =(wmp.Ctlcontrols.currentPosition).ToString(); label4.Text = wmp.Ctlcontrols.currentItem.duration.ToString();

答案 2 :(得分:0)

我发现调用player.controls.play()的方法必须退出,并且播放器实际上必须开始播放一秒钟的时间,然后.duration和.durationString属性将返回正确的值,而不是空字符串,并且0。

这不起作用:

wplayer.controls.play();
songDuration = wplayer.currentMedia.durationString;

这也不起作用:

wplayer.controls.play();
Application.DoEvents();
System.Threading.Thread.Sleep(100000);
Application.DoEvents();
songDuration = wplayer.currentMedia.durationString;

我通过开始播放媒体并退出方法来解决它,创建了一个Timer事件,该事件每100毫秒触发一次,每次调用它时,它会检查持续时间是否仍为0,如果不是,则可以捕获持续播放并暂停媒体。另一种方法是使用AxWindowsMediaPlayer,您可以在其中更改媒体状态并开始播放时添加事件处理程序,可以捕获该事件并查看持续时间。我没有走那条路,也不想采取任何步骤来导入正在使用的任何名称空间。也就是说,这就是MSFT的建议:

// Add a delegate for the PlayStateChange event.
player.PlayStateChange += new 
AxWMPLib._WMPOCXEvents_PlayStateChangeEventHandler(player_PlayStateChange);

我不是这样安装SDK的,而是这样做的。 像这样启动播放器

System.Windows.Forms.Timer myTimer = new System.Windows.Forms.Timer();
myTimer.Tick += new EventHandler(GetDuration);
myTimer.Interval = 100;
wplayer.controls.play();
return;

// Check for duration in this other routine which runs every 100 msec until 
// Media Player tells us the duration.

private string GetDuration()
{
    // public variable songDuration declared elsewhere
    songDuration = wplayer.currentMedia.durationString;
    if (songDuration.Length > 0) wplayer.controls.pause();
}