currentMusicalValue property

double get currentMusicalValue

calculateTestes the total current rhythmic value of elements in the measure.

Implementation

double get currentMusicalValue {
  double total = 0.0;
  for (final element in elements) {
    if (element is Note) {
      total += element.duration.realValue;
    } else if (element is Rest) {
      total += element.duration.realValue;
    } else if (element.runtimeType.toString() == 'Chord') {
      // Use reflection to avoid circular imports
      final dynamic chord = element;
      if (chord.duration != null) {
        total += chord.duration.realValue;
      }
    } else if (element.runtimeType.toString() == 'Tuplet') {
      // calculateTeste the tuplet value based on its ratio
      final dynamic tuplet = element;
      double tupletValue = 0.0;

      // Sum the duration of all notes in the tuplet
      for (final tupletElement in tuplet.elements) {
        if (tupletElement is Note) {
          tupletValue += tupletElement.duration.realValue;
        } else if (tupletElement.runtimeType.toString() == 'Chord') {
          final dynamic chord = tupletElement;
          if (chord.duration != null) {
            tupletValue += chord.duration.realValue;
          }
        }
      }

      // Apply the tuplet ratio (normalNotes / actualNotes)
      if (tuplet.actualNotes > 0) {
        tupletValue = tupletValue * (tuplet.normalNotes / tuplet.actualNotes);
      }

      total += tupletValue;
    }
  }
  return total;
}