2

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

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

4

4 回答 4

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;
于 2010-12-29T13:11:27.647 回答
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
    }
}

以上代码取自这里

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

要将 exe 与您的项目捆绑在一起,请从 stackoverflow out 中检查此问题。就个人而言,我会接受第一个建议:

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

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

最后,根据官方蹩脚网站:RareWares 提供了几个编译的 LAME 版本,包括具有特殊功能的修改版本。

于 2010-12-29T13:05:20.000 回答
2

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

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

于 2010-12-29T13:08:24.680 回答
1

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

于 2010-12-29T13:59:27.910 回答