我在尝试将音频流式传输到语音识别服务时遇到了延迟。
我有两个处理此任务的函数, 第一个使用alsaaudio和“yield”将数据返回给调用函数。 和第二个函数,使用我传递给它的请求的URL和标题和记录功能。
从我调用请求函数到开始录制音频大约半秒之间我有延迟的问题
这是一个伪代码:
def listen():
stream = audiostream()
while user_speak:
yield stream.read(chunksize)
def stream_speech():
response = requests.post(url, data=listen(), headers, stream=true)
if response.status_code == 200:
print(response)
我认为问题在于请求打开与服务器的连接时的延迟,然后才调用listen函数。
所以我想可能打开一个线程,将块记录到队列中,主线程将使用队列调用请求函数。 但我不知道如何实现这一点,也许有人可以帮助我。
答案 0 :(得分:1)
嗯,有许多低级API,包括像asyncore这样的异步API,它允许您在不使用线程的情况下进行交互。
我只是将alsaaudio中的缓冲区大小用setperiodsize增加到0.5秒,并使用更大的缓冲区。然后你可以先开始录制,然后等待连接,而alsa将准备第一个缓冲区。