繁体   English   中英

Python中的实时音频处理

[英]Real time audio processing in Python

我正在编写一个程序来检查计算机记录的音频信号中是否存在毛刺。 检测到音频后,我想检查数据的前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 线程包及其出色的信号功能,您可以实现所需的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM