From 0382ed88b53cb24e76a1935e18df32cc87174428 Mon Sep 17 00:00:00 2001 From: Carl Sorensen Date: Thu, 7 May 2015 11:39:33 -0600 Subject: [PATCH] Adjust beam subdivision to only occur at baseMoment --- .../snippets/new/subdividing-beams.ly | 40 +++++++++++++++++++ Documentation/snippets/subdividing-beams.ly | 18 +++++---- lily/beaming-pattern.cc | 5 ++- 3 files changed, 53 insertions(+), 10 deletions(-) create mode 100644 Documentation/snippets/new/subdividing-beams.ly diff --git a/Documentation/snippets/new/subdividing-beams.ly b/Documentation/snippets/new/subdividing-beams.ly new file mode 100644 index 0000000000..5677de1026 --- /dev/null +++ b/Documentation/snippets/new/subdividing-beams.ly @@ -0,0 +1,40 @@ +\version "2.18.0" + +\header { + lsrtags = "rhythms" + + texidoc = " +The beams of consecutive 16th (or shorter) notes are, by default, not +subdivided. That is, the three (or more) beams stretch unbroken over +entire groups of notes. This behavior can be modified to subdivide the +beams into sub-groups by setting the property @code{subdivideBeams}. +When set, multiple beams will be subdivided at intervals defined by the +current value of @code{baseMoment} by reducing the multiple beams to +the number of beams that indicates the length of the sub-group. +Note that @code{baseMoment} +defaults to one over the denominator of the current time signature if +not set explicitly. It must be set to a fraction giving the duration of +the beam sub-group using the @code{ly:make-moment} function, as shown +in this snippet. Also, when @code{baseMoment} is changed, +@code{beatStructure} should also be changed to match the new +@code{baseMoment}: + +" + doctitle = "Subdividing beams" +} % begin verbatim + +\relative c'' { + c32[ c c c c c c c] + \set subdivideBeams = ##t + c32[ c c c c c c c] + + % Set beam sub-group length to an eighth note + \set baseMoment = #(ly:make-moment 1/8) + \set beatStructure = #'(2 2 2 2) + c32[ c c c c c c c] + + % Set beam sub-group length to a sixteenth note + \set baseMoment = #(ly:make-moment 1/16) + \set beatStructure = #'(4 4 4 4) + c32[ c c c c c c c] +} diff --git a/Documentation/snippets/subdividing-beams.ly b/Documentation/snippets/subdividing-beams.ly index 9b94dd3619..bec7e757ea 100644 --- a/Documentation/snippets/subdividing-beams.ly +++ b/Documentation/snippets/subdividing-beams.ly @@ -1,9 +1,10 @@ -%% DO NOT EDIT this file manually; it is automatically -%% generated from LSR http://lsr.di.unimi.it -%% Make any changes in LSR itself, or in Documentation/snippets/new/ , -%% and then run scripts/auxiliar/makelsr.py -%% -%% This file is in the public domain. +% 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.18.0 \version "2.18.0" \header { @@ -16,7 +17,8 @@ entire groups of notes. This behavior can be modified to subdivide the beams into sub-groups by setting the property @code{subdivideBeams}. When set, multiple beams will be subdivided at intervals defined by the current value of @code{baseMoment} by reducing the multiple beams to -just one beam between the sub-groups. Note that @code{baseMoment} +the number of beams that indicates the length of the sub-group. +Note that @code{baseMoment} defaults to one over the denominator of the current time signature if not set explicitly. It must be set to a fraction giving the duration of the beam sub-group using the @code{ly:make-moment} function, as shown @@ -42,4 +44,4 @@ in this snippet. Also, when @code{baseMoment} is changed, \set baseMoment = #(ly:make-moment 1/16) \set beatStructure = #'(4 4 4 4) c32[ c c c c c c c] -} +} % begin verbatim diff --git a/lily/beaming-pattern.cc b/lily/beaming-pattern.cc index 1dcb791a8d..cb8c91dbec 100644 --- a/lily/beaming-pattern.cc +++ b/lily/beaming-pattern.cc @@ -132,6 +132,8 @@ Beaming_pattern::beamify (Beaming_options const &options) if (infos_.size () <= 1) return; + int subdivide_beam_count = intlog2(options.base_moment_.main_part_.den())-2; + unbeam_invisible_stems (); if (infos_[0].start_moment_.grace_part_) @@ -167,9 +169,8 @@ Beaming_pattern::beamify (Beaming_options const &options) if (non_flag_dir) { int importance = infos_[i + 1].rhythmic_importance_; - int start_dur = intlog2(infos_[i+1].start_moment_.main_part_.den()); int count = (importance < 0 && options.subdivide_beams_) - ? max(start_dur,3)-2 // 1/8 note has one beam + ? subdivide_beam_count : min (min (infos_[i].count (non_flag_dir), infos_[i + non_flag_dir].count (-non_flag_dir)), infos_[i - non_flag_dir].count (non_flag_dir)); -- 2.39.2