试图理解PyAudio错误:[Errno -9981]输入溢出

时间:2018-02-13 23:13:58

标签: python audio stream pyaudio portaudio

我正在尝试使用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大小,即使看起来缓冲区在两种情况下都填满了。

0 个答案:

没有答案