load method

void load(
  1. String filepath
)

Implementation

void load(String filepath) async {
  _filepath = filepath;
  _document ??= await rootBundle
      .loadString(filepath)
      .then((value) => MusicXmlDocument.parse(value));

  for (Part part in _document!.parts) {
    for (Measure measure in part.measures) {
      List<ssm.Note> notes = [];
      if (measure.clefSignature?.sign != null) {
        ClefSignature? clefSignature = measure.clefSignature;
        _clef ??= CLEF[(clefSignature?.sign, clefSignature?.line)]!;
      }
      if (measure.keySignature?.mode != null &&
          measure.keySignature?.key != null) {
        String mode = measure.keySignature!.mode;
        int key = measure.keySignature!.key;
        _keySignature ??= mode == "major" ? MAJOR_KEY[key] : MINOR_KEY[key];
      }
      // Need to understand and fix the time beats for a XML Partition

      for (Note note in measure.notes) {
        if (note.pitch != null) {
          _notes.add(note.pitch!.key[0]);
          ssm.Note partitionNote = NOTES[note.pitch!.key.toLowerCase()]!;
          notes.add(partitionNote);
        }
      }
      _measuresNotes[measure.number] = notes;
    }
  }
  if (_clef != null) {
    _measures.add(ssm.Measure([_clef!]));
  }
  if (_keySignature != null) {
    _measures.add(ssm.Measure([_keySignature!]));
  }
  _measuresNotes.forEach((number, measure) =>
      measure.forEach((note) => _measures.add(ssm.Measure([note]))));
  // print(_measuresNotes.values.map((value) => value.map((elem) => elem.pitch?.key).toList()));
  // _measuresNotes
  //     .forEach((number, measure) => _measures.add(ssm.Measure(measure)));
}