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.
Выложу решение после того, как найду его.