3

我的代码有问题,导致内存错误。我相信这是由这个功能引起的(见下文)。

默认发送音频():
    p = pyaudio.PyAudio()
    流 = p.open(格式 = 格式,
                    频道 = 频道,
                    率 = 率,
                    输入=真,
                    输出=真,
                    frames_per_buffer = 块)

    数据 = 流。读取(块)
    客户端(chr(CMD_AUDIO),encrypt_my_audio_message(数据))

def 按键(事件):
    如果 event.keysym == 'Escape':
        root.destroy()
    如果 event.keysym == 'Control_L':
        #print("发送数据...")
        发送音频()
        #print("数据已发送!")

该函数的作用是从麦克风读取数据,然后通过网络发送该数据。但是由于任何时候按下键并且有任何数据发送它(这可能是白噪声等)。有没有一种方法可以减少故障,我不确定这是使用按键来解决这种情况的正确方法。

谢谢你的回复,我得到的错误是

线程 Thread-1 中的异常:
回溯(最近一次通话最后):
  文件“C:\Python27\lib\threading.py”,第 552 行,在 __bootstrap_inner
    自我运行()
  运行中的文件“C:\Python27\lib\threading.py”,第 505 行
    self.__target(*self.__args, **self.__kwargs)
  服务器中的文件“chat.py”,第 62 行
    frames_per_buffer = 块)
  文件“C:\Python27\lib\site-packages\pyaudio.py”,第 714 行,打开
    流 = 流(自我,*args,**kwargs)
  __init__ 中的文件“C:\Python27\lib\site-packages\pyaudio.py”,第 396 行
    self._stream = pa.open(**参数)
IOError: [Errno 内存不足] -9992
4

2 回答 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
于 2011-07-03T06:58:07.627 回答
3

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

data = stream.read(chunk)  

data = stream.read(chunk, exception_on_overflow = False)  
于 2019-09-15T03:56:53.893 回答