使用来自 Twilio 的“audio/x-mulaw”数据运行 Node.js WebSocket 服务器时,扬声器会输出大量静态信号

问题描述 投票:0回答:1

我正在尝试创建一个 Node.js WebSocket 服务器,该服务器从 Twilio 接收 Base64 编码字符串形式的音频数据。然后使用 write() 方法将解码后的音频数据写入扬声器。 Twilio 表示它以 Base64 的“audio/x-mulaw”形式发送数据。

但是,当我运行代码时,扬声器输出一阵阵静态声音,而不是预期的音频。我不确定是什么导致了这个问题。半身静电确实与我对着麦克风讲话相符,但根本无法识别。

这是我的代码:

import { WebSocketServer } from 'ws';
import Speaker from 'speaker';
import alawmulaw from 'alawmulaw';

// Create a new Speaker instance with the specified format
const speaker = new Speaker();

const wss = new WebSocketServer({ port: 5000 });

wss.on('connection', function connection(ws) {
  ws.on('message', function message(data) {
    let obj = JSON.parse(data);

    if (obj.event === "media") {
        let buff = Buffer.from(obj.media.payload, 'base64');

        let PCM = Buffer.from(alawmulaw.mulaw.decode(buff));

        speaker.write(PCM);
    }
  });
});

我相对确信这是编码问题,但我尝试了各种配置,但到目前为止没有任何效果。如果有人能分享一些关于如何解决这个问题的想法,我将不胜感激。 谢谢!

Twilio 文档示例服务器 Twilio 流文档

twilio audio-streaming pcm speaker mu-law
1个回答
0
投票

我相信你需要告诉输入缓冲区是 8khz 采样率,因为它缺少标头,所以无法判断并假设 16khz

© www.soinside.com 2019 - 2024. All rights reserved.