0
我使用ProcessBuilder从java运行SoX来修剪wav文件。我相信我应该能够运行SOX,原因在其他JUnit测试,我设法成功运行下面的命令:使用Java的ProcessBuilder运行SoX
sox/sox --version
sox/sox --i -r test/test.wav
sox/sox --i -D test/test.wav
sox/sox --i -b test/test.wav
sox/sox --i -c test/test.wav
但是当我尝试修剪文件,如下:
sox/sox -V3 "/Users/username/workspace/Thesis Corpus Integrator/test/test.wav" -b 16 "/Users/username/workspace/Thesis Corpus Integrator/test/newWaveFile.wav" channels 1 trim 0:00:00.000 =0:00:30.000
它抛出一个IOException
错误:error=2, No such file or directory
。我尝试在终端上运行该命令,并且它没有问题。如果它很重要,我在ebook中通过一个MacBook上的JUnit测试来运行它。
这是我用来建造起来的ProcessBuilder代码:
StringBuilder command = new StringBuilder(soxCommand) // soxCommand resolves to sox/sox, and is used in all the other tests without any problems
if (WavCutter.getMetadata(srcFile.getAbsolutePath(),
MetadataField.SAMPLE_RATE) != 16000) {
command.append(" -V3");
command.append(" -G");
command.append(" \"" + srcFile.getAbsolutePath() + '\"');
command.append(" -b 16");
command.append(" \"" + destFile.getAbsolutePath() + '\"');
command.append(" channels 1");
command.append(" gain -h");
command.append(" rate 16000");
command.append(" trim");
command.append(" " + startTime.toString());
command.append(" " + '=' + endTime.toString());
Process soxProcess = new ProcessBuilder(command.toString())
.start();
我也尝试过同样的事情,但使用一个ArrayList。
您能向我们展示ProcessBuilder代码吗?我希望它不能正确处理文件名中的空格。 – bramp
最初,我并没有用引号包围文件路径,但在失败后,我尝试添加引号。 – cesar
@ bramp谢谢。你给了我一个关于如何解决它的大提示。这不是文件名,而是它的作用。 – cesar