问题描述
我在 Linux 上的 Makefile 中使用 SoX 命令行工具将两个原始(浮点 32 位)输入音频文件交错到一个文件中:
make_combine:
sox \
--bits 32 --channels 1 --rate 48000 signal_1.f32 \
--bits 32 --channels 1 --rate 48000 signal_2.f32 \
--type raw --channels 2 --combine merge signal_mixed.f32
当信号_1 和信号_2 的长度不同时,我遇到了问题。我如何将混合输出限制为两个输入中较短的一个?
解决方法
使用soxi -s
查找最短的文件,例如:
samps=$(soxi -s signal_1.f32 signal_2.f32 | sort -n | head -n1)
然后使用 trim
效果来缩短文件,例如(未经测试):
sox --combine merge \
"| sox signal_1.f32 -p trim 0 ${samps}s" \
"| sox signal_2.f32 -p trim 0 ${samps}s" \
signal_mixed.f32
注意:如果你想让我测试它,请提供一些示例数据。