PyAudio内存错误

3
我遇到了一个代码问题,导致内存错误。我认为是以下这个函数引起的(请参见下文)。
def sendAudio():
    p = pyaudio.PyAudio()
    stream = p.open(format = FORMAT,
                    channels = CHANNELS,
                    rate = RATE,
                    input = True,
                    output = True,
                    frames_per_buffer = chunk)
data = stream.read(chunk) client(chr(CMD_AUDIO), encrypt_my_audio_message(data))
def keypress(event): if event.keysym == 'Escape': root.destroy() if event.keysym == 'Control_L': #print("Sending Data...") sendAudio() #print("Data Sent!")
该函数的作用是从麦克风读取数据,然后将该数据发送到网络上。但是,由于每次按键并且有任何数据时都会发送它(这可能是白噪声等),是否有办法使其更少出现故障?我不确定使用按键是否是解决此情况的正确方法。
谢谢您的回复,我收到的错误是:
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 552, in __bootstrap_inner
    self.run()
  File "C:\Python27\lib\threading.py", line 505, in run
    self.__target(*self.__args, **self.__kwargs)
  File "chat.py", line 62, in server
    frames_per_buffer = chunk)
  File "C:\Python27\lib\site-packages\pyaudio.py", line 714, in open
    stream = Stream(self, *args, **kwargs)
  File "C:\Python27\lib\site-packages\pyaudio.py", line 396, in __init__
    self._stream = pa.open(**arguments)
IOError: [Errno Insufficient memory] -9992
2个回答

3

你收到了什么异常?如果是来自PortAudio的输入溢出,可以尝试增加块大小。此外,当白噪声的缓冲区溢出时,可以通过捕获异常并返回空流来处理:

try:
    data = stream.read(chunk)
except IOError as ex:
    if ex[1] != pyaudio.paInputOverflowed:
        raise
    data = '\x00' * chunk  # or however you choose to handle it, e.g. return None

@Andrew:不确定你是否已经尝试过这个,但也许在stream.read调用中减小块大小会有所帮助。 - ars

3

尝试增加块的大小。 对于溢出问题,您需要做的唯一事情是将代码替换为

data = stream.read(chunk)  

to

data = stream.read(chunk, exception_on_overflow = False)  

添加exception_on_overflow=False对我来说解决了这个问题,但我很好奇:溢出是否意味着我正在丢失数据?我的块大小为4096,第一次调用stream.read()工作正常,而第二次调用则抛出[Errno -9981]输入溢出。 - jamshehan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接