我需要找到一种无需使用任何Windows Media Player(WMP)dll即可获取WMA文件长度的方法。我找到了使用WMP dll来执行此操作的方法,您可以看到here,但是由于另一个问题,我宁愿找到一种无需使用WMP的方法。

下面可以看到一种使用NAudio并与MP3配合使用的有前途的方法:

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

有谁知道将其移植到WMA文件上的方法?

我查看了WindowsMediaFormat项目的源代码,但是找不到WMAFrame类或任何显然可以让我换出一个类的东西,以使其能够用于WMA。

最佳答案

您将不需要NAudio,但是需要Windows Media.NET(http://windowsmedianet.sourceforge.net/)

您将打开MediaReader,并检索作为压缩音频包的所谓的“样本”。他们每个人都有其持续时间。遍历整个文件,总计每个软件包的持续时间,这是您的解决方案。

如果有时间,我会得到一些代码。

更多信息:

读者:http://msdn.microsoft.com/en-us/library/dd757425(v=vs.85).aspx

未压缩样本的回调:http://msdn.microsoft.com/en-us/library/dd743503(v=vs.85).aspx

希望您能够将所有内容放在一起!

但是,有一个问题,那就是让我的 friend 发疯的问题-无论WMA文件中实际压缩了多少PCM,最后获得的压缩样本都将被“填充”为完整帧长度,因此如果您希望实际长度是在压缩之前给出的,您可以忘记它。

关于.net - 是否可以在不使用Windows Media Player的情况下获取WMA文件的长度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16107774/

10-10 22:58