/**
  * (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;
 }
Ejemplo n.º 3
0
 /**
  * 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();
 }
Ejemplo n.º 4
0
 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;
  }