Можно ли будет воспроизводить аудио прямо из памяти? - PullRequest
0 голосов
/ 28 февраля 2019

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

Я бы избежал необходимости записывать файл локально, посылая двоичный файл для воспроизведения напрямую.Или даже запись в файл, принудительный запуск в первом потоковом пакете.Я пытался реализовать эту последнюю идею, но я получаю предупреждение Asterisk о том, что файл содержит ноль байтов.

Любое предложение?

1 Ответ

0 голосов
/ 28 февраля 2019

Зависит от того, как ОС работает с файлами.

В большинстве случаев вы можете использовать каналы Linux, но вам все же нужно правильно работать со звездочкой, что не тривиально и требует большого опыта.

Простой способ - просто разбить файл на мелкие части, например фрагменты за 1 секунду, и воспроизвести звездочку один за другим.

Или просто использовать os.fsync () после каждой записи, ноэто будет намного сложнее поддерживать.https://www.tutorialspoint.com/python/os_fsync.htm

...