我正在使用 ExpressJs,并尝试使用 Amazon Polly 提供将文本转换为语音的服务。
所以我将文本切割成句子并将它们发送给 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>
我怎样才能流式传输并收听整个文本?