Package com.tulskiy.musique.playlist

Examples of com.tulskiy.musique.playlist.TrackData


*/
public class PCMFileReader extends AudioFileReader {
    private static Decoder decoder = new PCMDecoder();

    public Track readSingle(Track track) {
      TrackData trackData = track.getTrackData();
        File file = trackData.getFile();

        String title = Util.removeExt(file.getName());
        trackData.setTagFieldValues(FieldKey.TITLE, title);
        try {
            AudioFileFormat format = AudioSystem.getAudioFileFormat(file);
            trackData.setStartPosition(0);
            AudioFormat audioFormat = format.getFormat();
            trackData.setSampleRate((int) audioFormat.getSampleRate());
            trackData.setTotalSamples(format.getFrameLength());
            trackData.setChannels(audioFormat.getChannels());
            trackData.setCodec(Util.getFileExt(file).toUpperCase());
            if (format.getFrameLength() > 0)
              trackData.setBitrate((int) (format.getByteLength() / format.getFrameLength() * audioFormat.getSampleRate() / 100));
        } catch (Exception e) {
            System.out.println("Couldn't read file: " + trackData.getFile());
        }
        return track;
    }
View Full Code Here


                            }
                            return ext.equals("cue");
                        }
                    })));
                } else {
                    TrackData trackData = new TrackData(file.toURI(), 0);
                    Track track = trackDatas.get(trackData);
                    if (track != null) {
                        if (track.getTrackData().getLastModified() != file.lastModified()) {
                            track.getTrackData().clearTags();
                            TrackIO.getAudioFileReader(file.getName()).reload(track);
                        }
                        processed.add(track);
                    } else {
                        temp.clear();
                        TrackIO.getAudioFileReader(file.getName()).read(file, temp);
                        for (Track newTrack : temp) {
                            trackData = newTrack.getTrackData();
                            if (trackDatas.containsKey(trackData)) {
                                // it must be the cue file, so  merge the track data
                                trackData.merge(newTrack.getTrackData());
                            }
                            processed.add(newTrack);
                        }
                    }
                }
View Full Code Here

*/
public class WavPackFileReader extends AudioFileReader {
    private static APETagProcessor apeTagProcessor = new APETagProcessor();

    public Track readSingle(Track track) {
      TrackData trackData = track.getTrackData();
        try {
            apeTagProcessor.readAPEv2Tag(track);
            RandomAccessFile raf = new RandomAccessFile(trackData.getFile(), "r");
            WavpackContext wpc = WavPackUtils.WavpackOpenFileInput(raf);
            trackData.setTotalSamples(WavPackUtils.WavpackGetNumSamples(wpc));
            trackData.setSampleRate((int) WavPackUtils.WavpackGetSampleRate(wpc));
            trackData.setChannels(WavPackUtils.WavpackGetReducedChannels(wpc));
            trackData.setBitrate((int) (raf.length() / trackData.getTotalSamples() / 1000 * 8));
            trackData.setCodec("WavPack");
            raf.close();
        } catch (Exception e) {
            System.out.println("Couldn't read file: " + trackData.getFile());
        }
        return track;
    }
View Full Code Here

    }

    @Override
    protected void copySpecificTagFields(Tag tag, Track track) {
        Mp4Tag mp4Tag = (Mp4Tag) tag;
        TrackData trackData = track.getTrackData();

        Mp4TrackField trackField = (Mp4TrackField) mp4Tag.getFirstField(Mp4FieldKey.TRACK);
        if (trackField != null) {
            if (trackField.getTrackNo() != null) {
                trackData.addTrack(trackField.getTrackNo().intValue());
            }
            if (trackField.getTrackTotal() != null) {
                trackData.addTrackTotal(trackField.getTrackTotal().intValue());
            }
        }

        Mp4DiscNoField discField = (Mp4DiscNoField) mp4Tag.getFirstField(Mp4FieldKey.DISCNUMBER);
        if (discField != null) {
            if (discField.getDiscNo() != null) {
                trackData.addDisc(discField.getDiscNo().intValue());
            }
            if (discField.getDiscTotal() != null) {
                trackData.addDiscTotal(discField.getDiscTotal().intValue());
            }
        }

        List<TagField> genreFields = new ArrayList<TagField>();
        genreFields.addAll(mp4Tag.get(Mp4FieldKey.GENRE_CUSTOM));
        genreFields.addAll(mp4Tag.get(Mp4FieldKey.GENRE_ITUNES));
        for (TagField genreField : genreFields) {
            trackData.addGenre(genreField.toString());
        }
    }
