我的代码有问题,导致内存错误.我相信是由此功能引起的(请参阅下文).
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