A.5 MeasureWeighter Klassenreferenz 237 { // alle Gewichte auf 0 setzen fill (v_weights.begin(), v_weights.end(), 0); // Gewichte berechnen for (Rational att = time_sig()−beat_dist(); att ≥ 0; att−=beat_dist()) for (int i=0; i < num_levels(); i++) if ( level ( i ). includes_time(att)) v_weights[(att/beat_dist()).as_int()] += level(i ).weight(); } void rebuild (Rational bd) [virtual] Konstruiert eine neue Taktmetrik aufgrund einer neuen Rastergröße. Betrug die ursprüngliche Distanz zwischen zwei Rasterpunkten beispielsweise 1/8, so werden von dem Gitter maximal die Achtelnoten erfaßt, kleinere Notenwerte fallen jedoch durch das Raster. Aus diesem Grund müssen die Maschen in diesen Fällen enger gezogen werden. Die Berechnung der Level wird im Abschnitt 4.1 dieser Arbeit genauer beschrieben. Parameter: bd die neue Pulsdistanz des minimalen metrischen Levels Erneute Implementation von MeasureMetric (S. 233). { MeasureMetric::rebuild(bd); // Taktmetrik neu aufbauen v_weights.resize((time_sig()/bd).as_int()); // Anzahl der Gewichte ändern local_rebuild(bd); // Gewichte neu berechnen } int weight (int n) const Liefert das Gewicht des angegebenen Rasterpunktes zurück. Die Punkte des Pulsrasters können der Reihe nach durchnumeriert werden, wobei die Numerierung mit dem ersten Rasterpunkt im Takt bei 0 beginnt. Parameter: n die Nummer des Rasterpunktes Rückgabe: das relative metrische Gewicht des Rasterpunktes { assert (n ≥ 0 && n < num_weights()); return v_weights[n]; }