@Override
  public final List<VoicingComparison> voicingComparisonList(
      VoicedChord previousChord, VoicedChord newChord) {

    List<Voicing> voicingList = qualities.forQuality(newChord.getQuality());

    return strategy.voicingComparisonList(previousChord, newChord, voicingList);
  }
  @Override
  public final List<VoicedChord> voice(VoicedChord startingChord, List<VoicedChord> chordList) {
    List<VoicedChord> result = new ArrayList<VoicedChord>();
    result.add(startingChord);

    VoicedChord previousChord = startingChord;

    for (VoicedChord chord : chordList) {
      VoicedChord voicedChord =
          strategy.voice(previousChord, chord, qualities.getCongruentVoicings(chord.getVoicing()));
      result.add(voicedChord);
      previousChord = voicedChord;
    }

    return result;
  }