LSR: Update.
[lilypond.git] / input / lsr / transposing-pitches-with-minimum-accidentals-smart-transpose.ly
blob9570e38e4c003dd6036e0a2aba3ebf815f11f3a3
1 %% Do not edit this file; it is auto-generated from input/new
2 %% This file is in the public domain.
3 %% Note: this file works from version 2.12.0
4 \version "2.13.1"
5 \header {
6 doctitlees = "Transportar música con el menor número de alteraciones"
7 texidoces = "
8 Este ejemplo utiliza código de Scheme para forzar las
9 modificaciones enarmónicas de las notas, y así tener el menor
10 número de alteraciones accidentales. En este caso se aplican las
11 siguientes reglas:
13 @itemize
14 @item
15 Se quitan las dobles alteraciones
17 @item
18 Si sostenido -> Do
20 @item
21 Mi sistenido -> Fa
23 @item
24 Do bemol -> Si
26 @item
27 Fa bemol -> Mi
29 @end itemize
31 De esta forma se selecciona el mayor número de notas enarmónicas
32 naturales.
36 doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
38 texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
39 Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl
40 an Versetzungszeichen ausgegeben wird. In diesem Fall gelten die
41 folgenden Regeln:
43 @itemize
44 @item
45 Doppelte Versetzungszeichen sollen entfernt werden
47 @item
48 His -> C
50 @item
51 Eis -> F
53 @item
54 Ces -> B
56 @item
57 Fes -> E
59 @end itemize
61 Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische
62 Variante gewählt.
66 lsrtags = "pitches"
67 texidoc = "This example uses some Scheme code to enforce enharmonic
68 modifications for notes in order to have the minimum number of
69 accidentals. In this case, the following rules apply:
71 @itemize
72 @item
73 Double accidentals should be removed
75 @item
76 B sharp -> C
78 @item
79 E sharp -> F
81 @item
82 C flat -> B
84 @item
85 F flat -> E
87 @end itemize
89 In this manner, the most natural enharmonic notes are chosen.
91 doctitle = "Transposing music with minimum accidentals"
92 } % begin verbatim
95 #(define (naturalize-pitch p)
96 (let* ((o (ly:pitch-octave p))
97 (a (* 4 (ly:pitch-alteration p)))
98 ; alteration, a, in quarter tone steps,
99 ; for historical reasons
100 (n (ly:pitch-notename p)))
101 (cond
102 ((and (> a 1) (or (eq? n 6) (eq? n 2)))
103 (set! a (- a 2))
104 (set! n (+ n 1)))
105 ((and (< a -1) (or (eq? n 0) (eq? n 3)))
106 (set! a (+ a 2))
107 (set! n (- n 1))))
108 (cond
109 ((> a 2) (set! a (- a 4)) (set! n (+ n 1)))
110 ((< a -2) (set! a (+ a 4)) (set! n (- n 1))))
111 (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))
112 (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))
113 (ly:make-pitch o n (/ a 4))))
115 #(define (naturalize music)
116 (let* ((es (ly:music-property music 'elements))
117 (e (ly:music-property music 'element))
118 (p (ly:music-property music 'pitch)))
119 (if (pair? es)
120 (ly:music-set-property!
121 music 'elements
122 (map (lambda (x) (naturalize x)) es)))
123 (if (ly:music? e)
124 (ly:music-set-property!
125 music 'element
126 (naturalize e)))
127 (if (ly:pitch? p)
128 (begin
129 (set! p (naturalize-pitch p))
130 (ly:music-set-property! music 'pitch p)))
131 music))
133 naturalizeMusic =
134 #(define-music-function (parser location m)
135 (ly:music?)
136 (naturalize m))
138 music = \relative c' { c4 d e g }
140 \score {
141 \new Staff {
142 \transpose c ais { \music }
143 \naturalizeMusic \transpose c ais { \music }
144 \transpose c deses { \music }
145 \naturalizeMusic \transpose c deses { \music }
147 \layout { }