5

我正在尝试在我的 C# .NET 网站中使用 lame_enc.dll,但我被卡住了。

我正在使用:.NET Framework 3.5 / Visual Web Developer 2008 Express Edition /(还有什么你需要知道的吗?)

我做的第一件事是从The Code Project 上的C# MP3 Compressor获取代码。我注意到的一件事是这个项目/帖子是从 2004 年 1 月开始的(所以,它很旧)

我将文件夹“yeti.mmedia”和“yeti.mp3”放在我的“App_Code”目录中,并删除了每个目录中的“Bin”和“obj”目录。然后我尝试构建项目。当我遇到错误时,我最终从项目中排除了以下文件:

  • Yeti.mmedia/AssemblyInfo.cs
  • Yeti.mmedia/EditWaveWriter.cs
  • Yeti.mmedia/EditWaveWriter.resx
  • Yeti.mmedia/InFormatEdit.cs
  • Yeti.mmedia/InFormatEdit.resx
  • Yeti.mmedia/NumericTextBox.cs
  • Yeti.mmedia/NumericTextBox.resx
  • Yeti.mmedia/Win32Functions.cs
  • Yeti.mp3/AssemblyInfo.cs
  • Yeti.mp3/EditMp3Writer.cs
  • Yeti.mp3/EditMp3Writer.resx

在我看来,这些似乎是与 Windows UI 相关的代码文件(因为我在网络上执行此操作就不需要这些文件)。

我还将文件“lame_enc.dll”放在 Bin 目录中。

我根据上面链接的页面上的示例创建了一个测试页面:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using WaveLib;
using Yeti.MMedia;
using Yeti.MMedia.Mp3;

public partial class Documents : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        WaveStream InStr = new WaveStream(Server.MapPath(@"Temp/SomeFile.wav"));
        try {
            Mp3Writer writer = new Mp3Writer(new FileStream(Server.MapPath(@"Temp/SomeFile.mp3"), FileMode.Create), InStr.Format);
            try {
                byte[] buff = new byte[writer.OptimalBufferSize];
                int read = 0;
                while ((read = InStr.Read(buff, 0, buff.Length)) > 0) {
                    writer.Write(buff, 0, read);
                }
            }
            finally {
                writer.Close();
            }
        }
        finally {
            InStr.Close();
        }
    }
}

所以,然后我加载这个页面,我得到的错误是:

无法加载 DLL 'Lame_enc.dll':找不到指定的模块。(来自 HRESULT 的异常:0x8007007E)

(我不能在我的项目中添加 DLL 作为参考,因为它说“...这不是 COM 组件。”)我也尝试过获取最新和最好的 (lame3.98.4) dll 并且遇到了同样的问题. 因此,我认为在网站而不是其他类型的项目中使用此代码会有所不同。虽然我不知道它是什么。

4

1 回答 1

1

我的猜测,没有使用过 LAME,你必须安装在有问题的盒子上。之后,您应该可以成功使用代码项目代码。如果这不起作用,则 Lame_Enc.dll 似乎是一个本机组件,您将不得不 PInvoke 方法。

于 2011-06-07T21:07:08.877 回答