.net 是否可以在不使用Windows Media Player的情况下获取WMA文件的长度?
我需要找到一种不使用任何Windows Media Player(WMP)DLL获取WMA文件长度的方法。我找到了使用WMP DLL的方法,您可以看到,但由于另一个问题,我宁愿找到一种不必使用WMP的方法 下面可以看到一种使用MP3并与之配合使用的有希望的方法:.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
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位问题上追根究底一周了。