Audio &引用;sox——合并合并“的:如何将混合输出长度限制为两个输入中较短的一个?
我在Linux上的Makefile中使用命令行工具将两个原始(浮点32位)输入音频文件交错到一个文件中:Audio &引用;sox——合并合并“的:如何将混合输出长度限制为两个输入中较短的一个?,audio,makefile,sox,Audio,Makefile,Sox,我在Linux上的Makefile中使用命令行工具将两个原始(浮点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
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
效果缩短文件,例如(未测试):
注意:如果您想让我测试它,请提供一些示例数据。无法完全工作,因为
samps
变量最终为空-我的Makfile比我上面给出的更复杂,需要局部规则变量。不管怎么说,这显示了前进的方向,那就是soxi-s
,谢谢。@Danijel:这是一个make
问题,每一行都在它自己的子shell中执行,而且,您需要将美元符号加倍以引用shell变量。例如,见
sox --combine merge \
"| sox signal_1.f32 -p trim 0 ${samps}s" \
"| sox signal_2.f32 -p trim 0 ${samps}s" \
signal_mixed.f32