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

时间:2019-02-28 03:52:34

标签: python-3.x asterisk agi

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

我可以避免在本地写入文件,而直接发送二进制文件进行播放。甚至写入文件,都强制在第一个流包中开始。我试图做最后一个主意,但收到一个星号警报,指出该文件为零字节。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

简单的方法是将文件分成1秒钟之类的小片段,然后以星号一一播放。

或在每次写入后仅使用 os.fsync(),但这将很难维护。 https://www.tutorialspoint.com/python/os_fsync.htm