load method
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)));
}