]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/snippets/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Doc: Update LSR.
[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.16"
5
6 \header {
7   lsrtags = "pitches"
8
9 %% Translation of GIT committish: d2119a9e5e951c6ae850322f41444ac98d1ed492
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 %% Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
41   doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
42   texidocde = "Dieses Beispiel benutzt Scheme-Code, um enharmonische
43 Verwechslungen für Noten zu erzwingen, damit nur eine minimale Anzahl
44 an Versetzungszeichen ausgegeben wird.  In diesem Fall gelten die
45 folgenden Regeln:
46
47 @itemize
48 @item
49 Doppelte Versetzungszeichen sollen entfernt werden
50
51 @item
52 His -> C
53
54 @item
55 Eis -> F
56
57 @item
58 Ces -> B
59
60 @item
61 Fes -> E
62
63 @end itemize
64
65 Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische
66 Variante gewählt.
67 "
68
69 %% Translation of GIT committish: 58a29969da425eaf424946f4119e601545fb7a7e
70   texidocfr = "
71 Cet exemple, grâce à un peu de code Scheme, donne la priorité aux
72 enharmoniques  afin de limiter le nombre d'altérations supplémentaires.  
73 La règle appliquable est :
74
75 @itemize
76 @item
77 Les altérations doubles sont supprimées
78
79 @item
80 Si dièse -> Do
81
82 @item
83 Mi dièse -> Fa
84
85 @item
86 Do bémol -> Si
87
88 @item
89 Fa bémol -> Mi
90
91 @end itemize
92
93 Cette façon de procéder aboutit à plus d'enharmoniques naturelles.
94
95 "
96
97   doctitlefr = "Transposition et réduction du nombrer d'altérations accidentelles"
98
99   texidoc = "
100 This example uses some Scheme code to enforce enharmonic modifications
101 for notes in order to have the minimum number of accidentals.  In this
102 case, the following rules apply:
103
104 Double accidentals should be removed
105
106
107 B sharp -> C
108
109
110 E sharp -> F
111
112
113 C flat -> B
114
115
116 F flat -> E
117
118
119 In this manner, the most natural enharmonic notes are chosen.
120
121 "
122   doctitle = "Transposing pitches with minimum accidentals (\"Smart\" transpose)"
123 } % begin verbatim
124
125 #(define (naturalize-pitch p)
126    (let ((o (ly:pitch-octave p))
127          (a (* 4 (ly:pitch-alteration p)))
128          ;; alteration, a, in quarter tone steps,
129          ;; for historical reasons
130          (n (ly:pitch-notename p)))
131      (cond
132       ((and (> a 1) (or (eq? n 6) (eq? n 2)))
133        (set! a (- a 2))
134        (set! n (+ n 1)))
135       ((and (< a -1) (or (eq? n 0) (eq? n 3)))
136        (set! a (+ a 2))
137        (set! n (- n 1))))
138      (cond
139       ((> a 2) (set! a (- a 4)) (set! n (+ n 1)))
140       ((< a -2) (set! a (+ a 4)) (set! n (- n 1))))
141      (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7))))
142      (if (> n 6) (begin (set! o (+ o 1)) (set! n (- n 7))))
143      (ly:make-pitch o n (/ a 4))))
144
145 #(define (naturalize music)
146    (let ((es (ly:music-property music 'elements))
147          (e (ly:music-property music 'element))
148          (p (ly:music-property music 'pitch)))
149      (if (pair? es)
150          (ly:music-set-property!
151           music 'elements
152           (map (lambda (x) (naturalize x)) es)))
153      (if (ly:music? e)
154          (ly:music-set-property!
155           music 'element
156           (naturalize e)))
157      (if (ly:pitch? p)
158          (begin
159            (set! p (naturalize-pitch p))
160            (ly:music-set-property! music 'pitch p)))
161      music))
162
163 naturalizeMusic =
164 #(define-music-function (parser location m)
165    (ly:music?)
166    (naturalize m))
167
168 music = \relative c' { c4 d e g }
169
170 \score {
171   \new Staff {
172     \transpose c ais { \music }
173     \naturalizeMusic \transpose c ais { \music }
174     \transpose c deses { \music }
175     \naturalizeMusic \transpose c deses { \music }
176   }
177   \layout { }
178 }
179