ProcessBuilder를 사용하여 Java에서 SoX를 실행하여 wav 파일을 자릅니다. 내가 같이 파일을 트림 할 때 다음과 같은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
:하지만
나는, 다른 JUnit 테스트의 원인, 내가 성공적으로 다음 명령을 실행하는 관리 삭스를 실행할 수 있어야 확신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
error=2, No such file or directory
과 함께 IOException
이 표시됩니다. 터미널에서 명령을 실행하려고 시도했지만 문제없이 작동했습니다. 중요하다면, 나는 eclipse의 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