Я пытаюсь выполнить проект обработки звука с помощью 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)
РЕДАКТИРОВАТЬ. Я думаю, что исправил проблему, добавив этот аргумент в чтение:
data = stream.read(CHUNK, exception_on_overflow = False)
Однако мой вопрос остается в силе. Я не понимаю, почему ошибка возникает только при небольшом размере CHUNK, хотя кажется, что буфер заполняется в обоих случаях.