SoX FIR 单线

问题描述 投票:0回答:2

我正在尝试通过与 SoX 中的脉冲响应卷积来应用混响。下面的 shell 脚本正是我想要的:

#!/usr/bin/env bash
# 
# Convolve audio file with and impulse response (IR)
# 
# Usage:
#
#     applyReverb.sh <ir.wav> <audio.wav> <output.wav>

# IR duration (needed for zero-padding to prevent SoX from cutting 
# the resulting audio after applying the FIR filter
IR_DUR=`soxi -D $1`

# read IR from wav, resample it if necessary, make sure is mono
# and save it as plain text (.dat format in SoX). Also reduces gain 
# to prevent clipping later
sox --norm=-10 -c 1 $1 -r 44100 filter.dat

# extract the coeffients (second column, skipping the first 2 lines)
awk 'NR<3{next}{print $2}' filter.dat > filter.txt

# apply reverb using SoX's fir effect (need front zero-padding to for
# the extra samples due to the convolution
sox "|sox $2 -p pad $IR_DUR 0" --norm $3 fir filter.txt

问题

如果没有临时文件(filter.*),我该如何做到这一点?我知道答案就在管道内,但我无法让它发挥作用。

shell audio sox
2个回答
4
投票

经过一番尝试和错误,我找到了我想要的东西。如果有人感兴趣,这是我的解决方案:

sox --norm=-10 -c 1 $1 -r 44100 -t dat - | awk 'NR<3{next}{print $2;}' | sox "|sox $2 -p pad $d $d" --norm $3 fir -

0
投票

有点偏离主题,但你可以使用 ffmpeg 来更容易地实现这一点:

ffmpeg -i input.wav -i "impulse_response.wav" -lavfi afir 输出.wav

impulse_response.wav 将是您的 FIR。

参见: https://unix.stackexchange.com/questions/612414/how-to-apply-reverb-effect-to-audio-files-using-commandline-tools-only

© www.soinside.com 2019 - 2024. All rights reserved.