
對於 sox-14-4-2 資料夾中的所有 .wav 文件,我需要在開始時刪除靜音,將結果複製到現有的子資料夾中輸出,然後反轉文件,再次消除靜音,最後再次反轉。
第一個靜音刪除任務是沒有問題的:
FOR %%A IN (*.wav) do (
sox %%A "Output\%%~nxa" silence 1 0.1 1%
)
不知何故,我無法想像如何為每個 .wav 檔案一一執行另外 3 個 sox 命令輸出之後的資料夾?
FOR %%A IN ("Output\sample1.wav") DO (
sox %%A "Output\%%~nxa.wav" reverse
)
這裡是第二個 sox 指令反向,一個普遍的問題是我不知道如何將其應用於輸出資料夾?
FOR %%A ("Output\*.wav")
是錯的
SoX 的第二個具體問題是我不能使用相同的名字 - 我不能使用%%~nxa,相反,我需要使用新名稱創建一個新文件,否則輸出將被破壞.wav 輸出檔過早 EOF在輸出資料夾,它會變成80位元組。
如何解決這個問題並在所有 .wav 檔案上按順序應用 4 個 SoX 命令?
完成的 .wav 檔案應位於子資料夾中輸出使用原始輸入檔名完成所有任務後,還將所有輸入檔保留在上面的資料夾中。
答案1
看起來 SoX 在處理未壓縮檔案時需要一些特殊處理。
在寫入輸出 SoX 時,未壓縮的輸入檔案仍處於開啟狀態,因此在這種情況下強制替換總是會導致.wav 輸出檔過早 EOF錯誤。
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