@Override public void onTrackException(AudioPlayer player, AudioTrack track, FriendlyException exception) { logger.error("track exception for track " + track.getInfo(), exception); }
public Songs(Track track) { title = track.getTrack().getInfo().title; identifier = track.getTrack().getIdentifier(); requester = track.getMeta().getOrDefault("requester", "Unknown").toString(); length = track.getTrack().getDuration(); progress = track.getTrack().getPosition(); User user = Getters.getUserById(requester); if (user != null) { discrim = user.getDiscriminator(); name = user.getName(); avatar = user.getEffectiveAvatarUrl(); } }
private boolean loadFromStream(String identifier, AudioLoadResultHandler resultHandler) { try { StreamInstance stream; synchronized (streams) { String finalIdentifier = defaultOnNull(resolutionCache.get(identifier), identifier); stream = streams.get(finalIdentifier); } if (stream != null) { AudioTrack track = stream.getTrack().makeClone(); log.debug("Track {} (originally {}) loaded using existing stream.", track.getIdentifier(), identifier); resultHandler.trackLoaded(track); return true; } } catch (Exception e) { log.error("Error when checking streams for identifier {}.", identifier); } return false; }
private long parseAudioTrackDuration(AudioTrack track) { if (track == null || track.getInfo().isStream) { return 0L; } return track.getDuration(); }
@Override public String toString() { return "`[" + FormatUtil.formatTime(track.getDuration()) + "]` **" + track.getInfo().title + "** - <@" + track.getUserData(Long.class) + ">"; } }
public static String formatTrackDuration(AudioTrack audioTrack) { return (audioTrack.isSeekable() || audioTrack.getInfo().isStream) ? formatDuration(audioTrack.getDuration()) : "\u221E"; // ∞ }
@Override public void encodeTrack(MessageOutput stream, AudioTrack track) throws IOException { DataOutput output = stream.startMessage(); output.write(TRACK_INFO_VERSION); AudioTrackInfo trackInfo = track.getInfo(); output.writeUTF(trackInfo.title); output.writeUTF(trackInfo.author); output.writeLong(trackInfo.length); output.writeUTF(trackInfo.identifier); output.writeBoolean(trackInfo.isStream); DataFormatTools.writeNullableText(output, trackInfo.uri); encodeTrackDetails(track, output); output.writeLong(track.getPosition()); stream.commitMessage(TRACK_INFO_VERSIONED); }
public static String getLink(Track track) { String name = String.valueOf(track.getTrack().getInfo().title).replace("`", "'"); String link = YouTubeExtractor.WATCH_URL + track.getTrack().getIdentifier(); return String.format("[`%s`](%s)", name, link); }
private String buildQueueLength(GuildMusicManager manager) { long length = 0L; for (AudioTrackContainer container : manager.getScheduler().getQueue()) { if (container.getAudioTrack().getInfo().isStream) { continue; } length += container.getAudioTrack().getDuration() / 1000L; } AudioTrack playingTrack = manager.getPlayer().getPlayingTrack(); if (playingTrack != null && !playingTrack.getInfo().isStream) { length += (playingTrack.getDuration() - playingTrack.getPosition()) / 1000L; } int seconds = (int) (length % 60L); int minutes = (int) ((length % 3600L) / 60L); int hours = (int) (length / 3600L); if (hours != 0) { return hours + " hours, " + minutes + " minutes, and " + seconds + " seconds"; } else if (minutes != 0) { return minutes + " minutes, and " + seconds + " seconds"; } return seconds + " seconds"; } }
return; } else { if (t.getTrack().getInfo().isStream) { MessageUtils.sendErrorMessage("Cannot seek on a livestream!", channel); return; } else if (!t.getTrack().isSeekable()) { MessageUtils.sendErrorMessage("Cannot seek on this track!", channel); return; } else { if (millis >= t.getTrack().getDuration()) { MessageUtils.sendErrorMessage("The duration specified is bigger than the length of the video!", channel); return; } else { t.getTrack().setPosition(millis); MessageUtils.sendSuccessMessage("The track has been skipped to: " + FormatUtils.formatJodaTime(new Duration(millis).toPeriod()), channel); return;
.addField("Now Playing", SongCommand.getLink(track), false) .addField("Duration", FormatUtils .formatDuration(track.getTrack().getDuration()), false) .addField("Requested by", String.format("<@!%s>", track.getMeta() .addField("Next up", playlist.isEmpty() ? "Nothing" : SongCommand.getLink(playlist.peek()), false) .setImage("https://img.youtube.com/vi/" + track.getTrack().getIdentifier() + "/hqdefault.jpg") .build()).queue(); } else { String str = null; if (track != null) { str = track.getTrack().getInfo().title; if (str.length() > 32) str = str.substring(0, 32);
+ "\nLast Active: %s", (isPlaying ? track.getTrack().getIdentifier() : "No current track"), (isPlaying ? track.getTrack().getPosition() + "/" + track.getTrack().getDuration() : "N/A"), player.getPaused(), player.getPlaylist().size(),
@Override public String toString() { return "RemoteExec " + executorId + ", " + track.getIdentifier(); } }
@Override public void on(Context context) { GuildAudioController musicManager = this.bot.getGuildsManager().get(context.getEvent().getGuild().getIdLong()); if (musicManager == null || musicManager.getPlayer().getPlayingTrack() == null) { context.reply("No music is playing on this guild! To play a song use `{{prefix}}play`"); return; } AudioTrack currentTrack = musicManager.getPlayer().getPlayingTrack(); currentTrack.setPosition(0); context.reply("Restarted **%s** by **%s** `[%s]`", currentTrack.getInfo().title, currentTrack.getInfo().author, formatTrackDuration(currentTrack)); } }
@Override public void trackLoaded(AudioTrack track) { if (track.getSourceManager().getSourceName().equals("youtube")) { OMusic rec = CMusic.findByYoutubeId(track.getInfo().identifier); if (rec.id == 0 || rec.duration == 0) { rec.artist = track.getInfo().author; rec.duration = (int) (track.getInfo().length / 1000L); rec.youtubeTitle = track.getInfo().title; CMusic.update(rec); } } scheduler.queue(new QueuedAudioTrack(trackToAdd.requestedBy, track)); startPlaying(); }
/** * Gets the progress bar for the current {@link Track} including the percent played. * * @param track The {@link Track} to get a progress bar for. * @return A string the represents a progress bar that represents the time played. */ public static String getProgressBar(Track track) { float percentage = (100f / track.getTrack().getDuration() * track.getTrack().getPosition()); return "[" + StringUtils.repeat("▬", (int) Math.round((double) percentage / 10)) + "](https://github.com/FlareBot)" + StringUtils.repeat("▬", 10 - (int) Math.round((double) percentage / 10)) + " " + GeneralUtils.percentageFormat.format(percentage) + "%"; }
public String getFormattedPlayedTime() { return NumberUtil.formatTime(getAudioTrack().getPosition()); }
public boolean isTooLong(AudioTrack track) { if(maxSeconds<=0) return false; return Math.round(track.getDuration()/1000.0) > maxSeconds; } }
public void goToTime(Long millis) { player.getPlayingTrack().setPosition(millis); }