258 Dokumentation des Programmoduls RhythmClarifier void create_beams () Generiert Balkengruppen. Diese Funktion erzeugt auf Grundlage der metrischen Taktverhältnisse sowie der Notenkonstellation geeignete Balkengruppen. Die dem Algorithmus zugrundelie-genden Ideen werden im Haupttext beschrieben. { bool found = false; // noch keine Balkengruppe gefunden int begin = −1, end = −1; // Pos. d. Balkenanfangs und −endes int wmin = 1000; // kleinstes Gewicht innerhalb akt. Balkengruppe for (int i=0; i ≤ v_ev.size(); i++) { int j = i % v_ev.size (); // indirekt für (4) if (! v_ev[j] && i == j) continue; int w = symmetric_weight(j); // Gewicht der akt. Einsatzzeit // handel es sich bei akt . Event um Note mit Fähnchen? if (v_ev[j]→is_note() && v_ev[j]→duration().abs() < Rational(1,4)) { wmin = min(wmin, w); if (begin < 0) // noch kein Balkenanfang? { if (! v_ev[j]→is_tied()) // nur Events ohne Haltebogen... begin = end = j; // ... können potentielle Balkengruppe beginnen } else // falls es schon einen Balkenanfang gibt { // Richtung eventueller Balkenfähnchen (Bf.) setzen // ’<’: Bf. zeigt nach links , ’>’: Bf . zeigt nach rechts if ( j == i) v_ev[end]→set_beam_flag(symmetric_weight(end) < w ? ’<’ : ’>’); if (v_ev[j]→is_tied()) // Haltebogen zur nächsten Note? (5) { found = true; end = j; } else if (w ≥ symmetric_weight(begin)) // (6) found = true; else if (w ≥ wmin+2 && note_weights_less(w, begin, j) > 1) // (7) found = true; else { int g = bigger_note_weight(wmin+1, begin, j); if (g > 0 && note_weights_less(symmetric_weight(g), g, j)) // (8) { found = true; while (−−g ≥ 0 && !v_ev[g] || !v_ev[g]→is_note()); end = g; }