Rudimentary support for unified audio playing! 🎉

This commit is contained in:
Amish Shah
2018-01-19 23:55:59 +00:00
parent 8e5e1ad8fe
commit 2b5fc77a67
5 changed files with 66 additions and 169 deletions

View File

@@ -1,6 +1,7 @@
const EventEmitter = require('events');
const BroadcastAudioPlayer = require('./player/BroadcastAudioPlayer');
const DispatcherSet = require('./util/DispatcherSet');
const PlayInterface = require('./util/PlayInterface');
/**
* A voice broadcast can be played across multiple voice connections for improved shared-stream efficiency.
@@ -15,6 +16,7 @@ const DispatcherSet = require('./util/DispatcherSet');
* }
* ```
* @implements {VolumeInterface}
* @implements {PlayInterface}
*/
class VoiceBroadcast extends EventEmitter {
constructor(client) {
@@ -35,74 +37,8 @@ class VoiceBroadcast extends EventEmitter {
get dispatcher() {
return this.player.dispatcher;
}
/**
* Plays the given file in the voice connection.
* @param {string} file The absolute path to the file
* @param {StreamOptions} [options] Options for playing the stream
* @returns {BroadcastDispatcher}
* @example
* // Play files natively
* voiceChannel.join()
* .then(connection => {
* const dispatcher = connection.playFile('C:/Users/Discord/Desktop/music.mp3');
* })
* .catch(console.error);
*/
playFile(file, options) {
return this.player.playUnknown(file, options);
}
/**
* Plays an arbitrary input that can be [handled by ffmpeg](https://ffmpeg.org/ffmpeg-protocols.html#Description)
* @param {string} input the arbitrary input
* @param {StreamOptions} [options] Options for playing the stream
* @returns {BroadcastDispatcher}
*/
playArbitraryInput(input, options) {
return this.player.playUnknown(input, options);
}
/**
* Plays and converts an audio stream in the voice connection.
* @param {ReadableStream} stream The audio stream to play
* @param {StreamOptions} [options] Options for playing the stream
* @returns {BroadcastDispatcher}
* @example
* // Play streams using ytdl-core
* const ytdl = require('ytdl-core');
* const streamOptions = { seek: 0, volume: 1 };
* voiceChannel.join()
* .then(connection => {
* const stream = ytdl('https://www.youtube.com/watch?v=XAWgeLF9EVQ', { filter : 'audioonly' });
* const dispatcher = connection.playStream(stream, streamOptions);
* })
* .catch(console.error);
*/
playStream(stream, options) {
return this.player.playUnknown(stream, options);
}
/**
* Plays a stream of 16-bit signed stereo PCM.
* @param {ReadableStream} stream The audio stream to play
* @param {StreamOptions} [options] Options for playing the stream
* @returns {BroadcastDispatcher}
*/
playConvertedStream(stream, options) {
return this.player.playPCMStream(stream, options);
}
/**
* Plays an Opus encoded stream.
* <warn>Note that inline volume is not compatible with this method.</warn>
* @param {ReadableStream} stream The Opus audio stream to play
* @param {StreamOptions} [options] Options for playing the stream
* @returns {BroadcastDispatcher}
*/
playOpusStream(stream, options) {
return this.player.playOpusStream(stream, options);
}
}
PlayInterface.applyToClass(VoiceBroadcast);
module.exports = VoiceBroadcast;