chordFrets function

Set<FretPosition> chordFrets(
  1. Chord chord,
  2. FrettedInstrument instrument,
  3. int highestFret
)

Implementation

Set<FretPosition> chordFrets(
    Chord chord, FrettedInstrument instrument, int highestFret) {
  final positions = new Set<FretPosition>();
  final semitoneSet =
      chord.pitches.map((pitch) => pitch.semitones % 12).toSet();
  eachWithIndex(instrument.stringPitches, (Pitch pitch, int stringIndex) {
    for (var fretNumber = 0; fretNumber <= highestFret; fretNumber++) {
      final semitones = instrument
          .pitchAt(stringIndex: stringIndex, fretNumber: fretNumber)
          .semitones;
      if (semitoneSet.contains(semitones % 12)) {
        final position = new FretPosition(
            stringIndex: stringIndex,
            fretNumber: fretNumber,
            semitones: semitones);
        positions.add(position);
      }
    }
  });
  return positions;
}