I am trying to do a sound processing project with PyAudio, but I sometimes get this error and I don't understand why.
The following code plays back audio heard on my laptop mic, and then pauses for 3 seconds and then continues. This code runs fine, and during the pause if I clap, the audio doesn't play after the pause ends which makes it seem like once the buffer fills up any extra audio is lost.
But if I decrease CHUNK to a low number like 20, once it pauses for a second it throws the error
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
So if audio can be lost during the pause due to (I think) the buffer filling up without throwing an error, why is there an error when I decrease the frames per buffer?
Code:
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)
EDIT - I think I fixed the problem by adding this argument to the read:
data = stream.read(CHUNK, exception_on_overflow = False)
However, my question still stands. I don't understand why the error would only occur with a small CHUNK size even though it seems like the buffer is filling up in both cases.