“sox --combine merge”:如何将混合输出长度限制为两个输入中较短的一个?

问题描述

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

注意:如果你想让我测试它,请提供一些示例数据。