package sound;


public class SongReader {


  public static final int BLACK_ORPHEUS[] = {
    8, 4, 3, 1, 1, 12, 3, 8, 8, 4, 3, 1, 1, 11, 3,
    8, 8, 9, 11, 2, 6, 6, 6, 8, 9, 11, 4, 4, 4,
    6, 8, 9, 3, 3, 4, 6, 8, 8, 4, 3,
    1, 1, 12, 3, 8, 8, 2, 1, 11, 11, 9, 8, 1, 6, 6, 8, 9, 11, 4, 4, 6, 8, 1,
    12, 8, 8, 12, 3, 1, 8, 1, 1,
    3, 4, 6, 4, 3, 1, 3, 4, 6, 4, 3, 1, 3, 4, 6, 4, 3, 1, 11
  };

  public PetriNodes buildMarkov(int events[], int order) {
    PetriNodes pn = new PetriNodes();
    for (int i = 0; i < events.length; i++) {
      StringBuffer sb = new StringBuffer();
      for (int j = 0; j < order; j++) {
        int eventIndex = i + j;
        if (eventIndex >= events.length) continue;
        sb.append(events[eventIndex] + ":");
      }
      pn.add(new PetriNode(sb.toString()));
    }
    return pn;
  }

  public static final int BLACK_ORPHEUS_NOTES[] =
      Utils.transpose(BLACK_ORPHEUS, 64);
  private static int i;

  public static int getNextNote() {
    return BLACK_ORPHEUS_NOTES[i++ % BLACK_ORPHEUS_NOTES.length];
  }

  public static PetriNodes initMarkov(int order) {
    SongReader sr = new SongReader();
    PetriNodes pn = sr.buildMarkov(sr.BLACK_ORPHEUS_NOTES, order);
    pn.init();
    return pn;
  }

  public static void main(String args[]) {
    PetriNodes pn = initMarkov(3);
    for (int i = 0; i < 9; i++)
      (pn.getNode(i)).play();
  }


}