@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
--- /dev/null
+\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
+}
--- /dev/null
+% 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
+}
-\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
}
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_)
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);
}
// 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 ();
{
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"),
{
grouping_ = SCM_EOL;
subdivide_beams_ = false;
+ strict_beat_beaming_ = false;
}
{
SCM grouping_;
bool subdivide_beams_;
+ bool strict_beat_beaming_;
Moment base_moment_;
Moment measure_length_;
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