fromFretString static method
Fretting
fromFretString(
- String fretString, {
- required FrettedInstrument instrument,
- 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);
}