gpt4 book ai didi

.net - 如何在 .NET 中检索 MP3 的持续时间?

转载 作者:行者123 更新时间:2023-12-04 09:29:56 27 4
gpt4 key购买 nike

我已经构建了一个 WPF 应用程序,用户可以在其中将 MP3 文件拖放到列表框上。我需要一种方法来计算播放列表的总持续时间。

我应该使用任何库?或者是否可以仅使用 .NET 框架?

最佳答案

经过大量理论分析,我找到了一种正确且无可争议地计算 mp3 文件持续时间的方法。

让我首先重申为什么上面的标准方法不起作用:

ID3 方法:并非所有文件都有 id3 标签,如果有,则可能没有设置持续时间字段。

通过读取一帧 * 文件大小进行估计:不适用于 VBR 文件。

Xing header:不是所有的文件都有。

通过 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;
}

关于.net - 如何在 .NET 中检索 MP3 的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/383164/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com