private void transcribeHarmony(Staff staff) {
    transcriber.printString(new HarmonyPart());
    MeasureOfHarmonies measure = new MeasureOfHarmonies();
    Iterator<Event> staffIterator = staff.iterator();
    while (staffIterator.hasNext()) {
      Event event = staffIterator.next();
      if (event instanceof Harmony) {
        measure.add(new HarmonyInfo((Harmony)event));
      } else if (event instanceof EndBar) {
        EndBar endBar = (EndBar)event;

        if (measure.size() > 0) {
          measure.calculateDurations(((EndBar)event).getMoment());
          boolean includeStems = !measure.isEvenRhythm();
          Iterator<HarmonyInfo> iterator = measure.iterator();
          boolean first = true;
          while (iterator.hasNext()) {
            HarmonyInfo current = iterator.next();
            BrailleHarmony chord = new BrailleHarmony(current.getHarmony(),
                                                      (includeStems && iterator.hasNext()),
                                                      current.getDuration());
            if (chord.length() <= transcriber.getRemainingColumns())
              // TODO: FIXME
              transcriber.printString(chord);
            else {
              if (!first) transcriber.printString(new MusicHyphen());
              transcriber.newLine();
              transcriber.printString(chord);
            }
            first = false;
          }
        } else {
          transcriber.printString(new ArtificialWholeRest());
        }
        measure.clear();
        if (!endBar.getEndOfMusic()) transcriber.spaceOrNewLine();
        else transcriber.printString(new DoubleBarSign());
      }
    }
  }