未收到数据时向 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 流添加“静默帧” 的相关文章

  • Node + Express .post 路由抛出错误。预期回调,获得对象

    我目前正在开发一个使用 Express Node 的应用程序 我最近添加了一个新的 post路线到app js文件 使用以下语法 app post api posts saveComment posts saveComment posts上
  • Node.js 有水豚吗?

    有谁知道 Node js 是否有类似 capybara 的东西 怎么样Zombie http zombie labnotes org 僵尸 js 使用 Node js 进行极其快速的无头全栈测试 The Bite 如果你要编写一个速度极快的
  • Typescript 和 Mongoose - “this”在实例方法中不可用

    我目前正在将我的 API 从 JS 转换为 TS 然而 我在猫鼬和打字稿方面遇到了一些困难 具体来说 this在我的实例方法中不可用 My code AccountSchema methods comparePassword async f
  • 具有独立 Node.js 服务器的虚拟主机

    目前有没有一种方法可以使用node js服务器进行虚拟托管 即在一个IP下托管多个域 当然 你可以使用bouncy https github com substack bouncy or 节点 http 代理 https github co
  • 如何从控制器返回 PDF 文件

    我正在尝试使用 NestJs 从控制器端点返回 PDF 文件 未设置时Content typeheader 返回的数据getDocumentFile 很好地返回给用户 然而 当我添加标头时 我得到的返回似乎是某种奇怪形式的 GUID 响应总
  • 如何在 Jenkins 服务器上运行 Jest 测试

    我正在尝试运行我的Jest https facebook github io jest 在 Jenkins 部署期间进行测试 如果我 ssh 进入服务器 我可以 sudo 进入 Jenkins 用户并从工作区成功运行测试 但是 当我尝试从
  • Visual Studio 代码断点在使用 TypeScript 的 Node.js 上不起作用

    我尝试了很多解决方案 但没有人适合我 代码执行 但我无法放置断点并调试它 请你帮助我好吗 我尝试过以下 VSCode 配置脚本 type node request launch name Typescript Node JS program
  • NodeJs 控制台中的 GET /bla - - ms - - 是什么意思?

    当我进入页面时 bla在我的 NodeJS 应用程序中 控制台打印出 GET bla ms 用文字来说 为了更容易谷歌搜索 dash dash ms dash dash 这是什么意思 这是输出morgan https github com
  • 我应该如何在http post请求的请求负载中传递json数据

    我想知道如何在有效负载中传递 json 请求 例如 name test value test var post data var post options host this host path path method POST heade
  • Child_process 处理带有回车符 (\r) 的 STDOUT 流

    我正在编写一个简单的应用程序 它允许工作中的内部系统请求从远程服务器到使用 REST 调用发起的另一个远程服务器的复制过程 使用 rsync 我已经对express框架足够熟悉 并且刚刚开始尝试child process库 并偶然发现了一个
  • express 或express-generator:我需要两者吗?

    只是探索 Node js 并遇到了 Express 在 npm 存储库站点上https www npmjs com package express https www npmjs com package express它明确指出安装是 np
  • Nodejs 一个接一个地运行异步函数

    我是 JS nodejs 的新手 所以如果我不能提出切中要害的问题 请原谅我 所以基本上 如果我有两个异步函数 async function init async function main 如何确保在 init 完成其异步请求后调用 ma
  • Mongoose 独特的验证不起作用。保存重复条目

    我正在开发一个 NodeJS 应用程序 其中express是框架 MongoDB是数据库 我正在使用猫鼬插件 我有一个父母模型 我已经添加了独特 真实到场 mobile 但是每当我添加相同的手机号码时 唯一性验证就会失败 除了保存重复的文档
  • 为 Node.js 客户端应用程序保留 Firebase 用户

    我正在使用 Firebase 构建 Node js 命令行界面 CLI 用于与后端进行身份验证 我想避免让用户每次运行命令时都输入密码 相反 我想实现一个 登录 流程 将凭证保留到文件系统 该凭证可用于后续的无密码身份验证 直到用户 注销
  • Node.js 中的异步或步骤

    我无法让我的异步代码与 node js 一起使用 尝试异步和步骤库 代码仅返回第一个函数 似乎没有执行其余函数 我究竟做错了什么 thanks var step require step step function f1 console l
  • 使用 PM2 将节点作为服务运行 - 连接被拒绝

    我正在关注this https www digitalocean com community tutorials how to set up a node js application for production on ubuntu 16
  • 无法在适当的时间对域调用 dispose

    我有一个问题domain模块 目前 我正在尝试捕获请求中引发的任何未捕获的错误 使用express中间件和域 所有请求在调用之前都会通过此函数路由next并继续走正确的路线 app use req res next gt domain cr
  • 在打字稿中导入 json

    我是 typescript 的新手 在我的项目中 我们使用 typescript2 在我的要求之一中 我需要导入 json 文件 所以我创建了 d ts 文件如下 test d ts declare module json const va
  • 使用 Mongoose 无法找到按 ObjectId 搜索的文档

    Campaign find client id req param client id error campaigns gt if error response error error message else for campaign i
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la

随机推荐

  • 我可以将我的 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 音频流的性质导