python-3.x - 是否可以直接从内存中播放音频?
问题描述
我目前正在使用 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))
我会避免需要在本地编写文件,直接发送二进制文件来播放。甚至写入文件,强制在第一个流包中启动。我试图做最后一个想法,但我收到一个星号警报,指出该文件是零字节。
有什么建议吗?
解决方案
这取决于操作系统如何处理文件。
在大多数情况下,您可以使用 linux 管道,但您仍然需要星号正确使用它,这并非易事,并且需要很高的专业知识。
简单的方法是将文件分割成小部分,如 1 秒片段,然后逐个播放星号。
或者只在每次写入后使用os.fsync(),但维护起来会困难得多。 https://www.tutorialspoint.com/python/os_fsync.htm
推荐阅读
- java - 当用户在数据库中选择行时如何根据 JLabel 的大小调整图像大小
- sql - 如何为每张发票创建一个新的总行以显示每张唯一发票的总和?
- sql - ACCESS/SQL 将多行一列合并为一行并创建多列
- javascript - 如何更改对象的键以匹配传递给函数的参数?
- google-sheets - 将前导零添加到 Google 表格中的 Dateif 函数
- swift - 动画不适用于 SwiftUI 视图状态更改
- ios - 导航堆栈没有按照我想要的方式运行
- azure - 从 Terraform 的地图列表中输出特定值
- javascript - 如何将 AsyncStorage 与 React Native 和钩子一起使用?
- react-native - React-Native Expo 库/NewAppScreen 的问题