javascript - Discord.JS 录音和数据压缩
问题描述
我目前正在制作一个具有“用户记录”功能的 Discord 机器人,我正在 VC 中对其进行测试,并且注意到.pcm
13 分钟后输出文件约为 20GB。
this.voiceChannel = await message.member.voice.channel.join()
this.reciever = this.voiceChannel.receiver
this.voiceChannel.on('debug', (debug) => {
let packet = JSON.parse(debug.slice(8))
console.log(packet.op)
if(!packet.d || packet.d && packet.d.speaking != 1) return;
let user = this.client.users.resolve(packet.d.user_id)
if(packet.d.speaking) {
let userStream = this.reciever.createStream(user, {mode: 'pcm', end: 'manual'})
let writeStream = require('fs').createWriteStream('./recording.pcm', {})
this.us = userStream
this.ws = writeStream
this.us.on("data", (chunk) =>{
console.log(chunk)
this.us.pipe(this.ws)
})
this.ws.on("pipe", console.log)
}
})
有什么办法可以将.pcm
文件从..我不知道,从 20GB 压缩到 5-10 MB?这似乎很奇怪,因为Buffer
来自 Discord.js 的每个字节都高达 4000 字节 (4KB)(这也使我的磁盘上限为 100%,写入速度为 60MB/s)
解决方案
我将回答我自己的问题,但我相信我知道我做错了什么。
this.us.on("data", (chunk) =>{
console.log(chunk)
this.us.pipe(this.ws)
})
我在那个部分是不正确的,因为每当收到数据时我都会发送数据,不是一次,而是两次。我还使用了该zlib
模块(https://npmjs.org/package/zlib),它对数据/语音压缩的帮助更大。
this.us.on("data", (chunk) => {
let slowBuf = this.zlib.deflate(chunk, (er, res) => {
console.log(res)
this.ws.write(res)
})
})
这就像一个魅力,现在每 2 分钟左右的测试写入 600KB 的数据。
推荐阅读
- sed - 如何使用 sed 将字符串添加到文件中的特定行?
- flutter - 如何在颤动中从另一个屏幕进行更改
- npm - gatsby 的全新安装失败,找不到模块“检测端口”
- javascript - 当人们加入我的服务器时,这个不和谐的机器人不会工作?
- javascript - AssyncStorage 在构建时保存数据
- c# - 如何将变量从一个类引用到另一个类?
- python - 安装 libact 时找不到“lapacke.h”文件错误
- html - 我怎样才能让页面中间的这个边框更紧一点
- salesforce - Salesforce 编号字段默认值为(记录中的最高编号)+ 1
- python - 子类 Python 日期时间对象