2017-06-03 243 views
0

在我的音乐播放器中,有2个标签。如何使用时间跨度显示歌曲的最长持续时间?

标签1是显示进度时间:

lblTime.Content = TimeSpan.FromSeconds(sliProgress.Value).ToString(@"mm\:ss"); 

和标签2是显示一首歌曲的最大持续时间:

lblTime2.Content = TimeSpan.MaxValue.ToString(@"mm\:ss"); 

标签1从开始播放,当运作良好我移动滑块。但标签2不知何故。我曾尝试在taglib-sharp中使用Properties.Duration语法。但对我来说,它显示了太多的细节,因为我只想显示分钟和秒,而不是几小时甚至毫秒。

我该如何修复标签2?

+1

TimeSpan.MaxValue是恒定值,并且表示一个时间跨度可以处理的最大值。 –

+0

感谢您的解释。那么,我必须改正标签2才能显示播放歌曲的最长持续时间(例如05:42)? –

+1

从歌曲中获取持续时间信息 –

回答

0

我突然发现关于使用的ToString语法标记库,类似于像我一样的标签1.现在,它的工作原理如我所料,显示仅仅只有分秒的想法。

这是我使用的代码:

lblTime2.Content=tagFile.Properties.Duration.ToString(@"mm\:ss"); 
0

首先,要从歌曲(或文件)中检索持续时间,请参阅此012帖子; How to read audio (mp3) tags (Duration and Subtitle), when I use TagLib?

根据taglib文档(我发现有点混淆) - 请参阅this API page - lengthInSeconds属性返回一个整数。

因此,要在你的标签上显示它,试试这个。

var vFile = TagLib.File.Create(@"xyz.mp3"); 
int vDuration = vFile.Properties.lengthInSeconds; 
lblTime2.Content = TimeSpan.FromSeconds(vDuration).ToString(@"hh\:mm"); 

(所有未经测试!)

+0

感谢您的回答。但不幸的是,我得到一个错误,说属性不包含lengthInSeconds的定义,并且没有扩展方法lengthInSeconds接受属性类型的第一个参数。 –

+0

我在下面回答我自己的问题。感谢您的灵感。 –

+0

是的,正如我所说的,API描述有些令人困惑,我没有时间去浏览所有内容!至少你已经把它全部整理出来了。 – Grim