こんにちは、解決できない PyAudio の問題に直面しています。ネットワーク経由で使用すると (しばらくすると) クラッシュします。私が得るエラーは
スレッド Thread-1 の例外: トレースバック (最新の呼び出しが最後): ファイル「C:\Python27\lib\threading.py」、552 行目、__bootstrap_inner 内 self.run() ファイル「C:\Python27\lib\threading.py」、505 行目、実行中 self.__target(*self.__args, **self.__kwargs) サーバー内のファイル「C:\Users\maboroshi\Desktop\myChat\chat.py」の71行目 frames_per_buffer = チャンク) ファイル「C:\Python27\lib\site-packages\pyaudio.py」、714 行目、開いている stream = Stream(self, *args, **kwargs) ファイル「C:\Python27\lib\site-packages\pyaudio.py」、396 行目、__init__ 内 self._stream = pa.open(**引数) IOError: [Errno デバイスを使用できません] -9985
私のコードは以下のとおりです(ほとんどの場合:-P
これは、データを復号化し、接続を管理するためのものです
def decrypt_my_message(msg): iv = "1234567812345678" キー = your_friends_key len(key) が (16, 24, 32) にない場合: raise ValueError("キーは 16、24、または 32 バイトでなければなりません") if (len(msg) % 16) != 0: raise ValueError("メッセージは 16 バイトの倍数でなければなりません") len(iv) != 16 の場合: raise ValueError("IV は 16 バイトでなければなりません") 暗号 = AES.new(キー、AES.MODE_CBC、iv) 平文 = cipher.decrypt(msg) 平文を返す ### サーバー機能 ### デフサーバー(): ホスト = '' ポート = 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 = [サーバーソケット] True の間: 読み取り可能、書き込み可能、エラー = select.select(read_list, [], []) for s in readable: s が server_socket の場合: conn, addr = s.accept() read_list.append(接続) print "接続元", addr そうしないと: メッセージ = conn.recv(2024) メッセージの場合: cmd、msg = ord(msg[0])、msg[1:] cmd == CMD_MSG の場合: listb1.insert(END, decrypt_my_message(msg.strip()) + "\n") listb1.yview(END) elif コマンド == CMD_AUDIO: #d = speex.Decoder() #d.initialize(speex.SPEEX_MODEID_WB) p = pyaudio.PyAudio() ストリーム = p.open(フォーマット = フォーマット、 チャネル = チャネル、 率 = 率、 入力 = 真、 出力 = 真、 frames_per_buffer = チャンク) stream.write(decrypt_my_message(msg), chunk) # データをスピーカーに書き戻す そうしないと: s.close() read_list.remove(s)
これは、暗号化されたオーディオを接続して送信するためのものです
def encrypt_my_audio_message(msg): キー = your_key iv = '1234567812345678' aes = AES.new(キー、AES.MODE_CBC、iv) エンコーダー = PKCS7Encoder() pad_text = エンコーダ.エンコード(メッセージ) msg = aes.encrypt(pad_text) メッセージを返す def connectToServer(): クライアント_ポート = 9001 CLIENT_HOST = str(entryhost.get()) グローバル 試す: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((CLIENT_HOST, CLIENT_PORT)) print "接続済み\n" を除外する: print "接続できませんでした" ### クライアント機能 ### デフォルト クライアント (コマンド、メッセージ): 試す: s.send(コマンド + メッセージ) を除外する: print "接続されていません" デフ sendAudio(): p = pyaudio.PyAudio() ストリーム = p.open(フォーマット = フォーマット、 チャネル = チャネル、 率 = 率、 入力 = 真、 出力 = 真、 frames_per_buffer = チャンク) data = stream.read(チャンク) encrypt_my_audio_message(データ) を返します ## stream.stop_stream() ## ストリーム.クローズ() ## p.terminate() def keypress(イベント): if event.keysym == 'エスケープ': root.destroy() #x = event.char if event.keysym == 'Control_L': #print("データを送信しています...") client(chr(CMD_AUDIO), sendAudio()) #print("データが送信されました!")
なぜこれが起こるのかについてのアイデアは最も役に立ちます