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

2024-01-03

我正在使用 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')
});

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

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


The @discord.js/语音 https://github.com/discordjs/voice/blob/408999d78962b860f3dd712716c8c76e4464dc37/src/audio/AudioPlayer.ts#L10库将静音帧声明为:

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

您是否尝试过将其与可写流 https://nodejs.org/dist/latest-v16.x/docs/api/stream.html#stream_class_stream_writable?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未收到数据时向 Node.js 流添加“静默帧” 的相关文章

  • 如果没有“new”,则无法调用类构造函数

    感谢这个问题已经被问过几次了 但是我遇到的几乎所有情况都是有人试图扩展非本地类的情况 我的情况有所不同 我有一个非常简单的基类 名为CObject如下 export class CObject extends BaseObject cons
  • 下载 csv 文件 node.js

    我正在使用 node js 构建一个应用程序并尝试将数据下载为 csv 文件 我正在使用 json2csv https www npmjs com package json2csv https www npmjs com package j
  • 语法错误:意外的标记“?”在 repl.it 上用 JavaScript 制作不和谐机器人时 [重复]

    这个问题在这里已经有答案了 我收到错误 const token this client token this client accessToken SyntaxError Unexpected token Discord 机器人代码 con
  • npmjs.org - 找不到自述文件

    我是 npm 包的主要作者scramjet 一个月以来 我遇到了关于可视性的问题README md在 npmjs 中 The npm 中的超燃冲压发动机包 https www npmjs com package scramjet shows
  • 如何在Electron WebView中连接到代理?

    因为我可以通过连接到免费代理服务器 或付费 目前用作电子 JS 解决方案作为桌面应用程序 代理列表服务器示例 http proxylist hidemyass com http proxylist hidemyass com 您可以使用 s
  • 如何在 Sequelize ORM 中限制连接行(多对多关联)?

    Sequelize 定义了两种模型 具有多对多关联的 Post 和 Tag Post belongsToMany db Tag through post tag foreignKey post id timestamps false Tag
  • NestJS e2e 测试模拟会话装饰器

    我正在尝试使用 supertest 编写一个 e2e 测试 其中我的控制器实际上使用了 Session 装饰师 然而 我不想承担使用数据库连接等启动会话的全部负担 因此测试中的我的应用程序实际上并未初始化会话 相反 我想首先模拟掉装饰器提供
  • Cosmos DB Mongo API 如何管理“请求率很大”情况

    我有以下代码 async function bulkInsert db collectionName documents try const cosmosResults await db collection collectionName
  • nodemon 安装错误“没有可用于超时的有效版本”

    尝试在全新的节点项目中安装 nodemon 时出现此错误 我创建了一个名为 my project 的空白文件夹 然后 在其中 我执行了创建一个 package json 文件 npm init f 然后当尝试运行时 npm install
  • NodeJS hmac 摘要问题与重音

    我正在对以下代码与 Ruby PHP 和 NodeJS 进行并排比较 使用 NodeJS 得到错误的响应crypto module PHP hash hmac sha256 text Ruby OpenSSL HMAC hexdigest
  • 如何使用Create React App安装React

    嗨 我对反应真的很陌生 我不知道如何实际安装它 也不知道我需要做什么才能在其中编写代码 我下载了node js并且安装了v12 18 3以及NPM 6 14 6 但是每次我尝试在许多网站上提到的create react app安装方法中输入
  • 根据特定字符获取整个字符串或子字符串

    我有一个包含 MIME 类型的字符串 例如application json 现在我想将其与实际的 HTTP 标头进行比较 在本例中content type 如果标头包含 MIME 类型 那么就很简单 if mimeType contentT
  • 下载中带有文件名的 NodeJS sendFile

    我尝试使用以下代码将文件发送给客户端 router get get myfile function req res next res sendFile other file name dat 它工作正常 但当用户从以下网址下载此文件时我需要
  • 我在 MacBook M1 max 中的 nodejs 连接到数据库 oracle 时遇到问题帮助我

    Node js 中的错误消息 nodemon 启动node server js错误 错误 DPI 1047 无法找到 64 位 Oracle 客户端库 dlopen Users pitidev ldb Downloads instantcl
  • 无法使用 Nest CLI 创建新项目

    我正在关注this https docs nestjs com first steps创建 Nest 项目的教程 我已经安装了Nest CLI使用这个命令 npm i g nestjs cli 我使用以下命令检查了本地安装的软件包列表 发现
  • 我的客户端 socket.io 在哪里?

    我使用 Express 和 React Engine 创建了一个同构 React 应用程序 现在我正在尝试连接socket io 在快速设置中我有 var express require express var app express va
  • 在heroku上部署时出错,/bin/sh: 1: webpack: not found

    这是我在 heroku 网站上手动部署时遇到的错误 首先 我在 json 文件中遇到错误 因此我指定了正在运行的 npm yarn 和 node 版本 这些错误似乎已经清除 现在我就是这样的人 并且已经搜索了谷歌 但似乎找不到太多关于修复它
  • 在node.js中加载并执行外部文件

    从另一个节点js文件运行一个节点js文件是否容易 可能 例如 我有两个文件 test1 js 和 test2 js 我想从 test2 js 执行 test1 js 文件 我认为完成你想做的事情的更好方法是按照我的其他答案建议的去做 但是要
  • 流星内存不足

    我正在使用流星来制作报废引擎 我必须执行一个 HTTP GET 请求 这会向我发送一个 xml 但这个 xml 大于 400 ko 我得到一个异常 内存不足 result Meteor http get http SomeUrl com 致
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的

