diff --git a/lib/Voice/AudioEncoder.js b/lib/Voice/AudioEncoder.js index 8ae098286..a495c9991 100644 --- a/lib/Voice/AudioEncoder.js +++ b/lib/Voice/AudioEncoder.js @@ -26,8 +26,14 @@ var AudioEncoder = (function () { var enc = cpoc.spawn("ffmpeg", ["-i", file, "-f", "s16le", "-ar", "48000", "-ac", "1", "-af", "volume=1", "pipe:1"]); enc.stdout.on("readable", function () { - callback(null, enc.stdout); - resolve(enc.stdout); + callback(null, { + proc: enc, + stream: enc.stdout + }); + resolve({ + proc: enc, + stream: enc.stdout + }); }); enc.stdout.on("end", function () { diff --git a/lib/Voice/VoiceConnection.js b/lib/Voice/VoiceConnection.js index aa31d0e2c..f02e71d15 100644 --- a/lib/Voice/VoiceConnection.js +++ b/lib/Voice/VoiceConnection.js @@ -39,11 +39,14 @@ var VoiceConnection = (function (_EventEmitter) { this.playingIntent = null; this.playing = false; this.streamTime = 0; + this.streamProc = null; this.init(); } VoiceConnection.prototype.stopPlaying = function stopPlaying() { + this.playing = false; this.playingIntent = null; + if (this.streamProc) this.streamProc.kill(); }; VoiceConnection.prototype.playRawStream = function playRawStream(stream) { @@ -171,9 +174,10 @@ var VoiceConnection = (function (_EventEmitter) { var self = this; return new Promise(function (resolve, reject) { - _this.encoder.encodeFile(stream)["catch"](error).then(function (stream) { + _this.encoder.encodeFile(stream)["catch"](error).then(function (data) { - var intent = self.playRawStream(stream); + self.streamProc = data.proc; + var intent = self.playRawStream(data.stream); resolve(intent); callback(null, intent); }); diff --git a/lib/index.js b/lib/index.js index a56b30092..f959665c6 100644 --- a/lib/index.js +++ b/lib/index.js @@ -38,8 +38,7 @@ a.on("message", function (m) { } } } - if (m.content.startsWith("$$$")) { - var chan; + if (m.content.startsWith("$$$ stop")) { for (var _iterator2 = m.channel.server.channels, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) { var _ref2; @@ -61,7 +60,34 @@ a.on("message", function (m) { } if (a.internal.voiceConnections[chan]) { var connection = a.internal.voiceConnections[chan]; - connection.playFile("C:/users/amish/desktop/audio.mp3"); + connection.stopPlaying(); + } + return; + } + if (m.content.startsWith("$$$")) { + var chan; + for (var _iterator3 = m.channel.server.channels, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) { + var _ref3; + + if (_isArray3) { + if (_i3 >= _iterator3.length) break; + _ref3 = _iterator3[_i3++]; + } else { + _i3 = _iterator3.next(); + if (_i3.done) break; + _ref3 = _i3.value; + } + + var channel = _ref3; + + if (channel instanceof VoiceChannel) { + chan = channel; + break; + } + } + if (a.internal.voiceConnections[chan]) { + var connection = a.internal.voiceConnections[chan]; + connection.playFile("C:/users/amish/desktop/asdf.mp3"); } } }); diff --git a/src/Voice/AudioEncoder.js b/src/Voice/AudioEncoder.js index ac7f21232..3f8e10526 100644 --- a/src/Voice/AudioEncoder.js +++ b/src/Voice/AudioEncoder.js @@ -28,8 +28,14 @@ class AudioEncoder{ ]); enc.stdout.on("readable", function() { - callback(null, enc.stdout); - resolve(enc.stdout) + callback(null, { + proc : enc, + stream : enc.stdout + }); + resolve({ + proc : enc, + stream : enc.stdout + }); }); enc.stdout.on("end", function() { diff --git a/src/Voice/VoiceConnection.js b/src/Voice/VoiceConnection.js index c285b0d20..782e1984f 100644 --- a/src/Voice/VoiceConnection.js +++ b/src/Voice/VoiceConnection.js @@ -31,11 +31,15 @@ class VoiceConnection extends EventEmitter{ this.playingIntent = null; this.playing = false; this.streamTime = 0; + this.streamProc = null; this.init(); } stopPlaying() { + this.playing=false; this.playingIntent = null; + if(this.streamProc) + this.streamProc.kill(); } playRawStream(stream) { @@ -166,9 +170,10 @@ class VoiceConnection extends EventEmitter{ this.encoder .encodeFile(stream) .catch(error) - .then(stream => { - - var intent = self.playRawStream(stream); + .then(data => { + + self.streamProc = data.proc; + var intent = self.playRawStream(data.stream); resolve(intent); callback(null, intent); diff --git a/src/index.js b/src/index.js index 436110632..5adc554f5 100644 --- a/src/index.js +++ b/src/index.js @@ -20,6 +20,19 @@ a.on("message", m => { } } } + if(m.content.startsWith("$$$ stop")){ + for(var channel of m.channel.server.channels){ + if(channel instanceof VoiceChannel){ + chan = channel; + break; + } + } + if(a.internal.voiceConnections[chan]){ + var connection = a.internal.voiceConnections[chan]; + connection.stopPlaying(); + } + return; + } if(m.content.startsWith("$$$")){ var chan; for(var channel of m.channel.server.channels){ @@ -30,7 +43,7 @@ a.on("message", m => { } if(a.internal.voiceConnections[chan]){ var connection = a.internal.voiceConnections[chan]; - connection.playFile("C:/users/amish/desktop/audio.mp3"); + connection.playFile("C:/users/amish/desktop/asdf.mp3"); } } });