在c#项目中使用Sox.exe

时间:2015-12-01 13:26:10

标签: c# sox

我自己做了一个概念验证来测试这个工具来管理音频文件。我的目的是改变采样率。我的第一个例子很好用!

public class Test
{
    public void SoxMethod()
    {
        var startInfo = new ProcessStartInfo();
        startInfo.FileName = "C:\\Program Files (x86)\\sox-14-4-2\\sox.exe";
        startInfo.Arguments = "\"C:\\Program Files (x86)\\sox-14-4-2\\input.wav\" -r 16000 output.wav";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WorkingDirectory= "C:\\Program Files (x86)\\sox-14-4-2";
        using (Process soxProc = Process.Start(startInfo))
        {
            soxProc.WaitForExit();
        }
    }
}

但是当我想在我的bin文件夹中添加此工具但我得到异常时:目录名无效

public void SoxMethod()
    {
        var startInfo = new ProcessStartInfo();
        startInfo.FileName = "bin/sox-14-4-2/sox.exe";
        startInfo.Arguments = "bin/sox-14-4-2/input.wav -r 16000 output.wav";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WorkingDirectory= "bin/sox-14-4-2";
        using (Process soxProc = Process.Start(startInfo))
        {
            soxProc.WaitForExit();
        }
    }

也许它很明显,但我不知道我做错了什么

1 个答案:

答案 0 :(得分:1)

您的工作目录设置错误。请改用AppDomain.CurrentDomain.BaseDirectory。这将使进程从bin文件夹开始。然后,将您的文件和参数替换为 relative 工作目录(从而删除路径的bin部分。)

public void SoxMethod()
    {
        var startInfo = new ProcessStartInfo();
        startInfo.FileName = "sox-14-4-2/sox.exe";
        startInfo.Arguments = "sox-14-4-2/input.wav -r 16000 output.wav";
        startInfo.WindowStyle = ProcessWindowStyle.Hidden;
        startInfo.UseShellExecute = false;
        startInfo.CreateNoWindow = false;
        startInfo.WorkingDirectory = AppDomain.CurrentDomain.BaseDirectory;
        using (Process soxProc = Process.Start(startInfo))
        {
            soxProc.WaitForExit();
        }
    }