gpt4 book ai didi

node.js - 未收到数据时将 'silent frames' 添加到 Node.js 流

转载 作者:行者123 更新时间:2023-12-04 12:02:48 25 4
gpt4 key购买 nike

我正在使用 Node.js 创建一个 Discord.js bot,它在语音 channel 中记录用户的音频。它加入一个 channel 并开始分别收听每个用户。它记录到一个 .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')
});
audioStream输出是 16 位小端 44100 Hz 流(因此仅在用户说话时)。

有没有办法用某种无声帧来填补数据空白?或者也许保持静音流运行,只在数据进来时才放入数据?

最佳答案

您是否尝试过使用 this WritableStream ?
它来自 discord.js 语音库,静音帧声明为:

const SILENCE_FRAME = Buffer.from([0xf8, 0xff, 0xfe]);

关于node.js - 未收到数据时将 'silent frames' 添加到 Node.js 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60841599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com