Add internal support for @discordjs/opus to v11 (#3700)

* Add internal support for @discordjs/opus

* Remove redundant try/catch

* fix: use setBitrate method in @discordjs/opus

* chore: tidy up opus imports

* fix: correct imports for DiscordJsOpusEngine

* chore: update docs to prefer @discordjs/opus

* chore: bump prism-media to 0.0.4 to allow ffmpeg-static
This commit is contained in:
Amish Shah
2020-01-17 20:58:49 +00:00
committed by GitHub
parent 36c0496ea5
commit 6ab46491c8
10 changed files with 62 additions and 33 deletions

View File

@@ -0,0 +1,34 @@
const OpusEngine = require('./BaseOpusEngine');
class DiscordJsOpusEngine extends OpusEngine {
constructor(player) {
super(player);
const opus = require('@discordjs/opus');
this.encoder = new opus.OpusEncoder(this.samplingRate, this.channels);
super.init();
}
setBitrate(bitrate) {
this.encoder.setBitrate(Math.min(128, Math.max(16, bitrate)) * 1000);
}
setFEC(enabled) {
this.encoder.applyEncoderCTL(this.ctl.FEC, enabled ? 1 : 0);
}
setPLP(percent) {
this.encoder.applyEncoderCTL(this.ctl.PLP, Math.min(100, Math.max(0, percent * 100)));
}
encode(buffer) {
super.encode(buffer);
return this.encoder.encode(buffer, 1920);
}
decode(buffer) {
super.decode(buffer);
return this.encoder.decode(buffer, 1920);
}
}
module.exports = DiscordJsOpusEngine;

View File

@@ -1,15 +1,9 @@
const OpusEngine = require('./BaseOpusEngine');
let opus;
class NodeOpusEngine extends OpusEngine {
constructor(player) {
super(player);
try {
opus = require('node-opus');
} catch (err) {
throw err;
}
const opus = require('node-opus');
this.encoder = new opus.OpusEncoder(this.samplingRate, this.channels);
super.init();
}

View File

@@ -1,4 +1,5 @@
const list = [
require('./DiscordJsOpusEngine'),
require('./NodeOpusEngine'),
require('./OpusScriptEngine'),
];

View File

@@ -1,15 +1,9 @@
const OpusEngine = require('./BaseOpusEngine');
let OpusScript;
class OpusScriptEngine extends OpusEngine {
constructor(player) {
super(player);
try {
OpusScript = require('opusscript');
} catch (err) {
throw err;
}
const OpusScript = require('opusscript');
this.encoder = new OpusScript(this.samplingRate, this.channels);
super.init();
}