c# - c#项目中Sox.exe的使用

标签 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();
        }
    }

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

最佳答案

您的工作目录设置错误。请改用 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();
        }
    }

关于c# - c#项目中Sox.exe的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34021582/

相关文章:

c# - 条件运算符和比较委托(delegate)

c# - 仅删除逗号前后的空格

c# - 将动态生成的图像分配给 ToggleButton.Content

c# - PorterDuff.Mode.Multiply 没有按预期工作?黑色背景而不是透明

linux - 标准输出的基于文本的用户界面

c++ - 组播波形发生器

command-line - 如何将 16 位 wav 转换为原始音频

audio - 使用 Sox/FFMPEG 使声音高到听不见或无法察觉

audio - libsox 将多声道 wav 拆分为单声道

javascript - 如何从客户端安全地发送密码?