Package com.tulskiy.musique.playlist

Examples of com.tulskiy.musique.playlist.TrackData


        if (decoder != null) {
            decoder.close();
        }

        if (track != null) {
            TrackData trackData = track.getTrackData();
            logger.fine("Opening track " + trackData.getLocation());

            if (trackData.isFile() && !trackData.getFile().exists()) {
                //try to get the next one
                track = order.next(track);
                if (track == null || (
                    trackData.isFile() && !trackData.getFile().exists())) {
                    stop(false);
                    return;
                }
            }
            decoder = Codecs.getDecoder(track);
            currentTrack = track;
            currentByte = 0;

            if (decoder == null || !decoder.open(track)) {
                currentTrack = null;
                stop(false);
                return;
            }

            buffer.addNextTrack(currentTrack, decoder.getAudioFormat(), -1, forced);

            if (trackData.getStartPosition() > 0)
                decoder.seekSample(trackData.getStartPosition());
            if (trackData.getSubsongIndex() > 0) {
                cueTotalBytes = AudioMath.samplesToBytes(trackData.getTotalSamples(), decoder.getAudioFormat().getFrameSize());
            } else {
                cueTotalBytes = 0;
            }

            start();
View Full Code Here


*/
public class OGGFileReader extends AudioFileReader {
    private static VorbisDecoder vorbisdecoder = new VorbisDecoder();

    public Track readSingle(Track track) {
      TrackData trackData = track.getTrackData();
        try {
            OggFileReader reader = new OggFileReader();
            AudioFile af1 = reader.read(trackData.getFile());
            Tag tag = af1.getTag();
            copyCommonTagFields(tag, track);
            copySpecificTagFields(tag, track);
            copyHeaderFields((GenericAudioHeader) af1.getAudioHeader(), track);
        } catch (Exception e) {
            System.out.println("Couldn't read file: " + trackData.getFile());
        }
        return track;
    }
View Full Code Here

    private boolean streaming = false;
    private Track track;
    private int oldBitrate;

    public boolean open(Track track) {
      TrackData trackData = track.getTrackData();
        try {
            this.track = track;
            if (trackData.isFile()) {
                logger.fine("Opening file: " + trackData.getFile());
                vorbisFile = new VorbisFile(trackData.getFile().getAbsolutePath());
                streaming = false;
                oldBitrate = trackData.getBitrate();
            } else if (trackData.isStream()) {
                URL url = trackData.getLocation().toURL();
                logger.fine("Opening stream: " + URLDecoder.decode(url.toString(), "utf8"));
                URLConnection urlConnection = url.openConnection();
                String contentType = urlConnection.getContentType();
                if (!contentType.equals("application/ogg")) {
                    logger.warning("Wrong content type: " + contentType);
                    return false;
                }
                InputStream is = urlConnection.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                vorbisFile = new VorbisFile(bis, null, 0);
                streaming = true;
                reloadComments(track);
                trackData.setCodec("OGG Vorbis Stream");
            }
            Info info = vorbisFile.getInfo()[0];
            trackData.setSampleRate(info.rate);
            trackData.setChannels(info.channels);
            audioFormat = new AudioFormat(info.rate, 16, info.channels, true, false);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
View Full Code Here

    private static final int GAPLESS_DELAY = 529;

    private APETagProcessor apeTagProcessor = new APETagProcessor();

    public Track readSingle(Track track) {
      TrackData trackData = track.getTrackData();
        TextEncoding.getInstanceOf().setDefaultNonUnicode(defaultCharset.name());
        ID3Tag.setDefaultEncoding(defaultCharset.name());
        MP3File mp3File = null;
        try {
            mp3File = new MP3File(trackData.getFile(), MP3File.LOAD_ALL, true);
        } catch (Exception ignored) {
            System.out.println("Couldn't read file: " + trackData.getFile());
        }

        ID3v24Tag v24Tag = null;
        if (mp3File != null) {
            try {
                v24Tag = mp3File.getID3v2TagAsv24();
                if (v24Tag != null) {
                    copyCommonTagFields(v24Tag, track);
                    copySpecificTagFields(v24Tag, track);
                }

                ID3v1Tag id3v1Tag = mp3File.getID3v1Tag();
                if (id3v1Tag != null) {
                    copyCommonTagFields(id3v1Tag, track);
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

            MP3AudioHeader mp3AudioHeader = mp3File.getMP3AudioHeader();
            copyHeaderFields(mp3AudioHeader, track);

            long totalSamples = trackData.getTotalSamples();
            int enc_delay = GAPLESS_DELAY;

            XingFrame xingFrame = mp3AudioHeader.getXingFrame();
            if (xingFrame != null) {
                LameFrame lameFrame = xingFrame.getLameFrame();
                if (lameFrame != null) {
                    long length = totalSamples;
                    enc_delay += lameFrame.getEncDelay();
                    int enc_padding = lameFrame.getEncPadding() - GAPLESS_DELAY;
                    if (enc_padding < length)
                        length -= enc_padding;

                    if (totalSamples > length)
                        totalSamples = length;
                } else {
                    totalSamples += GAPLESS_DELAY;
                }
            }

            totalSamples -= enc_delay;
            trackData.setTotalSamples(totalSamples);
        }

        // TODO review correctness of reading APETag only in case ID3 is missed
        // for example, maybe useful to read and set those fields
        // that are missed in ID3 but presented in APE
View Full Code Here

            for (FieldKey key : FieldKey.values()) {
                setMusiqueTagFieldValues(track, key, v24Tag);
            }
        } else if (tag instanceof ID3v1Tag) {
            ID3v1Tag id3v1Tag = (ID3v1Tag) tag;
            TrackData trackData = track.getTrackData();
            for (FieldKey key : FieldKey.values()) {
                String val = id3v1Tag.getFirst(key);
                if (!Util.isEmpty(val)) {
                    FieldValues tagFieldValues = trackData.getTagFieldValues(key);
                    if (tagFieldValues == null || tagFieldValues.isEmpty())
                        trackData.setTagFieldValues(key, val);
                }
            }
        }
    }
View Full Code Here

    private final static List<FieldKey> trackDiscFieldKeys = new ArrayList<FieldKey>(
        Arrays.asList(FieldKey.TRACK, FieldKey.TRACK_TOTAL, FieldKey.DISC_NO, FieldKey.DISC_TOTAL));

    @Override
  public void write(Track track) throws TagWriteException {
      TrackData trackData = track.getTrackData();
        File file = trackData.getFile();
        TextEncoding.getInstanceOf().setDefaultNonUnicode(AudioFileReader.getDefaultCharset().name());

        if (/*song.getCustomHeaderField("hasApeTag") != null*/false) {
            try {
                apeTagProcessor.writeAPEv2Tag(track);
View Full Code Here

   
    private void handleTrackDiscFields(ID3v24Tag tag, Track track) throws FieldDataInvalidException, KeyNotFoundException {
      boolean trackFieldUpdated = false;
      boolean discFieldUpdated = false;
     
      TrackData trackData = track.getTrackData();
     
      if (!Util.isEmpty(trackData.getTrack())) {
        tag.deleteField(FieldKey.TRACK);
        tag.addField(tag.createField(FieldKey.TRACK, trackData.getTrack()));
        trackFieldUpdated = true;
      }
      if (!Util.isEmpty(trackData.getTrackTotal())) {
        if (!trackFieldUpdated) {
            tag.deleteField(FieldKey.TRACK);
          tag.addField(tag.createField(FieldKey.TRACK, "0"));
        }

        TagField field = tag.getFirstField(FieldKey.TRACK_TOTAL);
      ID3v24Frame frame = (ID3v24Frame) field;
      FrameBodyTRCK body = (FrameBodyTRCK) frame.getBody();
      body.setTrackTotal(Integer.valueOf(trackData.getTrackTotal()));

      trackFieldUpdated = true;
      }
      if (!trackFieldUpdated) {
        tag.deleteField(FieldKey.TRACK);
      }

      if (!Util.isEmpty(trackData.getDisc())) {
        tag.deleteField(FieldKey.DISC_NO);
        tag.addField(tag.createField(FieldKey.DISC_NO, trackData.getDisc()));
        discFieldUpdated = true;
      }
      if (!Util.isEmpty(trackData.getDiscTotal())) {
        if (!discFieldUpdated) {
            tag.deleteField(FieldKey.DISC_NO);
          tag.addField(tag.createField(FieldKey.DISC_NO, "0"));
        }

        TagField field = tag.getFirstField(FieldKey.DISC_TOTAL);
      ID3v24Frame frame = (ID3v24Frame) field;
      FrameBodyTPOS body = (FrameBodyTPOS) frame.getBody();
      body.setDiscTotal(Integer.valueOf(trackData.getDiscTotal()));

        discFieldUpdated = true;
      }
      if (!discFieldUpdated) {
        tag.deleteField(FieldKey.DISC_NO);
View Full Code Here

    public APETagProcessor() {
        ID3Tag.setDefaultEncoding("windows-1251");
    }

    public boolean readAPEv2Tag(Track track) throws IOException {
      TrackData trackData = track.getTrackData();
        RandomAccessFile ras = null;
        try {
            ras = new RandomAccessFile(trackData.getFile(), "r");
            APETag tag = new APETag(ras, true);
            if (tag.GetHasAPETag() || tag.GetHasID3Tag()) {
              setMusiqueTagFieldValue(tag, trackData, FieldKey.ARTIST, APETag.APE_TAG_FIELD_ARTIST);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.ALBUM, APETag.APE_TAG_FIELD_ALBUM);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.TITLE, APETag.APE_TAG_FIELD_TITLE);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.YEAR, APETag.APE_TAG_FIELD_YEAR);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.GENRE, APETag.APE_TAG_FIELD_GENRE);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.COMMENT, APETag.APE_TAG_FIELD_COMMENT);
              setMusiqueTagFieldValue(tag, trackData, FieldKey.ALBUM_ARTIST, "album artist");
              handleTrackDiscFields(tag, trackData);

              setCustomMusiqueTagFieldValue(tag, trackData, FieldKey.RECORD_LABEL);
              setCustomMusiqueTagFieldValue(tag, trackData, FieldKey.CATALOG_NO);
              setCustomMusiqueTagFieldValue(tag, trackData, FieldKey.RATING);

              trackData.setCueSheet(tag.GetFieldString("CUESHEET"));
                if (tag.GetHasAPETag())
                    return tag.GetHasAPETag();
            }
        } catch (IOException e) {
            e.printStackTrace();
View Full Code Here

        }
        return false;
    }

    public void writeAPEv2Tag(Track track) throws IOException {
      TrackData trackData = track.getTrackData();
        RandomAccessFile ras = null;
        try {
            ras = new RandomAccessFile(trackData.getFile(), "rw");
            APETag tag = new APETag(ras, true);

            setApeTagFieldValue(tag, trackData, FieldKey.ARTIST, APETag.APE_TAG_FIELD_ARTIST);
            setApeTagFieldValue(tag, trackData, FieldKey.ALBUM, APETag.APE_TAG_FIELD_ALBUM);
            setApeTagFieldValue(tag, trackData, FieldKey.TITLE, APETag.APE_TAG_FIELD_TITLE);
            setApeTagFieldValue(tag, trackData, FieldKey.YEAR, APETag.APE_TAG_FIELD_YEAR);
            setApeTagFieldValue(tag, trackData, FieldKey.GENRE, APETag.APE_TAG_FIELD_GENRE);
            setApeTagFieldValue(tag, trackData, FieldKey.COMMENT, APETag.APE_TAG_FIELD_COMMENT);
            setApeTagFieldValue(tag, trackData, FieldKey.TRACK, APETag.APE_TAG_FIELD_TRACK);
            setApeTagFieldValue(tag, trackData, FieldKey.ALBUM_ARTIST, "Album Artist");

            setCustomApeTagFieldValue(tag, trackData, FieldKey.DISC_NO);
            setCustomApeTagFieldValue(tag, trackData, FieldKey.TRACK_TOTAL);
            setCustomApeTagFieldValue(tag, trackData, FieldKey.DISC_TOTAL);
            setCustomApeTagFieldValue(tag, trackData, FieldKey.RECORD_LABEL);
            setCustomApeTagFieldValue(tag, trackData, FieldKey.CATALOG_NO);
            setCustomApeTagFieldValue(tag, trackData, FieldKey.RATING);

            // TODO review this hardcoded const
            tag.SetFieldString("CUESHEET", trackData.getCueSheet());

            tag.Save();
       
        track.getTrackData().removeEmptyTagFields();
        } finally {
View Full Code Here

public class TTAFileReader extends AudioFileReader{
    private static APETagProcessor apeTagProcessor = new APETagProcessor();

    @Override
    protected Track readSingle(Track track) {
        TrackData trackData = track.getTrackData();
        try {
            apeTagProcessor.readAPEv2Tag(track);
            TTA_info info = new TTA_info();
            new TTA_Decoder(new FileInputStream(trackData.getFile())).read_tta_header(info);
            trackData.setCodec("True Audio");
            trackData.setBps(info.bps);
            trackData.setChannels(info.nch);
            trackData.setSampleRate(info.sps);
            trackData.setTotalSamples(info.samples);
            trackData.setBitrate(info.bitrate);
            return track;
        } catch (Exception e) {
            logger.log(Level.WARNING, "Error reading file " + trackData.getFile(), e);
        }

        return null;
    }
View Full Code Here

TOP

Related Classes of com.tulskiy.musique.playlist.TrackData

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.