fromFretString static method

Fretting fromFretString(
  1. String fretString, {
  2. required FrettedInstrument instrument,
  3. required Chord chord,
})

Implementation

static Fretting fromFretString(
  String fretString, {
  required FrettedInstrument instrument,
  required Chord chord,
}) {
  if (fretString.length != instrument.stringIndices.length) {
    throw new FormatException(
        "fretString wrong length for $instrument: $fretString");
  }

  final Iterable<String> _fretString = fretString.split('');
  final Iterable<int> _stringIndices = instrument.stringIndices;

  final _positions = IterableZip([_fretString, _stringIndices]);

  final List<FretPosition> positions = _positions
      .map((item) {
        final String char = item[0] as String;
        final int stringIndex = item[1] as int;
        if (char == 'x') return null;
        final fretNumber = char.runes.first - 48;
        if (!(0 <= fretNumber && fretNumber <= 9)) {
          throw new FormatException(
              "Invalid character $char in fretString $fretString");
        }
        final semitones = instrument
            .pitchAt(stringIndex: stringIndex, fretNumber: fretNumber)
            .semitones;
        return new FretPosition(
            stringIndex: stringIndex,
            fretNumber: fretNumber,
            semitones: semitones);
      })
      .whereType<FretPosition>()
      .toList();

  return new Fretting(
      instrument: instrument, chord: chord, positions: positions);
}