我正在编写一个媒体演示程序,我几乎完成了,但由于某种原因,我得到的 mp3 文件的持续时间不正确。我使用 Microsoft.DirectX.AudioVideoPlayback.Audio 类播放音频文件,它适用于 wav 文件。从谷歌搜索中,我可以看出当 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;
aud.Player 是 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 的准确信息?)