我已经构建了一个WPF应用程序,用户可以将MP3文件拖放到列表框中.我需要一种方法来计算播放列表的总持续时间.
我应该使用哪些库?或者只使用.NET框架?
经过大量的理论化,我找到了一种正确无误地计算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; }