ProcessBuilderを使用してJavaからSoXを実行し、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
。ターミナルでコマンドを実行してみましたが、問題なく動作しました。重要な場合は、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を使用しました。