gpt4 book ai didi

python - 网络上的PyAudio崩溃

转载 作者:行者123 更新时间:2023-12-03 11:49:28 28 4
gpt4 key购买 nike

您好,我遇到无法解决的PyAudio问题。当我在网络上使用它(一段时间后)时,它崩溃了。我得到的错误是

线程Thread-1中的异常:
追溯(最近一次通话):
__bootstrap_inner中的文件“C:\Python27\lib\threading.py”,第552行
self.run()
运行中的文件“C:\Python27\lib\threading.py”,第505行
self .__ target(* self .__ args,** self .__ kwargs)
服务器中的文件“C:\Users\maboroshi\Desktop\myChat\chat.py”,行71
frame_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设备不可用] -9985

我的代码在下面(大部分:-P

这是用于解密数据和管理连接

def crypto_my_message(msg):
iv =“1234567812345678”
键= your_friends_key
如果len(key)不在(16,24,32)中:
引发ValueError(“ key 必须为16、24或32个字节”)
如果(len(msg)%16)!= 0:
引发ValueError(“消息必须为16字节的倍数”)
如果len(iv)!= 16:
引发ValueError(“IV必须为16个字节”)
密码= AES.new( key ,AES.MODE_CBC,iv)
明文= cipher.decrypt(msg)
返回纯文本

###服务器功能###
def server():
主机=''
端口= 9001
###初始化套接字
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
server_socket.bind((主机,端口))
server_socket.listen(5)
###开始接收循环
read_list = [server_socket]
而True:
可读,可写,错误= select.select(read_list,[],[])
对于可读的:
如果s是server_socket:
conn,addr = s.accept()
read_list.append(conn)
打印“连接来自”,地址
别的:
msg = conn.recv(2024)
如果消息:
cmd,msg = ord(msg [0]),msg [1:]
如果cmd == CMD_MSG:
listb1.insert(END,crypto_my_message(msg.strip())+“\n”)
listb1.yview(END)
elif cmd == CMD_AUDIO:
#d = speex.Decoder()
#d.initialize(speex.SPEEX_MODEID_WB)
p = pyaudio.PyAudio()
流= p.open(格式=格式,
channel = channel ,
费率= RATE,
输入=真,
输出= True,
frame_per_buffer =块)
stream.write(decrypt_my_message(msg),chunk)#将数据写回扬声器
别的:
s.close()
read_list.remove(s)

这是用于连接和发送加密的音频

def crypto_my_audio_message(msg):
键= your_key
iv ='1234567812345678'
aes = AES.new( key ,AES.MODE_CBC,iv)
编码器= PKCS7Encoder()
pad_text = encoder.encode(msg)
msg = aes.encrypt(pad_text)
返回消息

def connectToServer():
CLIENT_PORT = 9001
CLIENT_HOST = str(entryhost.get())
全局性
尝试:
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((CLIENT_HOST,CLIENT_PORT))
打印“已连接\n”
除了:
打印“无法连接”

###客户端功能###
def client(cmd,msg):
尝试:
发送(cmd + msg)
除了:
打印“您尚未连接”

def sendAudio():
p = pyaudio.PyAudio()
流= p.open(格式=格式,
channel = channel ,
费率= RATE,
输入=真,
输出= True,
frame_per_buffer =块)
数据= stream.read(块)
返回crypto_my_audio_message(数据)
## stream.stop_stream()
## stream.close()
## p.terminate()

def keypress(事件):
如果event.keysym =='转义':
root.destroy()
#x = event.char
如果event.keysym =='Control_L':
#print(“正在发送数据...”)
客户端(chr(CMD_AUDIO),sendAudio())
#print(“已发送数据!”)

任何想法为什么会发生这将是最有帮助的

最佳答案

让我惊讶的是,您将thread that blocks与select混合在一起,并且循环看起来有些奇怪。您在双向上都有很多事情-尝试并集中精力使数据包的进出工作像齿轮一样啮合在一起,或者确保在它们进入时不会有人空着或满了预计两者都不是。

您可能会从以下获得一些启发:

  • this portaudio/speex python wrapper
  • asyncore
  • queue
  • 关于python - 网络上的PyAudio崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6631323/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com