package com.sedmelluq.discord.lavaplayer.integration; import com.sedmelluq.discord.lavaplayer.player.AudioPlayer; import com.sedmelluq.discord.lavaplayer.player.AudioPlayerManager; import com.sedmelluq.discord.lavaplayer.player.FunctionalResultHandler; import com.sedmelluq.discord.lavaplayer.track.AudioTrack; import com.sedmelluq.discord.lavaplayer.track.playback.MutableAudioFrame; import java.nio.ByteBuffer; import java.util.NoSuchElementException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.zip.CRC32; public class PlayerManagerTestTools { public static AudioTrack loadTrack(AudioPlayerManager manager, String identifier) throws Exception { CompletableFuture<AudioTrack> result = new CompletableFuture<>(); manager.loadItem(identifier, new FunctionalResultHandler( result::complete, (playlist) -> result.completeExceptionally(new IllegalArgumentException()), () -> result.completeExceptionally(new NoSuchElementException()), result::completeExceptionally )); return result.get(10, TimeUnit.SECONDS); } public static long consumeTrack(AudioPlayer player) throws Exception { ByteBuffer buffer = ByteBuffer.allocate(960 * 2 * 2); MutableAudioFrame frame = new MutableAudioFrame(); frame.setBuffer(buffer); CRC32 crc = new CRC32(); int count = 0; while (player.getPlayingTrack() != null && player.provide(frame, 10, TimeUnit.SECONDS)) { buffer.flip(); crc.update(buffer.array(), buffer.position(), buffer.remaining()); count++; } System.out.println("Consumed " + count + " samples"); return crc.getValue(); } }