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

问题描述 投票:0回答:3

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

下面这段代码:

wplayer.controls.play();
songDuration = wplayer.currentMedia.durationString;
c# media-player
3个回答
0
投票

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

player.controls.currentPosition

This MSDN article应该给你一些更多的信息,虽然这些例子指向在网页中使用控件我相信内容应该是相似的。

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


0
投票

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


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;

我通过开始播放媒体并退出方法来解决它,创建一个每100毫秒触发一次的Timer事件,每次调用它时,它会检查持续时间是否仍为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();
}
© www.soinside.com 2019 - 2024. All rights reserved.