
Для всех .wav-файлов в папке sox-14-4-2 мне нужно удалить тишину в начале, скопировать результат в существующую подпапкуВыход, затем верните файл в исходное положение, снова удалите тишину и, наконец, снова верните файл в исходное положение.
Первая задача по удалению тишины не вызывает проблем:
FOR %%A IN (*.wav) do (
sox %%A "Output\%%~nxa" silence 1 0.1 1%
)
Я почему-то не могу себе представить, как выполнить еще 3 команды sox одну за другой для каждого .wav-файла вВыходпапка после этого?
FOR %%A IN ("Output\sample1.wav") DO (
sox %%A "Output\%%~nxa.wav" reverse
)
Вот для второй команды soxобеспечить регресс, одна общая проблема заключается в том, что я не знаю, как применить это ко всем .wav-файлам вВыходпапка?
FOR %%A ("Output\*.wav")
неправильно
Вторая специфическая проблема SoX заключается в том, что я не могу использовать то же самое имя - я не могу использовать%%~нкса, вместо этого мне нужно создать новый файл с новым именем, иначе вывод будет нарушенПреждевременный EOF в выходном файле .wavвВыходпапку и она станет 80 байт.
Как решить эту проблему и применить 4 команды SoX по порядку ко всем .wav файлам?
Готовые .wav файлы должны быть расположены в подпапкеВыходпосле того, как все задачи выполнены с исходным именем входного файла, также сохраните все входные файлы в папке выше.
решение1
Похоже, что SoX требует специальной обработки при работе с несжатыми файлами.
При записи выходных данных SoX необходимо, чтобы несжатый входной файл оставался открытым, поэтому принудительная замена в этом случае всегда приведет кПреждевременный EOF в выходном файле .wavошибка.
for %%a in (*.wav) do copy /y *.wav *.
setlocal enabledelayedexpansion
for %%a in (*.wav) do (
if not exist "%%~dpaTemporalOutput\" md "%%~dpaTemporalOutput\"
if not exist "%%~dpaOutput\" md "%%~dpaOutput\"
"sox.exe" "%%~dpa%%~xna" "%%~dpaTemporalOutput\%%~xna" OUR 2 SOX COMMANDS HERE
"sox.exe" "TemporalOutput\%%~xna" "%%~xna" SAME 2 SOX COMMANDS HERE )
del /f /q "TemporalOutput\*.wav"
rmdir /s /q "TemporalOutput"
move "*.wav" "Output\"
ren *. *.wav
exit /b