服务端代码:
#!/bin/env python
# -*- coding: utf-8 -*-
import asyncio
import websockets
import time
import threading
import signal
import sys
import pyaudio
import numpy as np
from multiprocessing import Process, Value
import multiprocessing
import ctypes
is_exit = False
def record(voice_rate):
global is_exit
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=16000,
input=True,
frames_per_buffer=1024)
while not is_exit:
data = stream.read(1024)
audio_data = np.fromstring(data, dtype=np.short)
max_dB = np.max(audio_data)
voice_rate.value = max_dB
time.sleep(0.1)
def sig_handler(signum, frame):
global is_exit
is_exit = True
sys.exit(0)
async def sendData(websocket, path):
# rev = await websocket.recv()
# print(f"client: {rev}")
await websocket.send(str(voice_rate.value))
if __name__ == "__main__":
voice_rate = multiprocessing.Manager().Value(ctypes.c_int, 0)
signal.signal(signal.SIGINT, sig_handler)
# t = threading.Thread(target=add_variable, args=())
# t.setDaemon(True)
# t.start()
p = Process(target=record, args=(voice_rate,))
p.start()
start_server = websockets.serve(sendData, '127.0.0.1', 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
客户端代码:
import asyncio import websockets import time async def getData(): uri = "ws://127.0.0.1:8765" async with websockets.connect(uri) as websocket: await websocket.send("rate") ret = await websocket.recv() print(f"server: {ret}") time.sleep(0.1) await getData() asyncio.get_event_loop().run_until_complete(getData())
浙公网安备 33010602011771号