我正在编写一个媒体演示程序,几乎完成了,但是我发现无法正确获取mp3文件的持续时间。我使用Microsoft.DirectX.AudioVideoPlayback.Audio类播放音频文件,对于wav文件效果很好。通过Google搜索,我发现当mp3文件使用可变比特率进行编码时,似乎存在问题,但是无论媒体的比特率设置如何,我的程序都需要准确报告。以下是代码:
Media_Audio aud = (Media_Audio)item.MediaFile;
TimeSpan total = aud.EndTime - aud.StartTime;
if (aud.EndTime.TotalSeconds == 0)
{
total = TimeSpan.FromSeconds(aud.Player.Duration)-aud.StartTime;
}
TimeSpan now = TimeSpan.FromSeconds(aud.Player.CurrentPosition) - aud.StartTime;
string nows = now.Hours.ToString() + ":" + now.Minutes.ToString() + ":" + now.Seconds.ToString();
string tots = total.Hours.ToString() + ":" + total.Minutes.ToString() + ":" + total.Seconds.ToString();
item.currentPosition.Text = nows + "/" + tots;
关键的一句是:
total = TimeSpan.FromSeconds(aud.Player.Duration)-aud.StartTime;
是Microsoft.DirectX.AudioVideoPlayback.Audio的实例。
对于一首实际时长为5:49秒的歌曲,它报告的持续时间为39:13。这与Windows Explorer和VLC Player的长度相同。同时,已安装了K-Lite Mega Codec包,因此可能会产生干扰。我知道这个问题:如何在.NET中检索MP3的持续时间? 但是,目前在我的程序中,我没有时间切换到播放音频文件的新方法,那么我有没有其他选择使用仅DirectX来确定持续时间?或者我是否必须诉诸于BASS.NET或TagLib Sharp?(元数据是否包含VBR编码mp3的精确信息?)