【问题标题】:"sox --combine merge": how to limit the mixed output length to the shorter of the two inputs?“sox --combine merge”:如何将混合输出长度限制为两个输入中较短的一个?
【发布时间】:2021-05-10 09:52:04
【问题描述】:

我在 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 的长度不同时,我遇到了问题。如何将混合输出限制为两个输入中较短的一个?

【问题讨论】:

    标签: audio makefile sox


    【解决方案1】:

    使用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
    

    注意:如果要我测试,请提供一些示例数据。

    【讨论】:

    • 不能完全工作,因为 samps 变量最终为空 - 我的 Makfile 比我上面给出的更复杂,需要本地规则变量。无论如何,这表明了要走的路,这是soxi -s,谢谢。
    • @Danijel:这是一个make 问题,每一行都在其自己的子shell 中执行,此外,您需要将美元符号加倍以引用shell 变量。参见例如stackoverflow.com/a/13774867/1331399
    猜你喜欢
    • 1970-01-01
    • 2011-05-30
    • 2012-10-15
    • 2010-11-16
    • 1970-01-01
    • 2017-11-07
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多