1

我编写了以下代码,应该将 echo 放在可用的声音文件上。不幸的是,输出是一个非常嘈杂的结果,我并不完全理解。有人可以帮我解决这个问题吗?有没有跳过的步骤?

#convolving a room impulse response function with a sound sample both of stereo type
from scipy.io import wavfile
    inp=wavfile.read(sound_path+sound_file_name)
    IR=wavfile.read(IR_path+IR_file_name)
    if inp[0]!=IR[0]:
        print "Size mismatch"
        sys.exit(-1)
    else:
        rate=inp[0]
    print sound_file_name
    out_0=fftconvolve(inp[1][:,1],IR[1][:,0])
    out_1=fftconvolve(inp[1][:,1],IR[1][:,1])
    in_counter+=1
    out=np.vstack((out_0,out_1)).T
    out[:inp[1].shape[0]]=out[:inp[1].shape[0]]+inp[1]
    wavfile.write(sound_path+sound_file_name+'_echoed.wav',rate,out)
4

2 回答 2

2

将回声添加到声音文件就是这样......添加回声。 你的代码看起来不像是把两个声音加在一起;看起来它正在将输入的声音转换成别的东西。

您的数据流应如下所示:

source sound ------------------------------>|
      |                                     + ----------> target sound
      ---------> convolution echo --------->|

请注意,您的回声将比您的原始声音更长(即它有一个“尾巴”。)

将两个声音加在一起只是将两个声音中的每个单独的样本加在一起以产生新的输出波。我不认为vstack这样做。

于 2014-09-24T20:57:22.107 回答
1

显然 Wav 文件是作为 int16 文件导入的,应该在将它们转换为浮点数后进行修改:http: //nbviewer.ipython.org/github/mgeier/python-audio/blob/master/audio-files/audio-files-with -pysoundfile.ipynb

卷积后需要再次重新归一化。就是这样。

希望这对其他人也有帮助。

from utility import pcm2float,float2pcm
    input_rate,input_sig=wavfile.read(sound_path+sound_file_name)
    input_sig=pcm2float(input_sig,'float32')
    IR_rate,IR_sig=wavfile.read(IR_path+IR_file_name)
    IR_sig=pcm2float(IR_sig,'float32')

    if input_rate!=IR_rate:
        print "Size mismatch"
        sys.exit(-1)
    else:
        rate=input_rate
    print sound_file_name
    con_len=-1
    out_0=fftconvolve(input_sig[:con_len,0],IR_sig[:con_len,0])
    out_0=out_0/np.max(np.abs(out_0))
    out_1=fftconvolve(input_sig[:con_len,1],IR_sig[:con_len,1])
    out_1=out_0/np.max(np.abs(out_1))
    in_counter+=1
    out=np.vstack((out_0,out_1)).T
        wavfile.write(sound_path+sound_file_name+'_'+IR_file_name+'_echoed.wav',rate,float2pcm(out,'int16'))

可以从上面的链接下载实用程序。

更新:虽然它生成了一个工作输出,但它仍然不如使用原始网站Openair进行卷积时的结果。

于 2014-09-25T00:33:37.317 回答