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