mirror of
https://github.com/discordjs/discord.js.git
synced 2026-03-10 08:33:30 +01:00
Bad wav support
This commit is contained in:
@@ -5,6 +5,27 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons
|
||||
var WebSocket = require("ws");
|
||||
var dns = require("dns");
|
||||
var udp = require("dgram");
|
||||
var Lame = require("lame");
|
||||
var Opus = require('node-opus');
|
||||
var Wav = require('wav');
|
||||
var fs = require("fs");
|
||||
|
||||
function VoicePacket(packet, sequence, timestamp, ssrc) {
|
||||
var audioBuffer = packet;
|
||||
var retBuff = new Buffer(audioBuffer.length + 12);
|
||||
retBuff.fill(0);
|
||||
retBuff[0] = 0x80;
|
||||
retBuff[1] = 0x78;
|
||||
retBuff.writeUIntBE(sequence, 2, 2);
|
||||
retBuff.writeUIntBE(timestamp, 4, 4);
|
||||
retBuff.writeUIntBE(ssrc, 8, 4);
|
||||
|
||||
for (var i = 0; i < audioBuffer.length; i++) {
|
||||
retBuff[i + 12] = audioBuffer[i];
|
||||
}
|
||||
|
||||
return retBuff;
|
||||
}
|
||||
|
||||
var VoiceConnection = (function () {
|
||||
function VoiceConnection(channel, client, session, token, server, endpoint) {
|
||||
@@ -22,6 +43,68 @@ var VoiceConnection = (function () {
|
||||
this.init();
|
||||
}
|
||||
|
||||
VoiceConnection.prototype.test = function test() {
|
||||
var self = this;
|
||||
var startTime = Date.now();
|
||||
var cnt = 0;
|
||||
function sendAudio(sequence, timestamp, opusEncoder, wavOutput, udpClient, vWS) {
|
||||
cnt++;
|
||||
var buff = wavOutput.read(1920);
|
||||
if (buff && buff.length === 1920) {
|
||||
sequence + 20 < 65535 ? sequence += 1 : sequence = 0;
|
||||
timestamp + 9600 < 4294967295 ? timestamp += 960 : timestamp = 0;
|
||||
|
||||
var encoded = opusEncoder.encode(buff, 1920);
|
||||
var audioPacket = VoicePacket(encoded, sequence, timestamp, self.vWSData.ssrc);
|
||||
|
||||
var nextTime = startTime + cnt * 20;
|
||||
|
||||
udpClient.send(audioPacket, 0, audioPacket.length, self.vWSData.port, self.endpoint, function (err) {});
|
||||
setTimeout(function () {
|
||||
sendAudio(sequence, timestamp, opusEncoder, wavOutput, udpClient, vWS);
|
||||
}, 20 + (nextTime - new Date().getTime()));
|
||||
} else {
|
||||
var speaking = {
|
||||
"op": 5,
|
||||
"d": {
|
||||
"speaking": false,
|
||||
"delay": 0
|
||||
}
|
||||
};
|
||||
vWS.send(JSON.stringify(speaking));
|
||||
}
|
||||
}
|
||||
|
||||
var speaking = {
|
||||
"op": 5,
|
||||
"d": {
|
||||
"speaking": true,
|
||||
"delay": 0
|
||||
}
|
||||
};
|
||||
|
||||
var vWS = self.vWS;
|
||||
var stream = fs.createReadStream("c:/users/amish/desktop/audio.wav");
|
||||
|
||||
vWS.send(JSON.stringify(speaking));
|
||||
|
||||
var rate = 48000;
|
||||
var opusEncoder = new Opus.OpusEncoder(48000, 1);
|
||||
var wavReader = new Wav.Reader();
|
||||
wavReader.on('format', function (format) {
|
||||
console.log(format);
|
||||
});
|
||||
var wavOutput = stream.pipe(wavReader);
|
||||
|
||||
var sequence = 0;
|
||||
var timestamp = 0;
|
||||
|
||||
wavOutput.on('readable', function () {
|
||||
console.log("readable!");
|
||||
sendAudio(sequence, timestamp, opusEncoder, wavOutput, self.udp, vWS);
|
||||
});
|
||||
};
|
||||
|
||||
VoiceConnection.prototype.init = function init() {
|
||||
var _this = this;
|
||||
|
||||
@@ -101,6 +184,8 @@ var VoiceConnection = (function () {
|
||||
self.mode = data.d.mode;
|
||||
console.log("ready!!!");
|
||||
|
||||
self.test();
|
||||
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -3,6 +3,27 @@
|
||||
var WebSocket = require("ws");
|
||||
var dns = require("dns");
|
||||
var udp = require("dgram");
|
||||
var Lame = require("lame");
|
||||
var Opus = require('node-opus');
|
||||
var Wav = require('wav');
|
||||
var fs = require("fs");
|
||||
|
||||
function VoicePacket(packet, sequence, timestamp, ssrc) {
|
||||
var audioBuffer = packet;
|
||||
var retBuff = new Buffer(audioBuffer.length + 12);
|
||||
retBuff.fill(0);
|
||||
retBuff[0] = 0x80;
|
||||
retBuff[1] = 0x78;
|
||||
retBuff.writeUIntBE(sequence, 2, 2);
|
||||
retBuff.writeUIntBE(timestamp, 4, 4);
|
||||
retBuff.writeUIntBE(ssrc, 8, 4);
|
||||
|
||||
for (var i = 0; i < audioBuffer.length; i++) {
|
||||
retBuff[i + 12] = audioBuffer[i];
|
||||
}
|
||||
|
||||
return retBuff;
|
||||
}
|
||||
|
||||
class VoiceConnection {
|
||||
constructor(channel, client, session, token, server, endpoint) {
|
||||
@@ -18,6 +39,70 @@ class VoiceConnection {
|
||||
this.init();
|
||||
}
|
||||
|
||||
test() {
|
||||
var self = this;
|
||||
var startTime = Date.now();
|
||||
var cnt = 0;
|
||||
function sendAudio(sequence, timestamp, opusEncoder, wavOutput, udpClient, vWS) {
|
||||
cnt++;
|
||||
var buff = wavOutput.read(1920);
|
||||
if (buff && buff.length === 1920) {
|
||||
sequence + 20 < 65535 ? sequence += 1 : sequence = 0;
|
||||
timestamp + 9600 < 4294967295 ? timestamp += 960 : timestamp = 0;
|
||||
|
||||
var encoded = opusEncoder.encode(buff, 1920);
|
||||
var audioPacket = VoicePacket(encoded, sequence, timestamp, self.vWSData.ssrc);
|
||||
|
||||
var nextTime = startTime + cnt * 20;
|
||||
|
||||
udpClient.send(audioPacket, 0, audioPacket.length, self.vWSData.port, self.endpoint, function (err) { });
|
||||
setTimeout(function () {
|
||||
sendAudio(sequence, timestamp, opusEncoder, wavOutput, udpClient, vWS);
|
||||
}, 20 + (nextTime - new Date().getTime()));
|
||||
} else {
|
||||
var speaking = {
|
||||
"op": 5,
|
||||
"d": {
|
||||
"speaking": false,
|
||||
"delay": 0
|
||||
}
|
||||
}
|
||||
vWS.send(JSON.stringify(speaking));
|
||||
}
|
||||
}
|
||||
|
||||
var speaking = {
|
||||
"op": 5,
|
||||
"d": {
|
||||
"speaking": true,
|
||||
"delay": 0
|
||||
}
|
||||
}
|
||||
|
||||
var vWS = self.vWS;
|
||||
var stream = fs.createReadStream("c:/users/amish/desktop/audio.wav");
|
||||
|
||||
vWS.send(JSON.stringify(speaking));
|
||||
|
||||
var rate = 48000;
|
||||
var opusEncoder = new Opus.OpusEncoder(48000, 1);
|
||||
var wavReader = new Wav.Reader();
|
||||
wavReader.on('format', function (format) {
|
||||
console.log(format);
|
||||
});
|
||||
var wavOutput = stream.pipe(wavReader);
|
||||
|
||||
var sequence = 0;
|
||||
var timestamp = 0;
|
||||
|
||||
wavOutput.on('readable', function () {
|
||||
console.log("readable!");
|
||||
sendAudio(sequence, timestamp, opusEncoder, wavOutput, self.udp, vWS);
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
init() {
|
||||
var self = this;
|
||||
dns.lookup(this.endpoint, (err, address, family) => {
|
||||
@@ -74,26 +159,28 @@ class VoiceConnection {
|
||||
switch (data.op) {
|
||||
case 2:
|
||||
self.vWSData = data.d;
|
||||
|
||||
|
||||
KAI = setInterval(() => {
|
||||
vWS.send(JSON.stringify({
|
||||
op : 3,
|
||||
d : null
|
||||
op: 3,
|
||||
d: null
|
||||
}));
|
||||
}, data.d.heartbeat_interval);
|
||||
|
||||
|
||||
var udpPacket = new Buffer(70);
|
||||
udpPacket.writeUIntBE(data.d.ssrc, 0, 4);
|
||||
udpClient.send(udpPacket, 0, udpPacket.length, data.d.port, self.endpoint, err => {
|
||||
console.log("err", err);
|
||||
console.log("err", err);
|
||||
});
|
||||
break;
|
||||
case 4:
|
||||
|
||||
|
||||
self.ready = true;
|
||||
self.mode = data.d.mode;
|
||||
console.log("ready!!!");
|
||||
|
||||
|
||||
self.test();
|
||||
|
||||
break;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user