Можно ли будет воспроизводить аудио прямо из памяти?

В настоящее время я использую 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

Другие вопросы по тегам