是否可以直接从内存播放音频?

问题描述 投票:1回答:1

我目前正在使用Microsoft TTS,我获得流式音频,保存到文件,然后在“流文件”中将命令发送到Asterisk。跟随:

....
response = requests.post(url, data=body, headers=headers)
self.print("Got wave response")

with open("{}{}.{}".format(cachedir, filename, self.exten), 'wb') as fd:
    for chunk in response.iter_content(chunk_size=1024):
        self.print("Gravando....")
        fd.write(chunk)
    fd.close()
self.agi.stream_file('{}{}'.format(cachedir, filename))

我会避免在本地编写文件,直接发送二进制文件。甚至写入文件,强制启动第一个流包。我试着做最后一个想法,但我得到一个Asterisk警报,声明文件是零字节。

有什么建议吗?

python-3.x asterisk agi
1个回答
0
投票

它取决于操作系统如何处理文件。

在大多数情况下,你可以使用linux管道,但你仍然需要星号正确使用它,这不是微不足道的,需要很高的专业知识。

简单的方法就是将文件分成小块,例如1秒碎片,然后一个一个地用星号播放。

或者在每次写入后使用os.fsync(),但维护起来会困难得多。 https://www.tutorialspoint.com/python/os_fsync.htm

© www.soinside.com 2019 - 2024. All rights reserved.