fromName static method

NotePosition? fromName(
  1. String string
)

Parse a String into a NotePosition. Accepts strings of two or three characters, which must include a note name, an optional sharp or flat symbol, and an octave number.

Sharp symbols are '#' or '♯'. Flat symbols are '♭' or 'b'.

Example strings:

  • F#5
  • C3
  • B♭4

Implementation

static NotePosition? fromName(String string) {
  if (string.length < 2) {
    return null;
  }

  final name = string[0];
  final accidentalSymbol = string.length == 3 ? string[1] : null;
  final octaveString = string.length == 3 ? string[2] : string[1];

  final note = Note.values.firstWhereOrNull((_) => _.name == name);
  final octave = int.tryParse(octaveString);

  if (note == null || octave == null) {
    return null;
  }

  final Accidental accidental;

  if (accidentalSymbol == '#' || accidentalSymbol == '♯') {
    accidental = Accidental.Sharp;
  } else if (accidentalSymbol == '♭' || accidentalSymbol == 'b') {
    accidental = Accidental.Flat;
  } else {
    accidental = Accidental.None;
  }

  return NotePosition(
    note: note,
    octave: octave,
    accidental: accidental,
  );
}