Dan*_*dor 18
经过大量的理论化,我找到了一种正确无误地计算mp3文件持续时间的方法.
让我首先重新讨论为什么上面的标准方法不起作用:
ID3方法:并非所有文件都有id3标签,如果有,则可能没有设置持续时间字段.
通过读取一帧*文件大小估算:不适用于VBR文件.
Xing标题:并非所有文件都有.
通过PCM大小解码并确定它:我有3 GB以上的文件,我不会等到它解码.
我到处读,所有的东西都通向NAudio.马克,感谢您的努力和清洁!但是,NAudio主要建议的方法是使用Mp3FileReader读取文件并获取所有帧.问题:Mp3FileReader在开始时创建一个TOC,这需要永远,即使只有一天的小文件:)
Mark建议我删除TOC创建,因为源代码可用,并且在执行此操作时,我发现了更简单的方法.这里是; 是说不出话来:
double GetMediaDuration(string MediaFilename)
{
double duration = 0.0;
using (FileStream fs = File.OpenRead(MediaFilename))
{
Mp3Frame frame = Mp3Frame.LoadFromStream(fs);
if (frame != null)
{
_sampleFrequency = (uint)frame.SampleRate;
}
while (frame != null)
{
if (frame.ChannelMode == ChannelMode.Mono)
{
duration += (double)frame.SampleCount * 2.0 / (double)frame.SampleRate;
}
else
{
duration += (double)frame.SampleCount * 4.0 / (double)frame.SampleRate;
}
frame = Mp3Frame.LoadFromStream(fs);
}
}
return duration;
}
Run Code Online (Sandbox Code Playgroud)