gpt4 book ai didi

python - Python中的实时音频处理

转载 作者:行者123 更新时间:2023-12-02 22:37:29 25 4
gpt4 key购买 nike

我正在编写一个程序来检查计算机录制的音频信号中是否存在故障。检测到音频后,我想检查前 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com