]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
f5595067203d6ca63d524075f277b002aa20658f
[lilypond.git] / Documentation / snippets / transposing-pitches-with-minimum-accidentals-smart-transpose.ly
1 %% Do not edit this file; it is automatically
2 %% generated from LSR http://lsr.dsi.unimi.it
3 %% This file is in the public domain.
4 \version "2.13.39"
5
6 \header {
7   lsrtags = "pitches"
8
9 %% Translation of GIT committish: 5160eccb26cee0bfd802d844233e4a8d795a1e94
10 doctitlees = "Transportar música con el menor número de alteraciones"
11 texidoces = "
12 Este ejemplo utiliza código de Scheme para forzar las
13 modificaciones enarmónicas de las notas, y así tener el menor
14 número de alteraciones accidentales. En este caso se aplican las
15 siguientes reglas:
16
17 @itemize
18 @item
19 Se quitan las dobles alteraciones
20
21 @item
22 Si sostenido -> Do
23
24 @item
25 Mi sistenido -> Fa
26
27 @item
28 Do bemol -> Si
29
30 @item
31 Fa bemol -> Mi
32
33 @end itemize
34
35 De esta forma se selecciona el mayor número de notas enarmónicas
36 naturales.
37
38 "
39
40
41 %% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
42   doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
43   texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
44 Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl
45 an Versetzungszeichen ausgegeben wird.  In diesem Fall gelten die
46 folgenden Regeln:
47
48 @itemize
49 @item
50 Doppelte Versetzungszeichen sollen entfernt werden
51
52 @item
53 His -> C
54
55 @item
56 Eis -> F
57
58 @item
59 Ces -> B
60
61 @item
62 Fes -> E
63
64 @end itemize
65
66 Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische
67 Variante gewählt.
68 "
69
70
71 %% Translation of GIT committish: 4ab2514496ac3d88a9f3121a76f890c97cedcf4e
72   texidocfr = "
73 Cet exemple, grâce à un peu de code Scheme, donne la priorité aux
74 enharmoniques  afin de limiter le nombre d'altérations supplémentaires.
75 La règle appliquable est :
76
77 @itemize
78 @item
79 Les altérations doubles sont supprimées
80
81 @item
82 Si dièse -> Do
83
84 @item
85 Mi dièse -> Fa
86
87 @item
88 Do bémol -> Si
89
90 @item
91 Fa bémol -> Mi
92
93 @end itemize
94
95 Cette façon de procéder aboutit à plus d'enharmoniques naturelles.
96
97 "
98
99   doctitlefr = "Transposition et réduction du nombrer d'altérations accidentelles"
100
101   texidoc = "
102 This example uses some Scheme code to enforce enharmonic modifications
103 for notes in order to have the minimum number of accidentals.  In this
104 case, the following rules apply:
105
106 Double accidentals should be removed
107
108
109 B sharp -> C
110
111
112 E sharp -> F
113
114
115 C flat -> B
116
117
118 F flat -> E
119
120
121 In this manner, the most natural enharmonic notes are chosen.
122
123 "
124   doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)"
125 } % begin verbatim
126
127 #(define (naturalize-pitch p)
128    (let ((o (ly:pitch-octave p))
129          (a (* 4 (ly:pitch-alteration p)))
130          ;; alteration, a, in quarter tone steps,
131          ;; for historical reasons
132          (n (ly:pitch-notename p)))
133      (cond
134       ((and (> a 1) (or (eq? n 6) (eq? n 2)))
135        (set! a (- a 2))
136        (set! n (+ n 1)))
137       ((and (< a -1) (or (eq? n 0) (eq? n 3)))
138        (set! a (+ a 2))
139        (set! n (- n 1))))
140      (cond
141       ((> a 2) (set! a (- a 4)) (set! n (+ n 1)))
142       ((< a -2) (set! a (+ a 4)) (set! n (- n 1))))
143      (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))
144      (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))
145      (ly:make-pitch o n (/ a 4))))
146
147 #(define (naturalize music)
148    (let ((es (ly:music-property music 'elements))
149          (e (ly:music-property music 'element))
150          (p (ly:music-property music 'pitch)))
151      (if (pair? es)
152          (ly:music-set-property!
153           music 'elements
154           (map (lambda (x) (naturalize x)) es)))
155      (if (ly:music? e)
156          (ly:music-set-property!
157           music 'element
158           (naturalize e)))
159      (if (ly:pitch? p)
160          (begin
161            (set! p (naturalize-pitch p))
162            (ly:music-set-property! music 'pitch p)))
163      music))
164
165 naturalizeMusic =
166 #(define-music-function (parser location m)
167    (ly:music?)
168    (naturalize m))
169
170 music = \relative c' { c4 d e g }
171
172 \score {
173   \new Staff {
174     \transpose c ais { \music }
175     \naturalizeMusic \transpose c ais { \music }
176     \transpose c deses { \music }
177     \naturalizeMusic \transpose c deses { \music }
178   }
179   \layout { }
180 }
181