MusicXmlDocument.fromXml constructor

MusicXmlDocument.fromXml(
  1. 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);
}