【问题标题】:How to use LAME (lame_enc.dll) in my C# web site如何在我的 C# 网站中使用 LAME (lame_enc.dll)
【发布时间】:2011-06-07 20:53:32
【问题描述】:

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

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

我做的第一件事是从代码项目的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 并拥有同样的问题。因此,我认为在网站而不是其他类型的项目中使用此代码会有所不同。不过我不知道是什么。

【问题讨论】:

    标签: c# .net lame


    【解决方案1】:

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

    【讨论】:

    • 我相信他正在使用的项目是本地 Lame_Enc 库的托管包装器。
    • 可能,但故事还是一样。如果 LAME 是 COM,那么它没有注册。这似乎不是问题。如果是 Native,那么它要么不在正确的位置,要么没有正确设置。无论哪种方式,正确安装都是确保其正确性的最简单方法。如果这仍然不起作用,那么版本之间发生了一些变化,必须查看 .NET 文件中的实际指针。
    • 是否可以要求其他用户对某个主题进行权衡?我看不到向其他人发送消息的方法(我对 SO 很陌生)。我认为可以联系到another question on SO。我想知道Basiclife 是否可以对此有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 2012-10-06
    相关资源
    最近更新 更多