]> git.donarmstrong.com Git - lilypond.git/commitdiff
Add option for strictBeatBeaming
authorCarl Sorensen <c_sorensen@byu.edu>
Wed, 18 Jan 2012 20:15:20 +0000 (13:15 -0700)
committerCarl Sorensen <c_sorensen@byu.edu>
Tue, 24 Jan 2012 18:45:21 +0000 (11:45 -0700)
This reverts to the default behavior from 2.14 that places a higher
priority on avoiding beamlets than on beaming to the beat.

At the user's option, beaming can be strictly to the beat.

Documentation/notation/rhythms.itely
Documentation/snippets/new/strict-beat-beaming.ly [new file with mode: 0644]
Documentation/snippets/strict-beat-beaming.ly [new file with mode: 0644]
input/regression/beamlet-point-toward-beat.ly
lily/beaming-pattern.cc
lily/include/beaming-pattern.hh
scm/define-context-properties.scm

index 624ebacdf10ce9811d440162b5f9e3045aabe04e..c22f55fb52356cc7c0133af219eb2a3c0ce6fb86 100644 (file)
@@ -2189,6 +2189,11 @@ The default beaming rules can be found in
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {subdividing-beams.ly}
 
+@cindex beamlets, orienting
+
+@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
+{strict-beat-beaming.ly}
+
 @cindex measure groupings
 @cindex beats, grouping
 @cindex grouping beats
diff --git a/Documentation/snippets/new/strict-beat-beaming.ly b/Documentation/snippets/new/strict-beat-beaming.ly
new file mode 100644 (file)
index 0000000..fea2dd0
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.15.27"
+
+\header {
+  texidoc = "
+Beamlets can be set to point in the direction of the beat to which they
+belong.  The first beam avoids sticking out flags (the default);
+the second beam strictly follows the beat.
+"
+
+  doctitle = "Strict beat beaming"
+
+  lsrtags = "rhythms"
+}
+
+
+\relative c'' {
+  \time 6/8
+  a8. a16 a a
+  \set strictBeatBeaming = ##t
+  a8. a16 a a
+}
diff --git a/Documentation/snippets/strict-beat-beaming.ly b/Documentation/snippets/strict-beat-beaming.ly
new file mode 100644 (file)
index 0000000..c0e4608
--- /dev/null
@@ -0,0 +1,29 @@
+% DO NOT EDIT this file manually; it is automatically
+% generated from Documentation/snippets/new
+% Make any changes in Documentation/snippets/new/
+% and then run scripts/auxiliar/makelsr.py
+%
+% This file is in the public domain.
+%% Note: this file works from version 2.15.27
+\version "2.15.27"
+
+\header {
+  texidoc = "
+Beamlets can be set to point in the direction of the beat to which they
+belong.  The first beam avoids sticking out flags (the default);
+the second beam strictly follows the beat.
+"
+
+  doctitle = "Strict beat beaming"
+
+  lsrtags = "rhythms"
+} % begin verbatim
+
+
+
+\relative c'' {
+  \time 6/8
+  a8. a16 a a
+  \set strictBeatBeaming = ##t
+  a8. a16 a a
+}
index b1a761fdbbb035fc54de6a95ba2bc14da0b33c06..fa0c15a360fe16ad26b26c64efb0ea0146670fe0 100644 (file)
@@ -1,14 +1,17 @@
-\version "2.15.20"
+\version "2.15.27"
 
 \header {
   texidoc = "
-Beamlets should point in the direction of the beat to which they
-belong.
+Beamlets can be set to point in the direction of the beat to which they
+belong.  The first beam avoids sticking out flags (the default);
+the second beam strictly follows the beat.
 "
 }
 
 
-\relative c' {
-b16. b32 b32 b16.
-b16.[ b32 b   b b b16.]
+\relative c'' {
+  \time 6/8
+  a8. a16 a a
+  \set strictBeatBeaming = ##t
+  a8. a16 a a
 }
index 2db441ef690d347f4436efeec704e0a6e2cdc2a5..cc569c7c73b696aad614dd2d7344f182803e3dac 100644 (file)
@@ -99,6 +99,15 @@ Beaming_pattern::flag_direction (Beaming_options const &options, vsize i) const
 
   if (count <= left_count && count <= right_count)
     return CENTER;
+  else if (!options.strict_beat_beaming_)
+    {
+      // Try to avoid sticking-out flags as much as possible by pointing
+      // my flags at the neighbor with the most flags.
+      if (right_count > left_count)
+        return RIGHT;
+      else if (left_count > right_count)
+        return LEFT;
+    }
 
   // If all else fails, point the beamlet away from the important moment.
   return (infos_[i].rhythmic_importance_ < infos_[i + 1].rhythmic_importance_)
@@ -174,8 +183,8 @@ update_tuplet (Moment start_moment, Rational factor, Moment *tuplet_start_moment
   int tuplet_number = (int) factor.den ();
   if ((tuplet_number > 1) && (tuplet_start_moment->num () < 0))
     *tuplet_start_moment = start_moment;
-  else if (tuplet_number == 1) 
-    *tuplet_start_moment = Moment (-1, 1); 
+  else if (tuplet_number == 1)
+    *tuplet_start_moment = Moment (-1, 1);
 }
 
 
@@ -270,8 +279,8 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options)
           // important.  For tuplets, we need to make sure that we use
           // the fraction of the tuplet, instead of the fraction of
           // a beat.
-          Moment ratio = (tuplet_number == 1) 
-                           ? dt / options.base_moment_ 
+          Moment ratio = (tuplet_number == 1)
+                           ? dt / options.base_moment_
                            : tuplet_dt / Moment (1, 8)  / tuplet_moment;
           if (infos_[i].rhythmic_importance_ >= 0)
             infos_[i].rhythmic_importance_ = (int) ratio.den ();
@@ -389,6 +398,7 @@ Beaming_options::from_context (Context *context)
 {
   grouping_ = context->get_property ("beatStructure");
   subdivide_beams_ = to_boolean (context->get_property ("subdivideBeams"));
+  strict_beat_beaming_ = to_boolean (context->get_property ("strictBeatBeaming"));
   base_moment_ = robust_scm2moment (context->get_property ("baseMoment"),
                                     Moment (1, 4));
   measure_length_ = robust_scm2moment (context->get_property ("measureLength"),
@@ -399,4 +409,5 @@ Beaming_options::Beaming_options ()
 {
   grouping_ = SCM_EOL;
   subdivide_beams_ = false;
+  strict_beat_beaming_ = false;
 }
index 11265e973657bcfb0ba57d83195c3d9551db2129..704c8f070c71a0417eefd71d52903c452370772e 100644 (file)
@@ -28,6 +28,7 @@ struct Beaming_options
 {
   SCM grouping_;
   bool subdivide_beams_;
+  bool strict_beat_beaming_;
   Moment base_moment_;
   Moment measure_length_;
 
index 835539ef5b2b08bf10631a0809bfe7f10dcc9bf4..43079859c638b83acba705060a6eba9413a85d2f 100644 (file)
@@ -476,6 +476,8 @@ verse.  Use in @code{Lyrics} context.")
 on the left side of the next note.  Overrides automatic beaming.  The
 value is only used once, and then it is erased.")
      (stemRightBeamCount ,integer? "See @code{stemLeftBeamCount}.")
+     (strictBeatBeaming ,boolean? "Should partial beams reflect the
+beat structure even if it causes flags to hang out?")
      (stringNumberOrientations ,list? "See
 @code{fingeringOrientations}.")
      (stringOneTopmost ,boolean? "Whether the first string is