| [ << Scheme ] | [Top][Contents] | [ Spacing >> ] |
| [ < Encadrement sur trois côtés ] | [ Up: Scheme ] | [ Deux \partCombine sur une même portée > ] |
Transposition et réduction du nombre d’altérations accidentelles
Cet exemple, grâce à un peu de code Scheme, donne la priorité aux enharmoniques afin de limiter le nombre d’altérations supplémentaires. La règle applicable est :
- Les altérations doubles sont supprimées
- Si dièse -> Do
- Mi dièse -> Fa
- Do bémol -> Si
- Fa bémol -> Mi
Cette façon de procéder aboutit à plus d’enharmoniques naturelles.
#(define (naturalize-pitch p) (let ((o (ly:pitch-octave p)) ;; `ly:pitch-alteration` returns quarter tone steps. (a (* 4 (ly:pitch-alteration p))) (n (ly:pitch-notename p))) (cond ((and (> a 1) (or (eqv? n 6) (eqv? n 2))) (set! a (- a 2)) (set! n (+ n 1))) ((and (< a -1) (or (eqv? n 0) (eqv? n 3))) (set! a (+ a 2)) (set! n (- n 1)))) (cond ((> a 2) (set! a (- a 4)) (set! n (+ n 1))) ((< a -2) (set! a (+ a 4)) (set! n (- n 1)))) (when (< n 0) (set! o (- o 1)) (set! n (+ n 7))) (when (> n 6) (set! o (+ o 1)) (set! n (- n 7))) (ly:make-pitch o n (/ a 4)))) #(define (naturalize music) (let ((es (ly:music-property music 'elements)) (e (ly:music-property music 'element)) (p (ly:music-property music 'pitch))) (when (pair? es) (ly:music-set-property! music 'elements (map naturalize es))) (when (ly:music? e) (ly:music-set-property! music 'element (naturalize e))) (when (ly:pitch? p) (set! p (naturalize-pitch p)) (ly:music-set-property! music 'pitch p)) music)) naturalizeMusic = #(define-music-function (m) (ly:music?) (naturalize m)) music = \relative c' { c4 d e g } \new Staff { \transpose c ais { \music } \naturalizeMusic \transpose c ais { \music } \transpose c deses { \music } \naturalizeMusic \transpose c deses { \music } }
| [ << Scheme ] | [Top][Contents] | [ Spacing >> ] |
| [ < Encadrement sur trois côtés ] | [ Up: Scheme ] | [ Deux \partCombine sur une même portée > ] |