Audio &引用;sox——合并合并“的:如何将混合输出长度限制为两个输入中较短的一个?

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

我在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

当信号_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