MusicXmlDocument.fromXml constructor
MusicXmlDocument.fromXml(
- XmlDocument score
Implementation
factory MusicXmlDocument.fromXml(XmlDocument score) {
// Parse part-list
final scoreParts = <String, ScorePart>{};
score
.findAllElements('part-list')
.map((element) => element.findAllElements('score-part'))
.where((element) => element.isNotEmpty)
.forEach(
(e) => e
.map((element) => ScorePart.parse(element))
.forEach((ScorePart element) => scoreParts[element.id] = element),
);
// Parse parts
final state = MusicXMLParserState();
var totalTimeSecs = 0.0;
final parts = score.findAllElements('part').map((element) {
final part = Part.parse(element, scoreParts, state);
totalTimeSecs = max(totalTimeSecs, state.timePosition);
return part;
}).toList();
// Parse title
var title = 'Unknown Piece';
for (final element in score.findAllElements('movement-title')) {
title = element.innerText;
break;
}
return MusicXmlDocument(title, score, scoreParts, parts, totalTimeSecs);
}