我正在尝试使用PyAudio进行声音处理项目,但我有时会遇到此错误而且我不明白为什么。
以下代码播放我的笔记本电脑麦克风上听到的音频,然后暂停3秒钟然后继续。这段代码运行正常,在暂停期间,如果我拍手,音频在暂停结束后不播放,这使得看起来像缓冲区填满任何额外的音频都会丢失。
但是如果我将CHUNK减少到像20这样的低数字,一旦它暂停一秒就会抛出错误
File "C:\Anaconda3\lib\site-packages\pyaudio.py", line 608, in read
return pa.read_stream(self._stream, num_frames, exception_on_overflow)
OSError: [Errno -9981] Input overflowed
因此,如果由于(我认为)缓冲区填满而没有引发错误,音频可能会在暂停期间丢失,为什么在减少每个缓冲区的帧时会出现错误?
代码:
import pyaudio
import time
# initialize stream parameters
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
CHUNK = 1024
p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=CHUNK)
x = 1
while True:
data = stream.read(CHUNK)
stream.write(data)
x=x%100 + 1
if x == 100:
print(time.time())
time.sleep(3)
编辑 - 我想我通过将这个参数添加到read:
来解决问题data = stream.read(CHUNK, exception_on_overflow = False)
然而,我的问题仍然存在。我不明白为什么错误只会发生在一个小的CHUNK大小,即使看起来缓冲区在两种情况下都填满了。