读取音频文件时出错?

时间:2013-04-16 23:22:26

标签: c# asp.net .net com

我有以下功能,我试图用来确定MP3文件的长度:

public static string GetMP3DurationBackup(string Filename)
{
    string Duration = null;
    WMPLib.WindowsMediaPlayer w = new WMPLib.WindowsMediaPlayer();
    WMPLib.IWMPMedia m = w.newMedia(Filename);
    if (m != null)
    {
        Duration = m.durationString;
    }
    w.close();
    return Duration;
}

我遇到了一个问题,我收到以下错误:

  

使用CLSID检索组件的COM类工厂   {6BF52A52-394A-11D3-B153-00C04F79FAA6}由于以下原因而失败   错误:80040154 ..

当我从我的网络应用程序调用上述函数时(在下面调用):

string test = MediaUtil.GetMP3DurationBackup(@"C:\Temp\Audio\bad.mp3");

但是当我从我创建的控制台应用程序测试工具(与上面完全相同的调用)中调用它时,它工作正常。我已经设置了包含在Build属性中定位x86的函数的项目,但这并没有解决问题。

有谁知道为什么会这样?关于从哪里开始调试的建议?

更新为BOUNTY:

好的,我尝试过很多东西,但我仍然遇到这个错误。除了其他的事情,我尝试了下面的步骤,我觉得这是最有希望的,但没有骰子:

  1. 进入我的注册表并确认其值为: HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{6BF52A52-394A-11d3-B153-00C04F79FAA6}\InprocServer32 是指C:\WINDOWS\SysWOW64\wmp.dll
  2. 打开命令提示符, 导航到C:\ WINDOWS \ SysWow64,运行:regsvr32.exe wmp.dll
  3. 我创建了一个控制台应用程序测试工具,如果我在x64中运行测试项目,我能够重现错误。如果我将它切换到x86,它可以正常工作。

    有没有人知道为什么以上不能解决问题?关于下一步的建议?

2 个答案:

答案 0 :(得分:2)

你说它在x64中不起作用,但你试图注册32位版本的wmp.dll(C:\Windows\SysWow64包含32位程序集)。

尝试在64位平台上注册位于C:\Windows\System32的wmp.dll的x64版本。

如果您没有此文件,那么您的平台可能没有可用的64位Windows Media Player。但有一个解决方法:

创建一个32位控制台应用程序,将mp3文件名作为命令行参数,并使用Console.WriteLine将持续时间输出到stdout,然后在webapp中调用控制台应用程序并捕获输出,如{{ 3}}

答案 1 :(得分:0)

给这个lib一个旋转。它速度快,对机器上安装的软件没有特殊要求。

http://naudio.codeplex.com/