234 Dokumentation des Programmoduls RhythmClarifier { delete_levels (); r_beat_dist = bd; assert (c_time_sig % bd == 0); int num_beats = (c_time_sig / bd).as_int(); // Anzahl der Pulse mit Distanz ’bd’ PrimeFactors pf(num_beats); // Primfaktorzerlegung der Pulsanzahl bool is_ternary = false; // aktueller Level ist binär while (pf.count() > 0) { l_levels .push_back(new MetricLevel(bd, is_ternary)); is_ternary = false; // Ermittlung des nächsten relevanten Primfaktors int prime = 3; if (pf .max() > 3) prime = pf.max(); else if (pf .max() == 3 && (!pf.contains(2) || c_time_sig.denom() == bd.denom() || !is_pow2(bd.denom()))) is_ternary = num_beats/3 > 1 && c_time_sig.denom() == bd.denom(); else prime = 2; bd ∗= prime; // Pulsdistanz des nächsten Levels num_beats /= prime; // Pulsanzahl pro Takt im nächsten Level pf.remove(prime); // aktueller Primfaktor wird nicht mehr benötigt } // größten metr. Level , mit Pulsdistanz eines gesamten Taktes hinzufügen l_levels .push_back(new MetricLevel(c_time_sig, false)); }