我试图在python中实时绘制声音。我需要从麦克风中取出大块。PyAudio输入溢出
使用PyAudio,尝试使用
import pyaudio
import wave
import sys
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "output.wav"
p = pyaudio.PyAudio()
stream = p.open(format = FORMAT,
channels = CHANNELS,
rate = RATE,
input = True,
frames_per_buffer = chunk)
print "* recording"
all = []
for i in range(0, RATE/chunk * RECORD_SECONDS):
data = stream.read(chunk)
all.append(data)
print "* done recording"
stream.close()
p.terminate()
后,我得到跟随着错误:
* recording
Traceback (most recent call last):
File "gg.py", line 23, in <module>
data = stream.read(chunk)
File "/usr/lib64/python2.7/site-packages/pyaudio.py", line 564, in read
return pa.read_stream(self._stream, num_frames)
IOError: [Errno Input overflowed] -9981
我无法理解这样的缓冲区。我想要使用阻塞IO模式,所以如果块不可用,我想等待这些块。但是,当我创建除段或睡眠(0.1)之外的尝试时,我听到点击,所以这不是我想要的。
请为我的建议提出最佳解决方案?
也许你的块大小太小。也许它在缓冲区中获取的数据比您要取出的数据要多,因为块大小足够小,Python代码不能跟上。 – Demolishun
嗨。只是想知道这个问题上有没有更新?我正在间歇地得到'[Errno Input overflowed] -9981'错误。我已经检查过'p.is_format_supported'对于我使用的格式是否正确。 –