X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fauto-beam.scm;h=14e0209675d02c1b220745d39c14c46271625b2b;hb=ff7d82711b47d3d31f26e1e6fc012c4055a20059;hp=3cb350867b18265f1f240f2527bd28d1961e30f4;hpb=d61cf3bbdb1c6670a127ba3baddf2f04d3e34fd3;p=lilypond.git diff --git a/scm/auto-beam.scm b/scm/auto-beam.scm index 3cb350867b..14e0209675 100644 --- a/scm/auto-beam.scm +++ b/scm/auto-beam.scm @@ -16,9 +16,9 @@ ;;;; along with LilyPond. If not, see . ;; Determine whether an auto beam should be extended to the right -;; of the current stem. We start anywhere except on the last note -;; of a beat. We end according to the follwing rules, in order -;; of decreasing priority: +;; of the current stem. We start anywhere, except mid-measure in +;; 3/4 time. We end according to the follwing rules, in order of +;; decreasing priority: ;; ;; 1. end ;; 2. end @@ -50,13 +50,13 @@ (ending-moments (cdr group-list) new-start base-moment))))) (define (larger-setting test-beam sorted-alist) - (if (null? sorted-alist) - '() - (let* ((first-key (caar sorted-alist)) - (first-moment (fraction->moment first-key))) - (if (moment<=? test-beam first-moment) - (car sorted-alist) - (larger-setting test-beam (cdr sorted-alist)))))) + (if (null? sorted-alist) + '() + (let* ((first-key (caar sorted-alist)) + (first-moment (fraction->moment first-key))) + (if (moment<=? test-beam first-moment) + (car sorted-alist) + (larger-setting test-beam (cdr sorted-alist)))))) (define (beat-end? moment beat-structure) (pair? (member moment beat-structure))) ;; member returns a list if found, not #t @@ -71,7 +71,7 @@ (let* ((base-moment (get 'baseMoment (ly:make-moment 1 4))) (measure-length (get 'measureLength (ly:make-moment 1 1))) (time-signature-fraction - (get 'timeSignatureFraction '(4 . 4))) + (get 'timeSignatureFraction '(4 . 4))) (beat-structure (get 'beatStructure '(1 1 1 1))) (beat-endings (ending-moments beat-structure 0 base-moment)) (exceptions (sort (assoc-get 'end @@ -79,10 +79,11 @@ '()) beamingfraction test-beam)) (non-grace (ly:make-moment - (ly:moment-main-numerator measure-pos) - (ly:moment-main-denominator measure-pos))) + (ly:moment-main-numerator measure-pos) + (ly:moment-main-denominator measure-pos))) (pos (if (ly:momentmoment default-beat-length) test-beam)) (exception-moments (ending-moments - exception-grouping 0 grouping-moment))) + exception-grouping 0 grouping-moment))) - (if (= dir START) - ;; Start rules - (or (not (equal? time-signature-fraction '(3 . 4))) ;; start anywhere if not 3/4 - (= (ly:moment-main-numerator pos) 0) ;; start at beginning of measure - (not (null? exception-grouping)) ;; don't use special rules if exception - (beat-end? pos beat-endings) ;; are we at start of beat? - (and (not (equal? test-beam base-moment)) ;; is beat split? - (not (beat-end? (ly:moment-add pos test-beam) - beat-endings)))) ;; will this note end the beat - ;; End rules + (if (= dir START) + ;; Start rules -- #t if beam is allowed to start + (or beam-half-measure ;; Start anywhere, but option for mid-measure + (not (equal? (ly:moment-add pos pos) measure-length)) + (not (= 3 (car time-signature-fraction))) ;; in triple meter + (not (= (cdr type) ;; when the beamed note is 1/6 of a measure + (* 2 (cdr time-signature-fraction))))) + ;; End rules -- #t if beam is required to end (or (= (ly:moment-main-numerator pos) 0) ;; end at measure beginning (if (null? exception-grouping) (beat-end? pos beat-endings) ;; no exception, so check beat ending (member pos exception-moments))))))) ;; check exception rule -