【问题标题】:Adding effects to make voice sound like it’s over a telephone添加效果以使声音听起来像是在电话上
【发布时间】:2014-03-19 06:32:41
【问题描述】:

我了解当一个人通过电话讲话时,由于所使用的麦克风/通道/扬声器的频率响应不同,他的声音会有些不同。

我一直在玩 Python 中的语音信号处理。 我想知道如何模拟这种效果。我需要设计过滤器吗?

【问题讨论】:

  • 模糊盒很好地模拟了电话传输的效果。基本上,电路的动态差会迫使波形变为方波而不是正弦波。 (对不起,如果我的术语在这里关闭。)
  • 由于这个问题更多的是关于信号处理而不是编码,您可能需要重新提问或将此问题移至 dsp.stackexchange.com
  • 您需要两个过滤器用于音频流,应用设置为 3000Hz / 12dB 每倍频程的“低通滤波器”,然后应用设置为每倍频程 300Hz / 12dB 的“高通滤波器”
  • 这个mpastell.com/2010/01/18/fir-with-scipy 和这个dsp.stackexchange.com/questions/2885/… 应该会在路上得到帮助。我现在学习音频处理太多了。
  • @deinonychusaur 这些文章帮了大忙,我按照 John Woods 的建议编写了一个 [300-3000Hz]/12dB 每倍频程的带通滤波器。修改后的音频听起来像是来自电话,但不完全是。我想我得再玩一会儿。干杯!谢谢。

标签: python scipy signal-processing


【解决方案1】:

这里是代码。适合我:

from scipy.signal import lfilter, butter
from scipy.io.wavfile import read,write
from numpy import array, int16
import sys

def butter_params(low_freq, high_freq, fs, order=5):
    nyq = 0.5 * fs
    low = low_freq / nyq
    high = high_freq / nyq
    b, a = butter(order, [low, high], btype='band')
    return b, a

def butter_bandpass_filter(data, low_freq, high_freq, fs, order=5):
    b, a = butter_params(low_freq, high_freq, fs, order=order)
    y = lfilter(b, a, data)
    return y

if __name__ == '__main__':
    fs,audio = read(sys.argv[1])
    low_freq = 300.0
    high_freq = 3000.0
    filtered_signal = butter_bandpass_filter(audio, low_freq, high_freq, fs, order=6)
    fname = sys.argv[1].split('.wav')[0] + '_moded.wav'
    write(fname,fs,array(filtered_signal,dtype=int16))

【讨论】:

  • 嗨,回来检查一下,发现sr 没有在write 行中定义(还有butter_bandpass_filter != butter_bandpassFilter
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
相关资源
最近更新 更多