[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < 調号の取り消し表示を新たな調号から離す ] | [ Up : Pitches ] | [ Turkish Makam example > ] |
臨時記号の数が最小になるようにピッチを移調する ("スマート" トランスポーズ)
この例は、臨時記号の数が最小になるように、異名同音を置き換える Scheme コードを使用しています。この場合、次のルールが適用されます:
ダブルシャープやダブルフラットは削除されます
B シャープ -> C
E シャープ -> F
C フラット -> B
F フラット -> E
このようにして、最も自然な異名同音が選ばれます。
#(define (naturalize-pitch p) (let ((o (ly:pitch-octave p)) (a (* 4 (ly:pitch-alteration p))) ;; alteration, a, in quarter tone steps, ;; for historical reasons (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)))) (if (< n 0) (begin (set! o (- o 1)) (set! n (+ n 7)))) (if (> n 6) (begin (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))) (if (pair? es) (ly:music-set-property! music 'elements (map naturalize es))) (if (ly:music? e) (ly:music-set-property! music 'element (naturalize e))) (if (ly:pitch? p) (begin (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 } \score { \new Staff { \transpose c ais { \music } \naturalizeMusic \transpose c ais { \music } \transpose c deses { \music } \naturalizeMusic \transpose c deses { \music } } \layout { } }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < 調号の取り消し表示を新たな調号から離す ] | [ Up : Pitches ] | [ Turkish Makam example > ] |