首页 > 解决方案 > 是否可以直接从内存中播放音频?

问题描述

我目前正在使用 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))

我会避免需要在本地编写文件,直接发送二进制文件来播放。甚至写入文件,强制在第一个流包中启动。我试图做最后一个想法,但我收到一个星号警报,指出该文件是零字节。

有什么建议吗?

标签: python-3.xasteriskagi

解决方案


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

在大多数情况下,您可以使用 linux 管道,但您仍然需要星号正确使用它,这并非易事,并且需要很高的专业知识。

简单的方法是将文件分割成小部分,如 1 秒片段,然后逐个播放星号。

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


推荐阅读