python - Python中的实时音频处理

标签 python audio signal-processing pyaudio

我正在编写一个程序来检查计算机录制的音频信号中是否存在故障。检测到音频后,我想检查前 5 秒数据中的毛刺(对应于 44.1kHz 采样率的 220500 个样本),继续接下来的 5 秒数据并检查其中的毛刺,然后接下来的 5 秒等。我有一个 while 循环,它在检测到音频后开始,它开始从流中读取音频样本到数组中,直到数组中有 220500 个样本,之后它进入一个 if 语句开始的地方检查 220500 个样本中的故障(然后删除数组中的所有元素)。我的问题是,在发生这种情况时,计算机仍在录制音频,但没有将其从流中读取到数组中,当我退出 if 语句并重新启动 while 循环时,我已经错过了几秒钟的音频数据。

while 1:
    # little endian, signed short
    snd_data = array('h', stream.read(1500))
    if byteorder == 'big':
        snd_data.byteswap()
    r.extend(snd_data)
    if len(r) == 220500 or silent:
        r = trim(r)
        data = pack('<' + ('h'*len(r)), *r)
        data = np.fromstring(data,dtype=np.int16)

        glitch detection carried out here...

我正在使用 PyAudio 录制音频

p=pyaudio.PyAudio() # start the PyAudio class
stream=p.open(format=pyaudio.paInt16,channels=1,rate=RATE,input=True,input_device_index = 1, output_device_index = 6,frames_per_buffer=1500)

我想知道在 if 语句中执行毛刺检测的同时,有什么方法可以让我继续从音频流读取到数组中吗?或者,如果没有,我还有其他方法可以解决这个问题吗?

最佳答案

你的答案是多线程 不是多处理,通过使用python threading package及其出色的signal特性,你可以实现你想要的。

关于python - Python中的实时音频处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585705/

相关文章:

matlab - 在 Matlab 中将朴素逆滤波器与维纳滤波器进行反卷积比较

python - pip install -r requirements.txt 来自 puppet ?

python - 如何在 python 中解析字符串?

python - 如何在Python中 reshape 列表中的多个数组

google-app-engine - 从 Google App Engine 流式传输音频

java字节数组播放声音

python - 将掩码结果转换为不同的随机数

android - 当我开发Android应用程序时,如何检测dolby是打开还是关闭?

python - 使用 PyAudio 作为振荡器删除/控制点击声音

algorithm - 了解 Freeverb 的梳状滤波器实现