X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=input%2Ftest%2Fsmart-transpose.ly;h=d8fdd1edaf67f0fd7443c05311444ad6b5ecf60d;hb=3684e949054183e4a31e17f5e7ab0bf30da0123e;hp=7142bf31f11e12299c4269a400cead8a4a0bcc25;hpb=95e7eaeeffd28d3a32b3e32578e257197248456b;p=lilypond.git diff --git a/input/test/smart-transpose.ly b/input/test/smart-transpose.ly index 7142bf31f1..d8fdd1edaf 100644 --- a/input/test/smart-transpose.ly +++ b/input/test/smart-transpose.ly @@ -1,63 +1,66 @@ -\version "1.5.68" + +\version "2.2.0" \header { -texidoc=" -@example - Here's a copy of my feature request : -@quotation - Your task, if you accept it is to implement a \smarttranspose - command> that would translate such oddities into more natural - notations. Double accidentals should be removed, as well as E-sharp - (-> F), bC (-> B), bF (-> E), B-sharp (-> C). -@end quotation - -You mean like this. (Sorry 'bout the nuked indentation.) - -Modified to use the standard transpose mechanism. The question is -how useful these enharmonic modifications are. Mats B. -@end example +texidoc="@cindex Smart Transpose + +There is a way to enforce enharmonic modifications for notes in order +to have the minimum number of accidentals. In that case, ``Double +accidentals should be removed, as well as E-sharp (-> F), bC (-> B), +bF (-> E), B-sharp (-> C).'', as proposed by a request for a new feature. +In that manner, the most natural enharmonic notes are chosen in this example. + " } - -#(define (unhair-pitch p) - (let* ((o (pitch-octave p)) - (a (pitch-alteration p)) - (n (pitch-notename p))) +% +% Modified to use the standard transpose mechanism. The question is +% how useful these enharmonic modifications are. Mats B. +% +% Why not to have a function that minimizes the number of accidentals? -HJJ +% Works also for quarter tones. -HJJ +% + +#(define (naturalise-pitch p) + (let* ((o (ly:pitch-octave p)) + (a (ly:pitch-alteration p)) + (n (ly:pitch-notename p))) (cond - ((and (> a 0) (or (eq? n 6) (eq? n 2))) - (set! a (- a 1)) (set! n (+ n 1))) - ((and (< a 0) (or (eq? n 0) (eq? n 3))) - (set! a (+ a 1)) (set! n (- n 1)))) + ((and (> a 1) (or (eq? n 6) (eq? n 2))) + (set! a (- a 2)) + (set! n (+ n 1))) + ((and (< a -1) (or (eq? n 0) (eq? n 3))) + (set! a (+ a 2)) + (set! n (- n 1)))) (cond - ((eq? a 2) (set! a 0) (set! n (+ n 1))) - ((eq? a -2) (set! a 0) (set! n (- n 1)))) + ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) + ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7)))) - (make-pitch o n a))) + (ly:make-pitch o n a))) -#(define (simplify music) - (let* ((es (ly-get-mus-property music 'elements)) - (e (ly-get-mus-property music 'element)) - (p (ly-get-mus-property music 'pitch))) +#(define (naturalise music) + (let* ((es (ly:music-property music 'elements)) + (e (ly:music-property music 'element)) + (p (ly:music-property music 'pitch))) (if (pair? es) - (ly-set-mus-property! + (ly:music-set-property! music 'elements - (map (lambda (x) (simplify x)) es))) + (map (lambda (x) (naturalise x)) es))) - (if (music? e) - (ly-set-mus-property! + (if (ly:music? e) + (ly:music-set-property! music 'element - (simplify e))) + (naturalise e))) - (if (pitch? p) + (if (ly:pitch? p) (begin - (set! p (unhair-pitch p)) - (ly-set-mus-property! music 'pitch p))) + (set! p (naturalise-pitch p)) + (ly:music-set-property! music 'pitch p))) music)) @@ -65,9 +68,12 @@ music = \notes \relative c' { c4 d e f g a b c } \score { \notes \context Staff { - \transpose ais' \music - \apply #simplify \transpose ais' \music + \transpose c ais \music + \apply #naturalise \transpose c ais \music + \transpose c deses \music + \apply #naturalise \transpose c deses \music } - \paper { linewidth = -1. } + \paper { raggedright = ##t} } +