X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fautochange.scm;h=5810f3292af1e8c3d227bd44e3629eecf54697b8;hb=e6e59e19a164f0d3af53b0bde3798940de162d66;hp=3e1d4b9775d146a8e2b09e4dda748814a4a2e484;hpb=578ae1fcca02ea107f58aea50f823c0c688d9eba;p=lilypond.git diff --git a/scm/autochange.scm b/scm/autochange.scm index 3e1d4b9775..5810f3292a 100644 --- a/scm/autochange.scm +++ b/scm/autochange.scm @@ -1,9 +1,25 @@ - +;;;; This file is part of LilyPond, the GNU music typesetter. +;;;; +;;;; Copyright (C) 2000--2015 Han-Wen Nienhuys +;;;; Jan Nieuwenhuizen +;;;; +;;;; LilyPond is free software: you can redistribute it and/or modify +;;;; it under the terms of the GNU General Public License as published by +;;;; the Free Software Foundation, either version 3 of the License, or +;;;; (at your option) any later version. +;;;; +;;;; LilyPond is distributed in the hope that it will be useful, +;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;;;; GNU General Public License for more details. +;;;; +;;;; You should have received a copy of the GNU General Public License +;;;; along with LilyPond. If not, see . ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; autochange.scm - fairly related to part combining. -(define-public (make-autochange-music music) +(define-public (make-autochange-music ref-pitch music) (define (generate-split-list change-moment prev-dir event-list acc) (if (null? event-list) acc @@ -16,7 +32,10 @@ (pitch (if (pair? notes) (ly:event-property (car notes) 'pitch) #f)) - (dir (if pitch (sign (ly:pitch-steps pitch)) 0))) + (dir (if pitch + (sign + (- (ly:pitch-steps pitch) (ly:pitch-steps ref-pitch))) + 0))) ;; tail recursive. (if (and (not (= dir 0)) (not (= dir prev-dir))) @@ -24,7 +43,6 @@ dir (cdr event-list) (cons (cons - (if change-moment change-moment now) @@ -36,8 +54,9 @@ (let* ((m (make-music 'AutoChangeMusic)) (m1 (context-spec-music (make-non-relative-music music) 'Voice "")) - (context-list (recording-group-emulate m1 - (ly:parser-lookup 'partCombineListener))) + (context-list + (recording-group-emulate m1 + (ly:parser-lookup 'partCombineListener))) (rev (reverse! (cdar context-list))) (split (reverse! (generate-split-list #f