Я запускаю SoX из Java, используя ProcessBuilder для обрезки WAV-файла.Я уверен, что смогу запустить SoX, потому что в других тестах JUnit мне удается успешно выполнить следующие команды:
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
.Я попытался запустить команду на терминале, и она работала без проблем.Если это имеет значение, я провел его через тест JUnit из eclipse на macbook.
Вот код, который я использовал для его сборки в 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.