私は、JavaからProcessBuilderを使って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テストで原因I SOX法を実行することができるはずと確信しています
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
がスローされます。ターミナルでコマンドを実行しようとしましたが、問題なく動作しました。それが重要なのであれば、私はMacBook上の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