pad Sox Ошибка для Java

Я пытаюсь запустить эту команду sox, чтобы смешать несколько аудиовходов из моей программы, используя:

String command = "sox C:/serverFolder/a1.wav -p pad 0 0 | sox - -m C:/serverFolder/a2.wav -p pad 10.0 0 | sox - -m C:/serverFolder/a3.wav -p pad 0 0 | sox - -m C:/serverFolder/a4.wav -p pad 20.0 0 |  sox - -m -v 0 C:/serverFolder/blank.wav C:/serverFolder/audioFile.wav";
Process proc = Runtime.getRuntime().exec(command);

я получил

sox FAIL pad: usage: {length[@position]}

если я запускаю эту команду в свой cmd, она работает нормально. Я попробовал несколько подходов, подобных предложенному здесь со списком: Использование Java ProcessBuilder для запуска SoX< /а>

Или тот, который предлагается здесь, используя абсолютный путь к sox Выполнение команд Sox из кода Java

Поскольку код отлично работает в cmd, я предполагаю, что плохо отправляю его из java. есть идеи?


person bruno    schedule 28.11.2013    source источник
comment
Вы пытаетесь заставить Process запускать канал, который является конструкцией оболочки. Если вы хотите выполнить канал, вы должны запустить свою команду в какой-либо оболочке, способной выполнять канал, например объяснено здесь для ОС unix-y, но более или менее то же самое должно быть возможно с cmd Windows.   -  person fvu    schedule 29.11.2013
comment
Спасибо, fvu, это имело смысл. Я изменил команду на: String[] command = new String[]{"cmd.exe","/c sox C:/serverFolder/a1.wav -p pad 0 0 | sox - -m C:/serverFolder/a2.wav -p pad 10.0 0 | sox - -m C:/serverFolder/a3.wav -p pad 0 0 | sox - -m C:/serverFolder/a4.wav -p pad 20.0 0 | sox - -m -v 0 C:/serverFolder/blank.wav C:/serverFolder/audioeFile.wav"} Process proc = Runtime.getRuntime().exec(command); и работал нормально. Спасибо за ваше время!   -  person bruno    schedule 29.11.2013
comment
yw :) Могу я предложить вам опубликовать свое решение в качестве ответа и принять его? Таким образом, будущие посетители смогут увидеть действительное решение проблемы.   -  person fvu    schedule 29.11.2013
comment
@fuv Я планировал это сделать, но обнаружил, что команда, хотя она работает нормально и создает новый файл, не работает должным образом.   -  person bruno    schedule 03.12.2013
comment
@fuv Я планировал это сделать, но обнаружил, что команда, хотя она работает нормально и создает новый файл, не работает должным образом. Прокладки не работают. Звуки начинаются с секунды: a1 - 10s a2 - 20s a3 - 20s a4 - 20s Где пэды: a1.wav -p pad 0 0 a2.wav -p pad 10.0 a3.wav -p pad 0 0 a4.wav - p pad 20.0 0 есть мысли? Должен ли я создать новый вопрос?? Спасибо еще раз   -  person bruno    schedule 03.12.2013
comment
Этот конвейер работает правильно, если вы запускаете его из командной строки? Обычно не должно быть никакой разницы в том, что делает вызов cmd программно, и как он ведет себя интерактивно. Хотя может быть разница между тем, как оболочки Unix/Linux запускают каналы, и тем, как это делает Windows, я не уверен.   -  person fvu    schedule 03.12.2013
comment
@fuv то же самое происходит, если я запускаю команду из cmd. Но этого не ожидается, верно? Я уже создал новый вопрос, но не получил никакого внимания. stackoverflow.com/questions/20342180/   -  person bruno    schedule 03.12.2013
comment
Спасибо вам, ребята! В Windows будьте осторожны с двойными кавычками (new String[] {\cmd.exe,/c\ + subScript}). Любой путь должен быть заключен в двойные кавычки   -  person Gilian    schedule 17.07.2016