在设置PyAudio Stream输入和输出为True时获取IOError:[Errno输入溢出] -9981

时间:2011-12-19 20:48:32

标签: python portaudio pyaudio

我正在尝试在Mac(OS 10.7.2)上运行以下代码(来自PyAudio文档的示例):

import pyaudio
import sys

chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5

p = pyaudio.PyAudio()

stream = p.open(format = FORMAT,
                channels = CHANNELS,
                rate = RATE,
                input = True,
                output = True,
                frames_per_buffer = chunk)

print "* recording"
for i in range(0, 44100 / chunk * RECORD_SECONDS):
    data = stream.read(chunk)
    stream.write(data, chunk)
print "* done"

stream.stop_stream()
stream.close()
p.terminate()

我给出的错误是:

Traceback (most recent call last):
  File "PyAudioExample.py", line 24, in <module>
data = stream.read(chunk)
  File "/Library/Python/2.7/site-packages/pyaudio.py", line 564, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981

我在Google上搜索了这个错误,发现无论是大块还是小块都可以提供帮助。我尝试过这个并没有什么区别。我还尝试添加以下代码来捕获重载异常:

try:
    data = stream.read(chunk)
except IOError as ex:
    if ex[1] != pyaudio.paInputOverflowed:
        raise
    data = '\x00' * chunk

这避免了错误,但我没有输出我的输入音频,而是听到了一堆响亮的声音。

要进行故障排除,我注释掉了输出= True行,程序运行正常,但没有输出任何内容。我注释掉了输入= True并在Wave文件中读取,然后流能够输出音频。我尝试创建了两个流,一个用于输入,另一个用于输出,这也不起作用。

我还能做些什么来避免这个错误吗?

2 个答案:

答案 0 :(得分:1)

当我手动安装pyaudio(从源代码构建portaudio)时遇到相同的情况, 一个不太完美的解决方法是下载Apple Mac OS X (Universal)的pyaudio 安装它,它只会安装python 2.6和以前的版本。 如果你使用/usr/bin/python2.6运行代码,那么你就完成了。 但如果你真的想要2.7,请将已安装的模块(pyaudio.py,_portaudio.so)复制到2.7文件夹/Library/Python/2.7/site-packages/。

我不知道为什么它不能从源代码构建模块。

答案 1 :(得分:0)

portaudio中有一个错误,直到最近在OS X中引起了许多虚假的溢出错误(参见http://music.columbia.edu/pipermail/portaudio/2012-June/014167.html)。

我已确认截至2012-08-06的portaudio每日快照修复了该错误。