/** * (non-Javadoc). * * @return the string * @see dj.DigitalDJ#toXML() */ @Override public String toXML() { StringBuilder sb = new StringBuilder(2000); sb.append(toXMLGeneralParameters()); sb.append("\t<" + Const.XML_DJ_TRANSITIONS + ">\n"); for (Transition transition : transitions) { sb.append( "\t\t<" + Const.XML_DJ_TRANSITION + " " + Const.XML_DJ_FROM + "='" + transition.getFrom().toXML() + "' " + Const.XML_DJ_TO + "='" + transition.getTo().toXML() + "' " + Const.XML_DJ_NUMBER + "='" + transition.getNbTracks() + "'/>\n"); } sb.append("\t</" + Const.XML_DJ_TRANSITIONS + ">\n"); sb.append("</" + Const.XML_DJ_DJ + ">\n"); return sb.toString(); }
/** * Returns a map ambience -> set of files. * * @param global initial set of files to consider * @return a map ambience -> set of files */ @SuppressWarnings("unchecked") private Map<Ambience, List<File>> getAmbienceFilesList(List<File> global) { // Create a map ambience -> set of files Map<Ambience, List<File>> hmAmbienceFiles = new HashMap<Ambience, List<File>>(5); // For performance, we find unique ambiences in from and to transitions Set<Ambience> ambiences = new HashSet<Ambience>(5); for (Transition tr : transitions) { ambiences.add(tr.getFrom()); ambiences.add(tr.getTo()); } // Fill null key hmAmbienceFiles.put(null, (List<File>) ((ArrayList<File>) global).clone()); // Fill all ambiences for (Ambience ambience : ambiences) { List<File> all = (List<File>) ((ArrayList<File>) global).clone(); CollectionUtils.filter(all, new JajukPredicates.AmbiencePredicate(ambience)); hmAmbienceFiles.put(ambience, all); } return hmAmbienceFiles; }
/** * Translates the LTS object to its TGF representation. * * @return The TGF content. */ public String translate() { StringBuffer sb = new StringBuffer(""); Iterator<State<S, T>> si = lts.getStates(); while (si.hasNext()) { State s = si.next(); sb.append(s.getId()); sb.append(" "); sb.append(s.getValue().toString()); sb.append("\n"); } sb.append("#\n"); Iterator<Transition<T, S>> ti = lts.getTransitions(); while (ti.hasNext()) { Transition t = ti.next(); sb.append(t.getFrom().getId()); sb.append(" "); sb.append(t.getTo().getId()); sb.append(" "); sb.append(t.getValue().toString()); sb.append("\n"); } return sb.toString(); }
public Transition(Transition orig) { this.from = new String(orig.getFrom()); this.to = new String(orig.getTo()); this.event = new String(orig.getEvent()); }
/* (non-Javadoc) * @see org.jajuk.services.dj.DigitalDJ#generatePlaylist() */ @Override public List<File> generatePlaylist() { List<File> out = new ArrayList<File>(500); // get a global shuffle selection List<File> global = FileManager.getInstance().getGlobalShufflePlaylist(); // Select by rate if needed filterFilesByRate(global); // None element, leave if (global.size() == 0) { return out; } // Build a ambience -> files map Map<Ambience, List<File>> hmAmbienceFiles = getAmbienceFilesList(global); // compute number of items to add int items = Math.min(global.size(), Const.NB_TRACKS_ON_ACTION); if (!bUnicity && items < Const.MIN_TRACKS_NUMBER_WITHOUT_UNICITY) { // under a limit, if collection is too small and no unicity, use // several times the same files items = Const.MIN_TRACKS_NUMBER_WITHOUT_UNICITY; } // Get first track for (File file : global) { if (transitions.get(0).getFrom().getGenres().contains(file.getTrack().getGenre())) { out.add(file); // Unicity in selection, remove it from this ambience if (bUnicity) { List<File> files = hmAmbienceFiles.get(getAmbience(file.getTrack().getGenre())); files.remove(file); } items--; break; } } // none matching track? return if (out.size() == 0) { return out; } // initialize current ambience with first track ambience (can be null for // unsorted tracks) Ambience currentAmbience = getAmbience(out.get(0).getTrack().getGenre()); // start transition applying while (items > 0) { // A genre can be in only one transition Transition currentTransition = getTransition(currentAmbience); List<File> files = hmAmbienceFiles.get(currentAmbience); int nbTracks = 2; if (currentTransition != null) { nbTracks = currentTransition.getNbTracks(); } // We remove one item as it has already been added through the first track if (out.size() == 1) { nbTracks--; } if (files != null && files.size() >= nbTracks) { for (int i = 0; i < nbTracks && files.size() > 0; i++) { File file = (File) UtilFeatures.getShuffleItem(files); out.add(file); items--; // Unicity in selection, remove it from this ambience if (bUnicity) { files.remove(file); } } } else { // no more tracks for this ambience ? leave // finally ensure that we don't select more than the max number of tracks filterFilesByMaxTrack(out); return out; } if (currentTransition != null) { currentAmbience = currentTransition.getTo(); } else { break; } } // finally ensure that we don't select more than the max number of tracks filterFilesByMaxTrack(out); return out; }