没有数据管道时如何插入静音 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 数据的主要内容,如果未能解决你的问题,请参考以下文章

将原始 PCM 流通过管道传输到 libsndfile

StackExchange.Redis 管道 批量 高性能插入数据

流插入,然后定期合并到 Dataflow 管道中的 BigQuery [关闭]

如何在 PCM 音频中使用 IMediaSample 检测静音

如何在谷歌云数据流中停止流式传输管道

如何更改 Azure 数据工厂中管道活动的集成运行时