微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Node JS 中将 Twilio Mulaw 转换为 16Khz PCM 流

如何解决在 Node JS 中将 Twilio Mulaw 转换为 16Khz PCM 流

我正在编写一个 Twilio 自动应答机器人。我可以从 twilio 接收流并在套接字的“媒体”事件中使用 msg.media.payload 获取内容。但我无法使用 NodeJS 将 base64 mulaw 转换为 16 位 pcm 数组。

function basetoPCM(data){
  console.log(data)
  var blob  = atob(data);   // Base64 string converted to a char array
  console.log("use base64 decoder to decode the Payload received.");
    console.log(blob);

  //use this payload buffer and decode using the G.711 decoder (mulaw to pcm)
  var pcm = alawmulaw.mulaw.decode(blob);
  console.log("getting decode pcm");
  console.log(pcm);
  return pcm;
}

但是它得到的响应只是一个具有相同数字的数组:

getting decode pcm
Int16Array(160) [
  -32124,-32124,...

我使用的将音频发送到 Kaldi 转录服务器的功能是:

const buffer = e;
      const int16ArrayData = convertFloat32ToInt16(buffer);
      console.log("int16data");
      console.log(int16ArrayData)
      this.ws.send(int16ArrayData.buffer);

所以我的问题是如何将 Twilio base64 mulaw 转换为 16 位 PCM 音频缓冲区。无论如何要在 PCM 中进行 Twilio 编码?谢谢!

解决方法

这里是 Twilio 开发者布道者。

我没有使用您在这里尝试使用的 alawmulaw library,但是查看文档似乎您在这里运行了错误的功能。当实时网络套接字数据到达时,我会认为它是一个“样本”而不是一组样本,您应该尝试:

var pcm = alawmulaw.mulaw.decodeSample(blob);

或者,在 this answer 中,我的同事 Craig 推荐了 WaveFile lib。看看一些示例代码的答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。