View Full Code Here

    public boolean open(final Track track) {
        if (track == null)
            return false;
        this.track = track;
        TrackData trackData = track.getTrackData();
        try {
            URI location = trackData.getLocation();
            InputStream fis;
            if (trackData.isFile()) {
                logger.fine("Opening file: " + trackData.getFile());
                streaming = false;
                fis = new FileInputStream(trackData.getFile());
                streamSize = trackData.getFile().length();
            } else {
              trackData.setCodec("MP3 Stream");
                logger.fine("Opening stream: " + URLDecoder.decode(location.toString(), "utf8"));
                streaming = true;
                fis = IcyInputStream.create(track);
                decoder = new Decoder();
            }
            bitstream = new Bitstream(fis);
            Header header = bitstream.readFrame();
            encDelay = header.getEncDelay();
            int encPadding = header.getEncPadding();
            int sampleRate = header.frequency();
            int channels = header.mode() == Header.SINGLE_CHANNEL ? 1 : 2;
            trackData.setSampleRate(sampleRate);
            trackData.setChannels(channels);
            oldBitrate = trackData.getBitrate();
            samplesPerFrame = (int) (header.ms_per_frame() * header.frequency() / 1000);
            audioFormat = new AudioFormat(sampleRate, 16, channels, true, false);

            if (!streaming) {
                totalSamples = samplesPerFrame * (header.max_number_of_frames(streamSize) + header.min_number_of_frames(streamSize)) / 2;
View Full Code Here

    @Override
    public boolean open(Track track) {
        this.track = track;
        try {
            TrackData trackData = track.getTrackData();
            if (trackData.isStream()) {
                in = new BufferedInputStream(IcyInputStream.create(track), BUFFER_SIZE);
                trackData.setCodec("AAC Stream");
            } else
                in = new BufferedInputStream(new FileInputStream(trackData.getFile()), BUFFER_SIZE);

            adts = new ADTSDemultiplexer(in);
            audioFormat = new AudioFormat(adts.getSampleFrequency(), 16, adts.getChannelCount(), true, true);
            decoder = new Decoder(adts.getDecoderSpecificInfo());
            buffer = new SampleBuffer();
            trackData.setChannels(adts.getChannelCount());
            trackData.setSampleRate(adts.getSampleFrequency());
            trackData.setBps(16);
            errorCount = 0;
            return true;
        } catch (IOException e) {
            logger.log(Level.WARNING, "Could not open AAC stream", e);
        }
View Full Code Here

* @Author: Denis Tulskiy
* @Date: 26.06.2009
*/
public class FLACFileReader extends AudioFileReader {
    public Track readSingle(Track track) {
      TrackData trackData = track.getTrackData();
        try {
            /*if (Util.getFileExt(trackData.getFile()).equalsIgnoreCase("oga")) {
                OggFlacDecoder dec = new OggFlacDecoder();
                dec.open(new RandomAccessFile(trackData.getFile(), "r"));
                StreamInfo streamInfo = dec.getStreamInfo();
                trackData.setSampleRate(streamInfo.getSampleRate());
                trackData.setBps(streamInfo.getBitsPerSample());
                trackData.setChannels(streamInfo.getChannels());
                trackData.setTotalSamples(streamInfo.getTotalSamples());

                for (Metadata m : dec.getMetadata()) {
                    if (m instanceof VorbisComment) {
                        VorbisComment comment = (VorbisComment) m;
                        VorbisCommentTag vorbisTag = new VorbisCommentTag();
                        HashMap<String, String> map = comment.getComments();
                        for (String key : map.keySet()) {
                            try {
                                VorbisCommentFieldKey newKey = VorbisCommentFieldKey.valueOf(key);
                                vorbisTag.add(vorbisTag.createTagField(newKey, map.get(key)));
                            } catch (IllegalArgumentException e) {
                                vorbisTag.add(vorbisTag.createTagField(key, map.get(key)));
                            }
                        }
                        copyCommonTagFields(vorbisTag, track);
                    }
                }
            } else*/ {
                FlacFileReader reader = new FlacFileReader();
                AudioFile af1 = reader.read(trackData.getFile());
                Tag tag = af1.getTag();
                copyCommonTagFields(tag, track);
                copySpecificTagFields(tag, track);
                GenericAudioHeader audioHeader = (GenericAudioHeader) af1.getAudioHeader();
                copyHeaderFields(audioHeader, track);
            }
        } catch (Exception e) {
            System.out.println("Couldn't read file: " + trackData.getFile());
        }
        return track;
    }
View Full Code Here

   
    private void handleTrackDiscFields(Tag 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"));
        }

        Mp4TrackField trackField = (Mp4TrackField) tag.getFirstField(FieldKey.TRACK_TOTAL);
        trackField.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"));
        }

        Mp4DiscNoField discField = (Mp4DiscNoField) tag.getFirstField(FieldKey.DISC_TOTAL);
        discField.setDiscTotal(Integer.valueOf(trackData.getDiscTotal()));

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

    public abstract boolean isFileSupported(String ext);

    // in case of logic change, review MP3TagReader and APETagProcessor
    protected void copyCommonTagFields(Tag tag, Track track) throws IOException {
      TrackData trackData = track.getTrackData();
        if (tag != null && track != null) {
        for (FieldKey key : FieldKey.values()) {
          List<TagField> fields;
          try {
            fields = tag.getFields(key);
          }
          catch (KeyNotFoundException knfe) {
            // TODO review
            continue;
          }
          catch (NullPointerException npe) {
            // TODO review workaround for mp4tag (throws nullpointer if no mapping found for generic key)
            continue;
          }
          for (TagField field : fields) {
            // TODO think how to minimize custom check impact
            if (field instanceof Mp4TrackField || field instanceof Mp4DiscNoField) {
              break;
            }
            track.getTrackData().addTagFieldValues(key, field.toString());
          }
        }

        // TODO think about the way
          trackData.setCueSheet(tag.getFirst("CUESHEET"));
        }
    }
View Full Code Here

      // Empty implementation, to be overridden
    }

    protected void copyHeaderFields(GenericAudioHeader header, Track track) {
        if (header != null && track != null) {
            TrackData trackData = track.getTrackData();
          trackData.setChannels(header.getChannelNumber());
          trackData.setTotalSamples(header.getTotalSamples());

//            trackData.setTotalSamples((long) (header.getPreciseLength() * header.getSampleRateAsNumber()));
          trackData.setSampleRate(header.getSampleRateAsNumber());
          trackData.setStartPosition(0);
          trackData.setCodec(header.getFormat());
            trackData.setBitrate((int) header.getBitRateAsNumber());
        }
    }
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.