Search in sources :

Example 6 with AudioTrackInfo

use of com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo in project lavaplayer by sedmelluq.

the class MpegContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    if (!checkNextBytes(inputStream, ISO_TAG)) {
        return null;
    }
    log.debug("Track {} is an MP4 file.", reference.identifier);
    MpegFileLoader file = new MpegFileLoader(inputStream);
    file.parseHeaders();
    MpegTrackInfo audioTrack = getSupportedAudioTrack(file);
    if (audioTrack == null) {
        return new MediaContainerDetectionResult(this, "No supported audio format in the MP4 file.");
    }
    MpegTrackConsumer trackConsumer = new MpegNoopTrackConsumer(audioTrack);
    MpegFileTrackProvider fileReader = file.loadReader(trackConsumer);
    if (fileReader == null) {
        return new MediaContainerDetectionResult(this, "MP4 file uses an unsupported format.");
    }
    return new MediaContainerDetectionResult(this, new AudioTrackInfo(DataFormatTools.defaultOnNull(file.getTextMetadata("Title"), UNKNOWN_TITLE), DataFormatTools.defaultOnNull(file.getTextMetadata("Artist"), UNKNOWN_ARTIST), fileReader.getDuration(), reference.identifier, false, reference.identifier));
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) MpegFileTrackProvider(com.sedmelluq.discord.lavaplayer.container.mpeg.reader.MpegFileTrackProvider) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 7 with AudioTrackInfo

use of com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo in project lavaplayer by sedmelluq.

the class AdtsContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    AdtsStreamReader reader = new AdtsStreamReader(inputStream);
    if (reader.findPacketHeader(MediaContainerDetection.STREAM_SCAN_DISTANCE) == null) {
        return null;
    }
    log.debug("Track {} is an ADTS stream.", reference.identifier);
    return new MediaContainerDetectionResult(this, new AudioTrackInfo(reference.title != null ? reference.title : MediaContainerDetection.UNKNOWN_TITLE, MediaContainerDetection.UNKNOWN_ARTIST, Long.MAX_VALUE, reference.identifier, true, reference.identifier));
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 8 with AudioTrackInfo

use of com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo in project lavaplayer by sedmelluq.

the class FlacContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    if (!checkNextBytes(inputStream, FlacFileLoader.FLAC_CC)) {
        return null;
    }
    log.debug("Track {} is a FLAC file.", reference.identifier);
    FlacTrackInfo trackInfo = new FlacFileLoader(inputStream).parseHeaders();
    return new MediaContainerDetectionResult(this, new AudioTrackInfo(defaultOnNull(trackInfo.tags.get(TITLE_TAG), UNKNOWN_TITLE), defaultOnNull(trackInfo.tags.get(ARTIST_TAG), UNKNOWN_ARTIST), trackInfo.duration, reference.identifier, false, reference.identifier));
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 9 with AudioTrackInfo

use of com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo in project lavaplayer by sedmelluq.

the class Mp3ContainerProbe method probe.

@Override
public MediaContainerDetectionResult probe(AudioReference reference, SeekableInputStream inputStream) throws IOException {
    if (!checkNextBytes(inputStream, ID3_TAG)) {
        byte[] frameHeader = new byte[4];
        Mp3FrameReader frameReader = new Mp3FrameReader(inputStream, frameHeader);
        if (!frameReader.scanForFrame(STREAM_SCAN_DISTANCE, false)) {
            return null;
        }
        inputStream.seek(0);
    }
    log.debug("Track {} is an MP3 file.", reference.identifier);
    Mp3TrackProvider file = new Mp3TrackProvider(null, inputStream);
    try {
        file.parseHeaders();
        return new MediaContainerDetectionResult(this, new AudioTrackInfo(defaultOnNull(file.getIdv3Tag(TITLE_TAG), reference.title != null ? reference.title : UNKNOWN_TITLE), defaultOnNull(file.getIdv3Tag(ARTIST_TAG), UNKNOWN_ARTIST), file.getDuration(), reference.identifier, !file.isSeekable(), reference.identifier));
    } finally {
        file.close();
    }
}
Also used : MediaContainerDetectionResult(com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult) AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)

Example 10 with AudioTrackInfo

use of com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo in project lavaplayer by sedmelluq.

the class BeamAudioSourceManager method loadItem.

@Override
public AudioItem loadItem(DefaultAudioPlayerManager manager, AudioReference reference) {
    String streamName = getChannelNameFromUrl(reference.identifier);
    if (streamName == null) {
        return null;
    }
    JsonBrowser channelInfo = fetchStreamChannelInfo(streamName);
    if (channelInfo == null) {
        return AudioReference.NO_TRACK;
    } else {
        String displayName = channelInfo.get("name").text();
        String id = channelInfo.get("id").text();
        if (displayName == null || id == null) {
            throw new IllegalStateException("Expected id and name fields from Beam channel info.");
        }
        return new BeamAudioTrack(new AudioTrackInfo(displayName, streamName, Long.MAX_VALUE, id + "|" + streamName + "|" + reference.identifier, true, "https://beam.pro/" + streamName), this);
    }
}
Also used : AudioTrackInfo(com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo) JsonBrowser(com.sedmelluq.discord.lavaplayer.tools.JsonBrowser)

Aggregations

AudioTrackInfo (com.sedmelluq.discord.lavaplayer.track.AudioTrackInfo)22 AudioTrack (com.sedmelluq.discord.lavaplayer.track.AudioTrack)7 MediaContainerDetectionResult (com.sedmelluq.discord.lavaplayer.container.MediaContainerDetectionResult)6 EmbedBuilder (net.dv8tion.jda.core.EmbedBuilder)6 FriendlyException (com.sedmelluq.discord.lavaplayer.tools.FriendlyException)5 AudioLoadResultHandler (com.sedmelluq.discord.lavaplayer.player.AudioLoadResultHandler)3 AudioPlaylist (com.sedmelluq.discord.lavaplayer.track.AudioPlaylist)3 JsonBrowser (com.sedmelluq.discord.lavaplayer.tools.JsonBrowser)2 List (java.util.List)2 Optional (java.util.Optional)2 TimeUnit (java.util.concurrent.TimeUnit)2 Slf4j (lombok.extern.slf4j.Slf4j)2 MessageBuilder (net.dv8tion.jda.core.MessageBuilder)2 Message (net.dv8tion.jda.core.entities.Message)2 GuildMessageReceivedEvent (net.dv8tion.jda.core.events.message.guild.GuildMessageReceivedEvent)2 MantaroData (net.kodehawa.mantarobot.data.MantaroData)2 DBGuild (net.kodehawa.mantarobot.data.entities.DBGuild)2 GuildData (net.kodehawa.mantarobot.data.entities.helpers.GuildData)2 DiscordUtils (net.kodehawa.mantarobot.utils.DiscordUtils)2 Utils (net.kodehawa.mantarobot.utils.Utils)2