]> git.donarmstrong.com Git - lilypond.git/blob - input/lsr/transposing-pitches-with-minimum-accidentals-smart-transpose.ly
Merge branch 'lilypond/translation' of ssh://jomand@git.sv.gnu.org/srv/git/lilypond
[lilypond.git] / input / lsr / transposing-pitches-with-minimum-accidentals-smart-transpose.ly
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:
12
13 @itemize
14 @item
15 Se quitan las dobles alteraciones
16
17 @item
18 Si sostenido -> Do
19
20 @item
21 Mi sistenido -> Fa
22
23 @item
24 Do bemol -> Si
25
26 @item
27 Fa bemol -> Mi
28
29 @end itemize
30
31 De esta forma se selecciona el mayor número de notas enarmónicas
32 naturales.
33
34 "
35
36 doctitlede = "Noten mit minimaler Anzahl an Versetzungszeichen transponieren."
37
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:
42
43 @itemize
44 @item
45 Doppelte Versetzungszeichen sollen entfernt werden
46
47 @item
48 His -> C
49
50 @item
51 Eis -> F
52
53 @item
54 Ces -> B
55
56 @item
57 Fes -> E
58
59 @end itemize
60
61 Auf diese Art werden am meisten natürliche Tonhöhen als enharmonische
62 Variante gewählt.
63 "
64
65
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:
70
71 @itemize
72 @item
73 Double accidentals should be removed
74
75 @item
76 B sharp -> C
77
78 @item
79 E sharp -> F
80
81 @item
82 C flat -> B
83
84 @item
85 F flat -> E
86
87 @end itemize
88
89 In this manner, the most natural enharmonic notes are chosen.
90 "
91   doctitle = "Transposing music with minimum accidentals"
92 } % begin verbatim
93
94
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))))
114
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))
132
133 naturalizeMusic =
134 #(define-music-function (parser location m)
135   (ly:music?)
136   (naturalize m))
137
138 music = \relative c' { c4 d e g }
139
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 }
146   }
147   \layout { }
148 }