问题描述
我目前正在研究 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 音频流,当没有数据要处理时,它会通过管道静默数据包,效果很好!