系统相关
首页 > 系统相关> > python-PyAudio内存错误

python-PyAudio内存错误

作者:互联网

我的代码有问题,导致内存错误.我相信是由此功能引起的(请参阅下文).

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

解决方法:

你有什么例外?如果是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

标签:memory,networking,pyaudio,python
来源: https://codeday.me/bug/20191208/2089797.html