如何解决在 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 举报,一经查实,本站将立刻删除。