import pyaudio
|
import websocket #区别服务端这里是 websocket-client库
|
import time
|
import websockets
|
import asyncio
|
from queue import Queue
|
import threading
|
voices = Queue()
|
async def hello():
|
global ws # 定义一个全局变量ws,用于保存websocket连接对象
|
uri = "ws://localhost:8899"
|
ws = await websockets.connect(uri, subprotocols=["binary"]) # 创建一个长连接
|
ws.max_size = 1024 * 1024 * 20
|
print("connected ws server")
|
async def send(data):
|
global ws # 引用全局变量ws
|
try:
|
await ws.send(data) # 通过ws对象发送数据
|
except Exception as e:
|
print('Exception occurred:', e)
|
|
|
|
asyncio.get_event_loop().run_until_complete(hello()) # 启动协程
|
|
|
# 其他函数可以通过调用send(data)来发送数据,例如:
|
async def test():
|
#print("2")
|
global voices
|
FORMAT = pyaudio.paInt16
|
CHANNELS = 1
|
RATE = 16000
|
CHUNK = int(RATE / 1000 * 300)
|
|
p = pyaudio.PyAudio()
|
|
stream = p.open(format=FORMAT,
|
channels=CHANNELS,
|
rate=RATE,
|
input=True,
|
frames_per_buffer=CHUNK)
|
|
while True:
|
|
data = stream.read(CHUNK)
|
|
voices.put(data)
|
#print(voices.qsize())
|
await asyncio.sleep(0.01)
|
|
|
|
|
|
async def ws_send():
|
global voices
|
print("started to sending data!")
|
while True:
|
while not voices.empty():
|
data = voices.get()
|
voices.task_done()
|
await send(data)
|
await asyncio.sleep(0.01)
|
await asyncio.sleep(0.01)
|
|
async def main():
|
task = asyncio.create_task(test()) # 创建一个后台任务
|
task2 = asyncio.create_task(ws_send()) # 创建一个后台任务
|
|
await asyncio.gather(task, task2)
|
|
asyncio.run(main())
|