随机推荐

  • 我可以将我的 Java 类注册为 OrientDB 顶点和/或边吗?

    我尝试了东方数据库对象数据库API http www orientechnologies com docs 1 7 8 orientdb wiki Object Database html 它允许使用将 Java POJO 注册到数据库en
  • ObservableCollection 不更新视图

    我刚刚开始使用 MVVM 遇到了一个障碍 希望有人可以帮助我 我正在尝试创建一个带有 2 个列表框的简单视图 第一个列表框中的选择将填充第二个列表框 我创建了一个类来存储我想要绑定的信息 MyObject 类 Observable Obje
  • 在 Shiny 中将绘图置于 FluidRow 中居中

    我有一个 FluidRow 其中一列中呈现了一个绘图 我想知道当我通过 renderPlot createplothere width 函数手动指定绘图宽度时如何使绘图居中 因此 它不会占用列的整个宽度 ui R代码 setwd C Use
  • JSF 在执行 ajax 更新时重置字段

    我在 JSF 页面上遇到问题 我在第一个账单名字字段中输入了一个名称 如果我点击复制帐单地址复选框 这会停止渲染递送地址面板并通过 ajax 隐藏它 我刚刚在第一个字段中输入的值将重置为之前的状态 JSF Page
  • 如何根据多个条件对行求和 - R? [复制]

    这个问题在这里已经有答案了 我有一个数据框 其中包含绘图 ID plotID 树种代码 species 和覆盖值 cover 您可以看到其中一张图中有多个树种记录 如果每个图中存在重复的 物种 行 如何对 覆盖 字段求和 例如 以下是一些示
  • 如何在 Dreamweaver cs5 中调试 php 代码?

    如果它不支持调试 是否有任何扩展或插件 Dreamweaver 即使支持 PHP 源代码的语法高亮显示 也并不完全被称为 PHP 开发环境 所以我不确定它是否支持 PHP 代码的调试 相反 我建议您使用另一个更面向 PHP 的 IDE 例如
  • 警告:字符串文字中转义的非标准使用

    我有查询删除双空格并将其转换为单空格 UPDATE tablename SET name trim regexp replace name s s g 它给出错误 WARNING nonstandard use of escape in a
  • 如何将字符串解析为哈希表

    是否有一种简单 甚至可能是单个命令 的方法可以从包含键值对的字符串构建哈希表 关联数组 JSON 等等 并用给定的分隔符分隔 Example n1 v1 n2 v2 n3 v3 where 是分隔符 应该返回 n1 v1 n2 v2 n3
  • VB6 项目可以使用 .Net .dll

    我有一个VB6项目 我的问题是我可以调用具有项目所有业务规则 来自 VB6 应用程序 的 NET dll 吗 基本上我有一个 VB6 项目 其中有一个调用 vb6 ActiveX dll 的经典 ASP 项目 要求是找出升级应用程序的最佳方
  • MS Word:选择表格单元格内的文本

    我需要在 Word 文档表格的单元格内选择文本 例如 两个字符 下面的代码 Sub testTable For Each itable In ActiveDocument Tables itable Cell 1 2 Range Selec
  • 无法使用 pandas to_sql() 方法将数据插入 Snowflake 数据库表

    我有一个数据库SFOPT TEST在我的雪花实例上 数据库有两种模式AUDITS and PARAMS 架构AUDITS有一个使用 SQLAlchemy 创建的表declarative base class AccountUsageLogi
  • 如何使用 python pandas 读取 json 文件?

    我想使用 python pandas 读取 json 文件 文件的每一行都是一个完整的 JSON 对象 我在下面使用versions 蟒蛇 2 7 6 熊猫 1 19 1 json 文件 id 111 p id 55 name aaa no
  • 播放服务 7.5.0 后无法在 Manifest 中使用 android:icon="@mipmap/ic_launcher"

    我最近使用依赖项更新了播放服务 compile com google android gms play services 7 5 0 我的应用程序图标启动器位于 mipmap ic launcher 但这显示错误AndroidManifes
  • INRIA 是否会向 OCaml 添加并发原语? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我所说的 并发 是指像 Erlang 的 actor 和并发 GC 这样的轻量级进程 旨在使此类进程顺利工作 如果 INRIA 摆脱当前 OCa
  • 枚举案例处理 - 使用开关还是字典更好?

    根据具体情况处理枚举的值时 使用 switch 语句还是字典更好 我认为字典会更快 就空间而言 它占用了一些内存 但是 case 语句也会占用一些内存 只是程序本身所需的内存 所以最重要的是 我认为使用字典总是更好 以下是并排比较的两个实现
  • 如何在reactjs的render方法中使用三元运算符?

    我想使用三元运算符根据某些状态条件渲染两个按钮 以避免代码重复 我想做什么 我有两个基于状态值的按钮 取消 和 开始 load cancel 如果单击 取消 按钮load cancel set to true什么时候load cancel
  • 如果在外部单击则隐藏/切换

    我在这里使用这个模板 http startbootstrap com templates simple sidebar html http startbootstrap com templates simple sidebar html 为
  • 如何在 Android 中安排通知

    我正在尝试在将来的某个时间设置通知 我有创建通知的代码 但找不到安排通知的选项 我如何安排通知 不适用于奥利奥 编辑 上面的答案都很好 但不考虑用户重启设备的可能性 这会清除 AlarmManager 安排的 PendingIntent 您
  • Gradle - 仅在目录中的代码发生更改时才执行任务

    我有一个创建 100MB JAR 的 Gradle 任务 现在我只想将它创建为我的一部分gradle build如果项目内的代码已更改 例如特定的 src目录 所以目前 build gradle kts 看起来像 tasks shadowJ
  • 未收到数据时向 Node.js 流添加“静默帧”

    我正在使用 Node js 创建一个 Discord js 机器人 该机器人在语音通道中记录用户的音频 它加入一个频道并开始分别收听每个用户的声音 它记录到 pcm 文件 因此只有原始数据 现在 这可行了 但 Discord 音频流的性质导