Можно ли будет воспроизводить аудио прямо из памяти?
В настоящее время я использую Microsoft TTS, я получаю потоковое аудио, сохраняю в файл и затем отправляю команду Asterisk в "Stream File". Следить:
....
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 о том, что файл имеет нулевые байты.
Любое предложение?
1 ответ
Это зависит от того, как ОС работает с файлами.
В большинстве случаев вы можете использовать Linux-каналы, но вам все же нужна звездочка, чтобы правильно работать с этим, что не тривиально и требует большого опыта.
Простой способ - просто разбить файл на мелкие части, например, фрагменты за 1 секунду, и воспроизвести звездочку один за другим.
Или просто используйте os.fsync() после каждой записи, но это будет намного сложнее поддерживать. https://www.tutorialspoint.com/python/os_fsync.htm