#Lavaplayer not working or am I just stupid setting it up?

1 messages · Page 1 of 1 (latest)

silent socket
#
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.track.playback.AudioFrame;
import net.dv8tion.jda.api.audio.AudioSendHandler;

import java.nio.ByteBuffer;

public class AudioForwarder implements AudioSendHandler {

    private final AudioPlayer player;
    private AudioFrame lastFrame;

    public AudioForwarder(AudioPlayer player) {
        this.player = player;
    }

    @Override
    public boolean canProvide() {
        lastFrame = player.provide();
        return lastFrame != null;
    }

    @Override
    public ByteBuffer provide20MsAudio() {
        return ByteBuffer.wrap(lastFrame.getData());
    }

    @Override
    public boolean isOpus() {
        return true;
    }
}
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager;

public class GuildMusicManager {

    private final TrackScheduler trackScheduler;
    private final AudioForwarder audioForwarder;
    private long playerMessageID;
    private long queueMessageID;

    public GuildMusicManager(AudioPlayerManager manager) {
        AudioPlayer player = manager.createPlayer();
        trackScheduler = new TrackScheduler(player);
        player.addListener(trackScheduler);
        audioForwarder = new AudioForwarder(player);
    }

    public TrackScheduler getTrackScheduler() {
        return trackScheduler;
    }

    public AudioForwarder getAudioForwarder() {
        return audioForwarder;
    }
    
}
#
import com.dunctebot.sourcemanagers.DuncteBotSources;
import com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler;
import com.sedmelluq.discord.lavaplayer.player.DefaultAudioPlayerManager;
import com.sedmelluq.discord.lavaplayer.source.AudioSourceManagers;
import com.sedmelluq.discord.lavaplayer.source.youtube.YoutubeAudioSourceManager;
import com.sedmelluq.discord.lavaplayer.tools.FriendlyException;
import com.sedmelluq.discord.lavaplayer.track.AudioPlaylist;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import net.dv8tion.jda.api.entities.Guild;

import java.util.HashMap;
import java.util.Map;

public class PlayerManager extends DefaultAudioPlayerManager {

    private static PlayerManager INSTANCE;
    private final Map<Long, GuildMusicManager> guildMusicManagers = new HashMap<>();

    public PlayerManager() {
        AudioSourceManagers.registerRemoteSources(this);
        AudioSourceManagers.registerLocalSource(this);
        DuncteBotSources.registerAll(this, "en-US");
        source(YoutubeAudioSourceManager.class).setPlaylistPageCount(10);
    }

    public static PlayerManager get() {
        if (INSTANCE == null) {
            INSTANCE = new PlayerManager();
        }
        return INSTANCE;
    }

    public GuildMusicManager getGuildMusicManager(Guild guild) {
        return guildMusicManagers.computeIfAbsent(guild.getIdLong(), (guildID) -> {
            GuildMusicManager musicManager = new GuildMusicManager(this);

            guild.getAudioManager().setSendingHandler(musicManager.getAudioForwarder());

            return musicManager;
        });
    }
#
 public void play(Guild guild, String trackURL, boolean allowPlaylist) {
        GuildMusicManager guildMusicManager = getGuildMusicManager(guild);
        this.loadItemOrdered(guildMusicManager, trackURL, new AudioLoadResultHandler() {
            @Override
            public void trackLoaded(AudioTrack track) {
                guildMusicManager.getTrackScheduler().queue(track);
            }

            @Override
            public void playlistLoaded(AudioPlaylist playlist) {
                if (allowPlaylist) {
                    for (AudioTrack track : playlist.getTracks()) {
                        guildMusicManager.getTrackScheduler().queue(track);
                    }
                } else {
                    guildMusicManager.getTrackScheduler().queue(playlist.getTracks().get(0));
                }
            }

            @Override
            public void noMatches() {
            }
            @Override
            public void loadFailed(FriendlyException e) {

            }
        });
    }
}
#
import com.sedmelluq.discord.lavaplayer.player.AudioPlayer;
import com.sedmelluq.discord.lavaplayer.player.event.AudioEventAdapter;
import com.sedmelluq.discord.lavaplayer.track.AudioTrack;
import com.sedmelluq.discord.lavaplayer.track.AudioTrackEndReason;

import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class TrackScheduler extends AudioEventAdapter {

    private final AudioPlayer player;
    private final BlockingQueue<AudioTrack> queue = new LinkedBlockingQueue<>();

    public TrackScheduler(AudioPlayer player) {
        this.player = player;
    }
    @Override
    public void onTrackEnd(AudioPlayer player, AudioTrack track, AudioTrackEndReason endReason) {
        player.startTrack(queue.poll(), false);
    }

    public void queue(AudioTrack track) {
        if (!player.startTrack(track, true)) {
            queue.offer(track);
        }
    }

    public AudioPlayer getPlayer() {
        return player;
    }

    public BlockingQueue<AudioTrack> getQueue() {
        return queue;
    }
}
paper gulch
#

omg

silent socket
#

Usage:


String song = event.getOption("song").getAsString();
        boolean allowPlaylist = true;

try {
  new URI(song);
} catch (URISyntaxException e) {
  allowPlaylist = false;
  song = "ytsearch:" + song;
}
PlayerManager playerManager = PlayerManager.get();
playerManager.play(event.getGuild(), song, allowPlaylist);
paper gulch
#

bro

silent socket
#

jo?

paper gulch
#
``` i aint reading all that code but are u using this #general message
silent socket
#

Oh nah, i last tried it 5 days ago and missed this

#

currently using this
<dependency>
<groupId>dev.arbjerg</groupId>
<artifactId>lavaplayer</artifactId>
<version>727959e9f621fc457b3a5adafcfffb55fdeaa538-SNAPSHOT</version>
</dependency>

split blade
#

fwiw you need to register dunctebot's sources BEFORE remote

#

same for local too

#

remote registers the HTTP source which is a "catch all"

#

so your local and duncte sources will never get queried

silent socket
#

alright, thanks for the info

silent socket
split blade
#

Listen for track exception and track stuck events in your AudioEventAdapter class

silent socket
#

alright

split blade
#

and make sure to log the exceptions

silent socket
#

brb

#

Nothing is being logged not even called

#

Even in debugging mode it won't reach the onTrackException function and the onTrackStuck function

#

Problem solved