没有数据管道时如何插入静音 pcm 数据
Posted
技术标签:
【中文标题】没有数据管道时如何插入静音 pcm 数据【英文标题】:How to insert silence pcm data when there is no data piping in 【发布时间】:2021-04-05 08:20:47 【问题描述】:我目前正在开发 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,
mode: 'pcm',
end: 'manual'
);
r.pipe(passStream);
passStream.pipe(fs.createWriteStream('./user.pcm'));
// When user is not talking, it will filled with silent packet.
提前致谢!
【问题讨论】:
接收器流是 s32le 格式 btw 【参考方案1】:在网上搜索了一段时间后,我找到了一个 npm 包audio-mixer
来混合多个 pcm 音频流,当没有数据要处理时,它会管道静默数据包,就像一个魅力!
【讨论】:
以上是关于没有数据管道时如何插入静音 pcm 数据的主要内容,如果未能解决你的问题,请参考以下文章
StackExchange.Redis 管道 批量 高性能插入数据
流插入,然后定期合并到 Dataflow 管道中的 BigQuery [关闭]