.net 是否可以在不使用Windows Media Player的情况下获取WMA文件的长度?

.net 是否可以在不使用Windows Media Player的情况下获取WMA文件的长度?,.net,audio,naudio,wma,.net,Audio,Naudio,Wma,我需要找到一种不使用任何Windows Media Player(WMP)DLL获取WMA文件长度的方法。我找到了使用WMP DLL的方法,您可以看到,但由于另一个问题,我宁愿找到一种不必使用WMP的方法 下面可以看到一种使用MP3并与之配合使用的有希望的方法: double GetMediaDuration(string MediaFilename) { double duration = 0.0; using (FileStream fs = File.OpenRead(Me

我需要找到一种不使用任何Windows Media Player(WMP)DLL获取WMA文件长度的方法。我找到了使用WMP DLL的方法,您可以看到,但由于另一个问题,我宁愿找到一种不必使用WMP的方法

下面可以看到一种使用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类或任何明显可以让我交换一个类以使其在WMAs中工作的类。

此项目不需要NAudio,但Windows Media.NET()

您将打开MediaReader,并检索所谓的压缩音频包“示例”。它们中的每一个都应该有其持续时间。遍历整个文件,计算每个包的总持续时间,这是您的解决方案

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

更多信息:

读者:

未压缩样本的回调:

我希望你能把这一切都安排好


但有一个问题让我的朋友发疯了——不管WMA文件中实际的PCM压缩了多少,您得到的最后一个压缩样本将始终被“填充”到完整的帧长,所以如果您想要压缩前给出的实际长度,您可以忘记它。

您不需要NAudio来处理这个文件,但是Windows Media.NET()

您将打开MediaReader,并检索所谓的压缩音频包“示例”。它们中的每一个都应该有其持续时间。遍历整个文件,计算每个包的总持续时间,这是您的解决方案

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

更多信息:

读者:

未压缩样本的回调:

我希望你能把这一切都安排好



然而,有一个问题让我的朋友发疯了——不管WMA文件中实际的PCM压缩了多少,您得到的最后一个压缩样本总是“填充”到完整的帧长度,所以如果您想要压缩之前给出的实际长度,您可以忘记它。

您可以使用
MediaFoundationReader
并请求其
TotalDuration
属性
MediaFoundationReader
是NAudio 1.7的新版本,在NuGet上的预览版中提供。长度是使用MFYPDJ持续时间媒体基础演示属性来计算的。

< P>可以使用<代码> MediaFoundationReader < /C> >并要求其<代码>总持续时间< /代码>属性>code>MediaFoundationReader是NAudio 1.7的新版本,在NuGet上的预览版中提供。长度是使用MFYPDJ持续时间媒体基础演示属性计算的。

谢谢你的带头,我来看看!我在阅读文档时遇到了这样一行:
但库中的所有内容都只是允许访问Microsoft Windows Media DLL中的代码的定义。
这似乎不是表明它将使用Windows Media Player DLL吗?当然可以,但不会这样使用Media Player。你想要的东西甚至不涉及winmp.dll?wmp.dll是我一直在使用的,让它在64位服务器上工作是一场噩梦。你尝试过启用Windows体验吗?我的意思是,我一直在用windows media player处理Win2008R2。谢谢你的指导,我来看看!我在阅读文档时遇到了这样一行:
但库中的所有内容都只是允许访问Microsoft Windows Media DLL中的代码的定义。
这似乎不是表明它将使用Windows Media Player DLL吗?当然可以,但不会这样使用Media Player。你想要的东西甚至不涉及winmp.dll?wmp.dll是我一直在使用的,让它在64位服务器上工作是一场噩梦。你尝试过启用Windows体验吗?我的意思是,我一直在用windows media player处理Win2008R2。你知道我在哪里可以下载mfplatt.dll吗?当我尝试实例化MediaFoundation Re读器时,它会抛出一个错误,说它找不到那个特定的DLL。您使用的是什么版本的Windows?对于媒体基金会来说太早了。您可能仍然可以在NAudio的Windows Media Library安装程序中使用WmaFileReader,该安装程序出现错误:
试图加载格式不正确的程序。(HRESULT:0x8007000B的例外)
我认为这与我运行的是一个64位应用程序有关。不幸的是,我已经追踪32位/64位的问题一周了。你知道我可以在哪里下载mfplatt.dll吗?当我尝试实例化MediaFoundation Re读器时,它会抛出一个错误,说它找不到那个特定的DLL。您使用的是什么版本的Windows?对于媒体基金会来说太早了。您可能仍然可以在NAudio的Windows Media Library安装程序中使用WmaFileReader,该安装程序出现错误:
试图加载格式不正确的程序。(HRESULT:0x8007000B的例外)
我认为这与我运行的是一个64位应用程序有关。不幸的是,我已经在32位/64位问题上追根究底一周了。