Audio 处理:将记录的声学空间(脉冲响应)应用于音频文件

Audio 处理:将记录的声学空间(脉冲响应)应用于音频文件,audio,processing,minim,Audio,Processing,Minim,我需要将48kHz的脉冲响应应用于44.1kHz的音频文件。例如,可能有人在讲话。如果我使用了正确的术语,我需要将两个音频文件卷积在一起,这样听起来就像有人在教堂里讲话 我不知道的是我该怎么做。我查看了minim库,因为它是我记得使用过的唯一一个音频库,我发现了一个例子,将低通滤波器的脉冲响应应用于音频文件。有没有办法将两个音频文件卷积在一起以输出新的声音?音频处理不是我的专长,所以请不要介意我的无知。谢谢,我一直在想办法 是的,卷积是您想要的,但首先您的源必须是相同的采样率。一旦源的采样率相同

我需要将48kHz的脉冲响应应用于44.1kHz的音频文件。例如,可能有人在讲话。如果我使用了正确的术语,我需要将两个音频文件卷积在一起,这样听起来就像有人在教堂里讲话


我不知道的是我该怎么做。我查看了minim库,因为它是我记得使用过的唯一一个音频库,我发现了一个例子,将低通滤波器的脉冲响应应用于音频文件。有没有办法将两个音频文件卷积在一起以输出新的声音?音频处理不是我的专长,所以请不要介意我的无知。谢谢,我一直在想办法

是的,卷积是您想要的,但首先您的源必须是相同的采样率。一旦源的采样率相同,则有两个选项可用于执行S/R转换:1。您可以“直接”完成,这是最简单的方法,但需要M*N时间,或2。您可以使用傅里叶变换来实现,它更复杂,但速度更快。您还需要实现重叠添加算法。看看Minim的文档,在我看来,他们使用的是标准IIR滤波器,而不是脉冲响应的卷积,所以我认为这不会有什么帮助。在Minim使用FFT给出的结果的基础上,你需要做大量的卷积运算。如果你想走“直达”路线,它会像这样:

for( i in 0...input.length )
    for( j in 0...conv.length )
        output[i] += i-j < 0 ? 0 : input[i-j] * conv[j] ;
for(0中的i…input.length)
用于(0…转换长度中的j)
输出[i]+=i-j<0?0:输入[i-j]*conv[j];
更多详情请点击这里:或谷歌“离散卷积”


更新:Minim确实给你带来了麻烦:

可能是随机的,但听起来像是有什么要求:)是的,我去年做不到这一点,今年也做不到,这是重修课程的第一个问题。很遗憾当时没有想办法解决这个问题。由于某些原因,上周由于一些奇怪的原因,我无法通过网络邮件发送任何电子邮件,所以我决定在这里询问答案。你必须使用处理吗?听起来更适合Max/MSP这样的工作。更多信息:根据这个问题,我可以使用处理或向量编程环境,我以前从未使用过,因此处理是我所知道的最接近的事情。@Stock98实际上任务并没有那么糟糕,当你意识到它有多简单时,它有点酷。如果要对两个信号进行卷积运算,首先需要确保使用相同的采样率,因此第一步是将脉冲重新采样到要卷积到的音频文件的速率,第二步是实际的卷积运算,最后将文件写入磁盘。Minim提供了一个选择,但我没有看到任何关于重采样的内容。想想看。。。