将 LINEAR16 音频编码为 Twilio 媒体音频/x-mulaw | NodeJS

Hug*_*eve 4 node.js twilio google-text-to-speech mu-law

我一直在尝试将 mulaw 媒体流传输回 Twilio。要求有效负载必须采用音频/x-mulaw 编码,采样率为 8000,并采用 base64 编码

我的输入来自 LINEAR16 Google Docs中的 @google-cloud/text-to-speech

我尝试过波形文件

这就是我对 @google-cloud/text-to-speech 的响应进行编码的方式

 const wav = new wavefile.WaveFile(speechResponse.audioContent)
    wav.toBitDepth('8')
    wav.toSampleRate(8000)
    wav.toMuLaw()
Run Code Online (Sandbox Code Playgroud)

然后我通过 WebSocket 将结果发送回 Twilio

twilioWebsocket.send(JSON.stringify({
      event: 'media',
      media: {
        payload: wav.toBase64(),
      },
      streamSid: meta.streamSid,
}))
Run Code Online (Sandbox Code Playgroud)

问题是我们只能在 Twilio 通话的另一端听到随机噪音,似乎编码不正确

其次,我通过将@google-cloud/text-to-speech输出音频保存在文件中检查了它,它是正确且清晰的

谁能帮我编码

小智 5

我也有同样的问题。错误位于 中wav.toBase64(),因为这包括 wav 标头。Twilio 媒体流需要原始音频数据,您可以使用 获取原始音频数据wav.data.samples,因此您的代码将是:

 const wav = new wavefile.WaveFile(speechResponse.audioContent)
    wav.toBitDepth('8')
    wav.toSampleRate(8000)
    wav.toMuLaw()

 const payload = Buffer.from(wav.data.samples).toString('base64');
Run Code Online (Sandbox Code Playgroud)