如何在我的应用程序中使用lame.exe?

时间:2010-12-29 12:59:24

标签: c# .net mp3 pixelsense lame

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

但是如何从我的应用程序中调用此exe文件?以及如何将其包含在我的应用程序中?

4 个答案:

答案 0 :(得分:5)

使用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;

答案 1 :(得分:2)

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中,选择Add>   现有项目...选择program.exe,   它将出现在项目中。   查看其属性,您可以设置   “复制到输出目录”到“复制”   总是“,它会出现在你的身上   您旁边的输出目录   应用

如果您坚持使用上述方法,则相对引用lame.exe(例如'.... \ Tools \ Lame.exe')。

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

答案 2 :(得分:2)

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

Lame拥有非常强大的命令行参数,可以找到here。您可以使用ProcessStartInfo.Arguments属性将命令行参数传递给Process。

答案 3 :(得分:1)

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