Package com.tulskiy.musique.audio.formats.cue

Source Code of com.tulskiy.musique.audio.formats.cue.CUEParser

/*
* Copyright (c) 2008, 2009, 2010 Denis Tulskiy
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with this work.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.tulskiy.musique.audio.formats.cue;

import java.io.File;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.List;

import org.jaudiotagger.tag.FieldKey;

import jwbroek.cuelib.CueParser;
import jwbroek.cuelib.CueSheet;
import jwbroek.cuelib.FileData;
import jwbroek.cuelib.Index;
import jwbroek.cuelib.TrackData;

import com.tulskiy.musique.audio.AudioFileReader;
import com.tulskiy.musique.playlist.Track;
import com.tulskiy.musique.system.TrackIO;

/**
* @Author: Denis Tulskiy
* @Date: 29.06.2009
*/
public class CUEParser {
    public void parse(List<Track> list, Track file, LineNumberReader cueStream, boolean embedded) {
        try {
            CueSheet cueSheet = CueParser.parse(cueStream);
            List<FileData> datas = cueSheet.getFileData();
            String cueLocation = file.getTrackData().getFile().getAbsolutePath();
            if (datas.size() > 0) {
                for (FileData fileData : datas) {
                    if (!embedded) {
                        String parent = file.getTrackData().getFile().getParent();
                        File referencedFile = new File(parent, fileData.getFile());
                        if (!referencedFile.exists())
                            continue;
                        AudioFileReader reader = TrackIO.getAudioFileReader(referencedFile.getName());
                        if (reader == null) break;
                        file = reader.read(referencedFile);
                    }

                    int size = fileData.getTrackData().size();
                    for (int i = 0; i < size; i++) {
                        TrackData trackData = fileData.getTrackData().get(i);
                        Track track = file.copy();
                        track.getTrackData().setCueEmbedded(embedded);
                        if (!embedded)
                            track.getTrackData().setCueLocation(cueLocation);

                        String album = trackData.getMetaData(CueSheet.MetaDataField.ALBUMTITLE);
                        if (album.length() > 0)
                            track.getTrackData().setTagFieldValues(FieldKey.ALBUM, album);
                        String artist = trackData.getPerformer();
                        track.getTrackData().setTagFieldValues(FieldKey.ARTIST, artist != null && artist.length() > 0 ? artist : cueSheet.getPerformer());
                        track.getTrackData().setTagFieldValues(FieldKey.ALBUM_ARTIST, cueSheet.getPerformer());
                        track.getTrackData().setTagFieldValues(FieldKey.COMMENT, cueSheet.getComment());
                        track.getTrackData().setTagFieldValues(FieldKey.TITLE, trackData.getTitle());
                        String year = trackData.getMetaData(CueSheet.MetaDataField.YEAR);
                        if (year.length() > 0)
                          track.getTrackData().setTagFieldValues(FieldKey.YEAR, year);
                        track.getTrackData().setTagFieldValues(FieldKey.TRACK, String.valueOf(trackData.getNumber()));
                        String genre = trackData.getMetaData(CueSheet.MetaDataField.GENRE);
                        if (genre.length() > 0)
                            track.getTrackData().setTagFieldValues(FieldKey.GENRE, genre);
                        int sampleRate = track.getTrackData().getSampleRate();
                        long startPosition = indexToSample(trackData.getIndex(1), sampleRate);
//                        System.out.println(song.getFile().getName() + " " + startPosition);
                        long endPosition;
                        if (i >= size - 1) {
                            endPosition = track.getTrackData().getTotalSamples();
                        } else {
                            TrackData nextTrack = fileData.getTrackData().get(i + 1);
                            endPosition = indexToSample(nextTrack.getIndex(1), sampleRate);
                        }
                        track.getTrackData().setTotalSamples(endPosition - startPosition);
                        track.getTrackData().setSubsongIndex(i + 1);
                        track.getTrackData().setStartPosition(startPosition);
                        list.add(track);
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private long indexToSample(Index index, int sampleRate) {
//        System.out.println(index.getPosition().getTotalFrames() / 75d * sampleRate);
        return (long) (index.getPosition().getTotalFrames() / 75d * sampleRate);
    }
}
TOP

Related Classes of com.tulskiy.musique.audio.formats.cue.CUEParser

TOP
Copyright © 2018 www.massapi.com. 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.