diff --git a/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java b/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java index cdbda28..17b49f9 100644 --- a/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java +++ b/src/main/java/com/bbn/hadder/audio/AudioPlayerSendHandler.java @@ -18,12 +18,13 @@ package com.bbn.hadder.audio; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame; +import net.dv8tion.jda.api.audio.AudioReceiveHandler; import net.dv8tion.jda.api.audio.AudioSendHandler; import javax.annotation.Nullable; import java.nio.ByteBuffer; -public class AudioPlayerSendHandler implements AudioSendHandler { +public class AudioPlayerSendHandler implements AudioSendHandler, AudioReceiveHandler { private final AudioPlayer audioPlayer; private AudioFrame lastFrame; diff --git a/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java b/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java index 268498b..6e8cde2 100644 --- a/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java +++ b/src/main/java/com/bbn/hadder/commands/music/EchoCommand.java @@ -16,68 +16,31 @@ package com.bbn.hadder.commands.music; +import com.bbn.hadder.audio.AudioPlayerSendHandler; import com.bbn.hadder.commands.Command; import com.bbn.hadder.commands.CommandEvent; import com.bbn.hadder.core.Perm; import com.bbn.hadder.core.Perms; -import net.dv8tion.jda.api.audio.*; import net.dv8tion.jda.api.entities.Guild; import net.dv8tion.jda.api.managers.AudioManager; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import java.nio.ByteBuffer; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; - @Perms(Perm.BOT_OWNER) public class EchoCommand implements Command { @Override - public void executed(String[] args, CommandEvent event) { - Guild guild = event.getMember().getVoiceState().getChannel().getGuild(); + public void executed(String[] args, CommandEvent e) { + Guild guild = e.getMember().getVoiceState().getChannel().getGuild(); AudioManager audioManager = guild.getAudioManager(); - EchoHandler handler = new EchoHandler(); + AudioPlayerSendHandler handler = new AudioPlayerSendHandler(e.getAudioManager().getPlayer(e.getGuild())); if (!audioManager.isConnected()) { audioManager.setSendingHandler(handler); audioManager.setReceivingHandler(handler); - audioManager.openAudioConnection(event.getMember().getVoiceState().getChannel()); + audioManager.openAudioConnection(e.getMember().getVoiceState().getChannel()); } else { audioManager.closeAudioConnection(); } } - public static class EchoHandler implements AudioSendHandler, AudioReceiveHandler { - - private final Queue queue = new ConcurrentLinkedQueue<>(); - - @Override - public boolean canProvide() { - return !queue.isEmpty(); - } - - @Nullable - @Override - public ByteBuffer provide20MsAudio() { - byte[] data = queue.poll(); - return data == null ? null : ByteBuffer.wrap(data); // Wrap this in a java.nio.ByteBuffer - } - - @Override - public boolean canReceiveCombined() { - return queue.size() < 10; - } - - @Override - public void handleCombinedAudio(@Nonnull CombinedAudio combinedAudio) { - if (combinedAudio.getUsers().isEmpty()) - return; - - byte[] data = combinedAudio.getAudioData(1.0f); // volume at 100% = 1.0 (50% = 0.5 / 55% = 0.55) - queue.add(data); - } - } - @Override public String[] labels() { return new String[]{"echo"};