没有数据管道时如何插入静音 pcm 数据

问题描述

我目前正在研究 discord.js 语音接收器,我需要它在没有实际音频数据进入时通过写入静数据包来连续发送 PCM 音频数据。

我之前发现过这个 discussion,但我不明白/不知道如何在没有实际数据包进入时插入静数据包

接收方代码

const r = connection.receiver.createStream(user,{
  mode: 'pcm',end: 'manual'
});
// nothing is piped when user is not talking
// u.stream is Passthrough stream
r.pipe(u.stream);

首选方法是创建一个扩展 Passthrough 或任何流类型的类,以便我可以将接收器数据通过管道传输给它,并且当没有数据通过(来自接收器)时,它将发送静数据包(使用 'pcm -silence' 包),看起来像这样:

const fs = require('fs');
const passstream = new SilentStreamClass();
const r = connection.receiver.createStream(user,end: 'manual'
});
r.pipe(passstream);
passstream.pipe(fs.createWriteStream('./user.pcm'));
// When user is not talking,it will filled with silent packet.

提前致谢!

解决方法

在互联网上搜索了一段时间后,我找到了一个 npm 包 audio-mixer 来混合多个 pcm 音频流,当没有数据要处理时,它会通过管道静默数据包,效果很好!