parentElement.appendChild(trackElement); addAttribute(trackElement, "number", trackData.getNumber()); addAttribute(trackElement, "type", trackData.getDataType()); addAttribute(trackElement, "isrc", trackData.getIsrcCode()); addAttribute(trackElement, "performer", trackData.getPerformer()); addAttribute(trackElement, "title", trackData.getTitle()); addAttribute(trackElement, "songwriter", trackData.getSongwriter()); addElement(trackElement, "pregap", trackData.getPregap()); addElement(trackElement, "postgap", trackData.getPostgap()); if (trackData.getFlags().size() > 0) serializeFlags(trackElement, trackData.getFlags()); for (Index index : trackData.getIndices())
/** * Get the last {@link jwbroek.cuelib.TrackData} element. If none exist, an empty one is created and a warning * added. * * @param input * @return The last {@link jwbroek.cuelib.TrackData} element. If none exist, an empty one is created and a * warning added. */ private static TrackData getLastTrackData(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "getLastTrackData(LineOfInput)", input); FileData lastFileData = getLastFileData(input); List<TrackData> trackDataList = lastFileData.getTrackData(); if (trackDataList.size() == 0) { trackDataList.add(new TrackData(lastFileData)); addWarning(input, WARNING_NO_TRACK_SPECIFIED); } TrackData result = trackDataList.get(trackDataList.size() - 1); CueParser.logger.exiting(CueParser.class.getCanonicalName(), "getLastTrackData(LineOfInput)", result); return result; }
result = this.getIsrcCode()==null?"":this.getIsrcCode(); break; case PERFORMER: result = this.getPerformer()==null?this.getParent().getParent().getPerformer():this.getPerformer(); break; case TRACKPERFORMER: result = this.getPerformer()==null?"":this.getPerformer(); break; case SONGWRITER: result = this.getSongwriter()==null?this.getParent().getParent().getSongwriter():this.getSongwriter(); break; case TRACKSONGWRITER: result = this.getSongwriter(); break; case TITLE: result = this.getTitle()==null?this.getParent().getParent().getTitle():this.getTitle(); break; case TRACKTITLE: result = this.getTitle(); break; case TRACKNUMBER: result = Integer.toString(this.getNumber()); break; default: result = this.getParent().getParent().getMetaData(metaDataField); break;
/** * Parse the PREGAP command. * <p/> * PREGAP [mm:ss:ff] * Must come after TRACK, but before INDEX fields for that track. * * @param input */ private static void parsePregap(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "parsePregap(LineOfInput)", input); Matcher pregapMatcher = PATTERN_PREGAP.matcher(input.getInput()); if (startsWith(input, "PREGAP") && pregapMatcher.matches()) { TrackData trackData = getLastTrackData(input); if (trackData.getPregap() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); } if (trackData.getIndices().size() > 0) { addWarning(input, WARNING_PREGAP_IN_WRONG_PLACE); } trackData.setPregap(parsePosition(input, pregapMatcher.group(1))); } else { addWarning(input, WARNING_UNPARSEABLE_INPUT); } CueParser.logger.exiting(CueParser.class.getCanonicalName(), "parsePregap(LineOfInput)"); }
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); } else { TrackData nextTrack = fileData.getTrackData().get(i + 1); endPosition = indexToSample(nextTrack.getIndex(1), sampleRate);
if (trackData.getPerformer() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); trackData.setPerformer(performer);
/** * Parse the ISRC command. * <p/> * ISRC [code] * International Standard Recording Code of track. Must come after TRACK, but before INDEX. * * @param input */ private static void parseIsrc(final LineOfInput input) { CueParser.logger.entering(CueParser.class.getCanonicalName(), "parseIsrc(LineOfInput)", input); if (startsWith(input, "ISRC")) { String isrcCode = input.getInput().substring("ISRC".length()).trim(); if (!PATTERN_ISRC_CODE.matcher(isrcCode).matches()) { addWarning(input, WARNING_NONCOMPLIANT_ISRC_CODE); } TrackData trackData = getLastTrackData(input); if (trackData.getIndices().size() > 0) { addWarning(input, WARNING_ISRC_IN_WRONG_PLACE); } if (trackData.getIsrcCode() != null) { addWarning(input, WARNING_DATUM_APPEARS_TOO_OFTEN); } trackData.setIsrcCode(isrcCode); } else { addWarning(input, WARNING_UNPARSEABLE_INPUT); } CueParser.logger.exiting(CueParser.class.getCanonicalName(), "parseIsrc(LineOfInput)"); }
TrackData trackData = getLastTrackData(input); if (trackData.getIndices().size() > 0) { addWarning(input, WARNING_FLAGS_IN_WRONG_PLACE); Set<String> flagCollection = trackData.getFlags();
data.get(2).setPerformer("Minimal Disc");
List<Index> trackIndices = trackData.getIndices(); if (trackIndices.isEmpty() && trackData.getPostgap() != null) { addWarning(input, WARNING_INDEX_AFTER_POSTGAP);
/** * Get all indices of all tracks that belong to this file data. * @return All indices of all tracks that belong to this file data. */ public List<Index> getAllIndices() { FileData.logger.entering(FileData.class.getCanonicalName(), "getAllIndices()"); List<Index> allIndices = new ArrayList<Index>(); for (TrackData trackData: this.trackData) { allIndices.addAll(trackData.getIndices()); } FileData.logger.exiting(FileData.class.getCanonicalName(), "getAllIndices()", allIndices); return allIndices; }
if (trackData.getNumber() > -1) { builder.append(' ').append(String.format("%1$02d", trackData.getNumber())); if (trackData.getDataType() != null) { builder.append(' ').append(quoteIfNecessary(trackData.getDataType())); addField(builder, "ISRC", childIndentation, trackData.getIsrcCode()); addField(builder, "PERFORMER", childIndentation, trackData.getPerformer()); addField(builder, "TITLE", childIndentation, trackData.getTitle()); addField(builder, "SONGWRITER", childIndentation, trackData.getSongwriter()); addField(builder, "PREGAP", childIndentation, trackData.getPregap()); addField(builder, "POSTGAP", childIndentation, trackData.getPostgap()); if (trackData.getFlags().size() > 0) { serializeFlags(builder, trackData.getFlags(), childIndentation); for (Index index : trackData.getIndices()) { serializeIndex(builder, index, childIndentation);