提问人:p.magalhaes 提问时间:10/24/2023 更新时间:10/24/2023 访问量:35
发送音频流 usign asyncio
Sending audio stream usign asyncio
问:
我正在尝试将麦克风数据流式传输到异步服务器。客户端代码如下。我的第一次尝试没有使用 await asyncio.sleep(0),但代码被阻止了。我想它被阻止了,因为该过程从未完成,不允许事件循环使用消息。这种说法正确吗?当我添加 await asyncio.sleep(0) 时,事件循环可能会被消耗掉。
好吧,我想有一种更正确的方法可以做到这一点。那会是什么?会是通过在客户端中生成线程吗?有人可以向我提供代码片段吗?
@sio.event
async def speechData(data):
print("message received with ", data)
async def main():
audio = pyaudio.PyAudio()
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = int(RATE / 10)
await sio.connect("http://localhost:9000")
await sio.emit(
"startGoogleCloudStream",
{
"audio": {
"encoding": "LINEAR16",
"sampleRateHertz": 16000,
"languageCode": "pt-BR",
},
"interimResults": True,
},
)
stream = audio.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK,
)
while True:
data = stream.read(CHUNK)
await sio.emit("binaryAudioData", data)
await asyncio.sleep(0)
# this shoud be here?
await sio.wait()
if __name__ == "__main__":
asyncio.run(main())
答: 暂无答案
评论