小编Jas*_*erJ的帖子

未收到数据时向 Node.js 流添加“静默帧”

我正在使用 Node.js 创建一个 Discord.js 机器人,该机器人在语音通道中记录用户的音频。它加入一个频道并开始分别收听每个用户的声音。它记录到 .pcm 文件(因此只有原始数据)。

现在,这可行了,但 Discord 音频流的性质导致了问题。从 Discord 的 API 获取的音频流仅在特定用户说话时发送数据,而不是在他们沉默时发送数据。这会导致用户说话的时刻被粘贴到彼此之后,而中间没有沉默。

举个例子,我讲5秒,然后停止讲5秒,然后再开始讲,依此类推。如果我这样做 1 分钟,我将得到一个只有 30 秒长的文件,因为 5 秒的静默没有记录在流中。

代码看起来像这样(这receiver是 Discord API 提供的语音连接,当我发出命令时流会任意结束):

const audioStream = receiver.createStream(user, {mode:'pcm', end:'manual'};
const outputStream = fs.createWriteStream('SOME_PATH');

audioStream.pipe(outputStream);

audioStream.on('end', () => {
    console.log('Ended stream')
});
Run Code Online (Sandbox Code Playgroud)

输出audioStream是 16 位小端 44100 Hz 流(因此仅当用户说话时)。

有没有办法可以用某种静默帧来填补数据空白?或者也许保持静默流运行并仅在数据进入时才将其放入?

pcm fs node.js discord.js createwritestream

9
推荐指数
1
解决办法
1092
查看次数

标签 统计

createwritestream ×1

discord.js ×1

fs ×1

node.js ×1

pcm ×1