无法在C#中使用Process运行SoX

时间:2012-12-06 11:04:50

标签: c# processstartinfo

我正在尝试使用SoX

将MP3文件转换为GSM编码的WAV

执行此操作的C#代码是:

Console.WriteLine(Cfg.SoxPath); // bin/sox.exe
Console.WriteLine(args); // A rather long argument
var startInfo = new ProcessStartInfo();
startInfo.FileName = Cfg.SoxPath;
startInfo.Arguments = args;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;

using (Process soxProc = Process.Start(startInfo))
{
    soxProc.WaitForExit();
}

代码的输出是:

bin\sox.exe  
"D:\VoiceRecorder Soundfiles Storage\MP3 Storage\2012-12-05\227\1\20121205_203436_2103c60a0000134850bfa1bd2c99_8075598.mp3" -c 1 -r 8000 -e gsm-full-rate "temp\227_20120901\SW120006_349990195665213_040154700_20121205203436_20.wav"  
bin\sox.exe FAIL formats: can't open input file `8000': No such file or directory

导致命令失败的原因是什么?

需要考虑的事项

  • 直接从cmd提示符执行时,该命令运行正常
  • 从sql server
  • 获取参数(-c 1 -r 8000 -e gsm-full-rate
  • 对参数进行细微更改(例如,将-e替换为--encoding)可能会更改错误消息
  • 尝试使用.NET 3.0和4.0
  • 错误消息甚至包含不属于参数(can't open input file 'ûg'
  • 的字符
  • 相同的参数总会导致相同的错误

1 个答案:

答案 0 :(得分:1)

我将“介于两者之间”的参数更改为:

-r 8k -e gsm-full-rate -c 1

它开始工作,即使它是相同的论点,只是拖了一下 我仍然不知道为什么它不能用于.NET,而只能从这些编辑之前的命令行开始。

但现在有效。