有可能得到一个WMA文件的长度,而不使用Windows Media Player?(Possible

2019-09-30 06:22发布

我需要找到一种方式来获得一个WMA文件的长度,而无需使用任何的Windows Media Player(WMP)的DLL。 我发现这样使用WMP的dll,你可以看到做这里 ,但由于另外一个问题,我宁可找到一种方法,我没有使用WMP。

使用一个有希望的方法n音讯与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格式的工作。

Answer 1:

您不需要n音讯这一个,但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

我希望你能够把它放在一起!

但是有一个问题,那是驱动我的朋友的坚果 - 你得到不论多少实际PCM是如何在WMA文件压缩,最后压缩样品将始终为“填充”到全画幅长度,所以如果你想实际长度压缩前给予,你可以忘记它。



Answer 2:

您可以使用MediaFoundationReader ,并要求其TotalDuration财产。 MediaFoundationReader是新的n音讯1.7和提供上的NuGet一个预览版本。 长度是使用MF_PD_DURATION媒体基金会呈现属性来计算。



文章来源: Possible to get the length of a WMA file without using Windows Media Player?