问题描述
for i in wav/*.wav; do
sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"
done
那是为什么?
解决方法
sox -r 8000 -e unsigned -b 16 -c 1 "$i" "$i"
您没有在任何地方使用$o
(输出文件)-似乎您正在尝试从同一文件输入和输出(只是猜测-对sox
不熟悉)
一种方法是写入一个临时输出文件,然后将其移到输入文件的顶部:
for fname in wav/*.wav; do
TMP_OUT=$(mktemp)
sox -r 8000 -e unsigned -b 16 -c 1 "$fname" $TMP_OUT
mv $TMP_OUT $fname
done
这里的危险是,如果出现问题,您将丢失输入文件。我将检查sox
的结果,只有在sox成功的情况下才覆盖输入文件。