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