Nodejs: потоковое аудио в ответ

Я использую ExpressJ и пытаюсь создать сервис для преобразования текста в речь с помощью Amazon Polly.
Поэтому я разрезаю текст на предложения и отправляю их Полли, и когда я получаю результат Buffer, я передаю его в ответ.

Проблема в том, что я перепробовал слишком много вещей и каждый раз слушал только первое предложение, затем запрос заканчивался (пока я не заканчивал его до самого конца).

Вот кое-что из того, что я пробовал:

let readable = new Stream.Readable()
readable._read = () => {}
let bufs = []
Polly.synthesizeSpeech(chunk, voice).then((data)=>{
    var stream = new Stream.PassThrough()
    stream.end(data)
    stream.pipe(pipe, {end: false})

    readable.push(data)
    readable.pipe(res, {end: false})

    stream.on('end', ()=>{
        if (index == content.length - 1) { // last sentence
            let buf = Buffer.concat(bufs)
            res.write(buf)
            res.end()
        }
    })
})

Так я попробовал Stream.PassThrough(), Stream.Readable() и конкатенируя буферы, затем сразу пишите в ответ.
И каждый раз, когда я нахожу то же самое, вы можете просто слушать первое предложение.

и вот как я это проверяю:

<audio controls>
      <source src="https://localhost:8080/api/transcripe?voice=Salli&url=https://techcrunch.com/2017/07/25/elon-musk-mark-zuckerberg-artificial-intelligence/" type="audio/mpeg">
</audio>

Как я мог смотреть и слушать весь текст?

1 ответ

Похоже, это проблема Chrome, а не nodejs.
Он отлично работает на Firefox.

Выложу решение после того, как найду его.

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