jhn*_*rvr 10 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()
Run Code Online (Sandbox Code Playgroud)
我给出的错误是:
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
Run Code Online (Sandbox Code Playgroud)
我在Google上搜索了这个错误,发现无论是大块还是小块都可以提供帮助.我尝试过这个并没有什么区别.我还尝试添加以下代码来捕获重载异常:
try:
data = stream.read(chunk)
except IOError as ex:
if ex[1] != pyaudio.paInputOverflowed:
raise
data = '\x00' * chunk
Run Code Online (Sandbox Code Playgroud)
这避免了错误,但我没有输出我的输入音频,而是听到一堆响亮的声音.
要进行故障排除,我注释掉了输出= True行,程序运行正常,但没有输出任何内容.我注释掉了输入= True并在Wave文件中读取,然后流能够输出音频.我尝试创建2个流,一个用于输入,一个用于输出,这也不起作用.
我还能做些什么来避免这个错误吗?
当我手动安装 pyaudio (从源代码构建 portaudio)时,我遇到了同样的情况,一个不太完美的解决方法是下载适用于Apple Mac OS X(通用)的 pyaudio 安装它,这只会为 python 2.6 及之前的版本安装它。如果您使用 /usr/bin/python2.6 运行代码,那么您就完成了。但如果你确实想要 2.7,请将安装的模块(pyaudio.py、_portaudio.so)复制到 2.7 文件夹 /Library/Python/2.7/site-packages/。
我不知道为什么它不能从源代码构建模块。