【问题标题】:How to use lame.exe in my application?如何在我的应用程序中使用 lame.exe?
【发布时间】:2010-12-29 12:59:24
【问题描述】:

我在 Microsoft Surface 应用程序中以波形格式捕获音频文件。现在出于文件大小的原因,我想将波形文件转换为 mp3 文件。我在互联网上读到,使用lame 很有可能做到这一点。

但是我怎样才能从我的应用程序中调用这个 exe 文件呢?以及如何将其包含到我的应用程序中?

【问题讨论】:

    标签: c# .net mp3 pixelsense lame


    【解决方案1】:

    使用Process 类调用外部应用程序:

    string lameEXE = @"C:\path_of_lame\lame.exe";
    string lameArgs = "-V2";
    
    string wavFile = @"C:\my_wavs\input.wav";
    string mp3File = @"C:\my_mp3s\output.mp3";
    
    Process process = new Process();
    process.StartInfo = new ProcessStartInfo();
    process.StartInfo.FileName = lameEXE;
    process.StartInfo.Arguments = string.Format(
        "{0} {1} {2}",
        lameArgs,
        wavFile,
        mp3File);
    
    process.Start();
    process.WaitForExit();
    
    int exitCode = process.ExitCode;
    

    【讨论】:

    • 谢谢,现在我只是想知道如何获取 exe 文件?我必须从蹩脚的项目中编译源代码吗?
    • 我只知道可以下载 Windows 二进制文件的德国网站。尝试在 google 中搜索“lame windows”以找到现成的二进制文件。
    • 好的,谢谢。我会试试看。 (顺便说一句......我的德语比我的英语好得多)
    【解决方案2】:

    您可以使用 System.Diagnostics.Process 类和相关类从 .NET 调用可执行文件 - 有关文档,请参阅 here

    Lame 有相当强大的命令行参数,可以在 here 找到。您可以使用ProcessStartInfo.Arguments 属性将命令行参数传递给进程。

    【讨论】:

    • 谢谢,现在我只是想知道如何获取 exe 文件?我必须从蹩脚的项目中编译源代码吗?
    • 我会获取最新的可执行文件并亲自将其包含在项目中。
    【解决方案3】:
    public void mciConvertWavMP3(string fileName, bool waitFlag)
    {
        //maxLen is in ms (1000 = 1 second)
        string outfile= "-b 32 --resample 22.05 -m m \"" + pworkingDir+fileName + "\" \"" + pworkingDir + fileName.Replace(".wav",".mp3") + "\"";
        System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
        psi.FileName = "\"" + pworkingDir + "lame.exe" + "\"";
        psi.Arguments = outfile;
        //psi.WorkingDirectory = pworkingDir;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Minimized;
        System.Diagnostics.Process p = System.Diagnostics.Process.Start(psi);
    
        if (waitFlag)
        {
            p.WaitForExit();
            // wait for exit of called application
        }
    }
    

    以上代码taken from here

    根据使用情况,您可以合并 Process.StartInfo 对象、控制属性(例如 ShellExecute),并将应用程序的任何输出重定向到(例如)日志文件或 UI 组件。

    要将 exe 与您的项目捆绑在一起,check this question from stackoverflow out。就个人而言,我会接受第一个建议:

    有几种方法可以 做到这一点。首先,您应该添加 program.exe 到项目中。你会 通过右键单击项目来执行此操作 在 Visual Studio 中,然后选择添加 > 现有项目... 选择 program.exe, 它会出现在项目中。 查看其属性,您可以设置 “复制到输出目录”到“复制 始终”,它将出现在您的 你旁边的输出目录 应用。

    如果你坚持上面的方法,那么相对引用lame.exe(例如'....\Tools\Lame.exe')。

    最后,根据官方蹩脚的网站:RareWares offers several compiled LAME versions, including modified versions featuring special functionality.

    【讨论】:

    • 非常感谢,这有帮助!现在的问题是,如何获取lame.exe以及如何将其添加到我的项目中,以便在应用程序发布时我也可以使用它``
    • 我需要检查 100% 的确定性,但我相信您可以将 exe 添加到项目的某个文件夹中,并相对引用它(即 ...\... \Tools\Lame.exe) 在文件名属性中。
    【解决方案4】:

    有一个 DLL 版本的 LAME,如果您找不到使用它的 VB 或 C# 示例,我会感到惊讶。检查此讨论主题:http://www.eggheadcafe.com/software/aspnet/31294459/-lameencdll-and-vbnet.aspx

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2013-07-30
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-28
      • 2011-06-06
      • 2012-09-15
      相关资源
      最近更新 更多