Files
discord.js/src/Voice/VolumeTransformer.js
Aaron Scherer 81549e737e Adding credit
2016-03-18 11:48:46 -07:00

54 lines
1.1 KiB
JavaScript

const Transform = require('stream').Transform;
/**
* @see https://github.com/reneraab/pcm-volume/blob/master/index.js Inspired by this script
*/
class Volume extends Transform {
constructor(volume) {
super();
this.set(volume);
}
get volume() {
return this._volume === undefined ? 1 : this._volume;
}
set volume(value) {
this._volume = value;
}
get multiplier() {
return Math.tan(this.volume);
}
get() {
return this.volume;
}
set(volume) {
this.volume = volume === undefined ? 1 : volume;
}
_transform(buffer, encoding, callback) {
let out = new Buffer(buffer.length);
for (let i = 0; i < buffer.length; i += 2) {
// Read Int16, multiple with multiplier and round down
//console.log(this.volume, this.multiplier, buffer.readInt16LE(i));
let uint = Math.floor(this.multiplier * buffer.readInt16LE(i));
// Ensure value stays within 16bit
uint = Math.min(32767, uint);
uint = Math.max(-32767, uint);
// Write 2 new bytes into other buffer;
out.writeInt16LE(uint, i);
}
this.push(out);
callback();
}
}
module.exports = Volume;