[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Custom key signature stencils, differentiating major and minor keys
From: |
Paul Morris |
Subject: |
Re: Custom key signature stencils, differentiating major and minor keys |
Date: |
Sun, 11 Nov 2012 17:01:30 -0500 |
Here is an improved version. It works the same as the last,
but with much more streamlined and concise code.
-Paul
\version "2.16.0"
#(define Custom_key_sig_engraver
(make-engraver
(acknowledgers
((key-signature-interface engraver grob source-engraver)
(let* (
(context (ly:translator-context engraver))
(tonic-pitch (ly:context-property context 'tonic))
(tonic-semi (modulo (ly:pitch-semitones tonic-pitch) 12)) ;;
semitone of tonic note, 0-11
(acclist (ly:grob-property grob 'alteration-alist))
(accsign (if (null? acclist) 0 (cdr (list-ref acclist 0))))
;; accidental sign type, 1/2=sharp, -1/2=flat
(psn (if (null? acclist) 0 (car (list-ref acclist
0)))) ;; vertical position of last accidental sign
(key-name #{ \markup {} #})
)
(cond
((= accsign 0)
(if (= tonic-semi 0)
(set! key-name #{ \markup \raise #3.4 {C Major} #})
(set! key-name #{ \markup \raise #3.4 {A Minor} #})
))
((= accsign 1/2) ;; SHARP KEYS
(cond
((= psn 3)
(if (= tonic-semi 7)
(set! key-name #{ \markup {G Major} #})
(set! key-name #{ \markup {E Minor} #})
))
((= psn 0)
(if (= tonic-semi 2)
(set! key-name #{ \markup {D Major} #})
(set! key-name #{ \markup {B Minor} #})
))
((= psn 4)
(if (= tonic-semi 9)
(set! key-name #{ \markup {A Major} #})
(set! key-name #{ \markup {F\raise #.6 {\sharp}
Minor} #})
))
((= psn 1)
(if (= tonic-semi 4)
(set! key-name #{ \markup {E Major} #})
(set! key-name #{ \markup {C\raise #.6 {\sharp}
Minor} #})
))
((= psn 5)
(if (= tonic-semi 11)
(set! key-name #{ \markup {B Major} #})
(set! key-name #{ \markup {G\raise #.6 {\sharp}
Minor} #})
))
((= psn 2)
(if (= tonic-semi 6)
(set! key-name #{ \markup {F\raise #.6 {\sharp}
Major} #})
(set! key-name #{ \markup {D\raise #.6 {\sharp}
Minor} #})
))
((= psn 6)
(if (= tonic-semi 1)
(set! key-name #{ \markup {C\raise #.6 {\sharp}
Major} #})
(set! key-name #{ \markup {A\raise #.6 {\sharp}
Minor} #})
))
)
)
((= accsign -1/2) ;; FLAT KEYS
(cond
((= psn 6)
(if (= tonic-semi 5)
(set! key-name #{ \markup {F Major} #})
(set! key-name #{ \markup {D Minor} #})
))
((= psn 2)
(if (= tonic-semi 10)
(set! key-name #{ \markup {B\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {G Minor} #})
))
((= psn 5)
(if (= tonic-semi 3)
(set! key-name #{ \markup {E\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {C Minor} #})
))
((= psn 1)
(if (= tonic-semi 8)
(set! key-name #{ \markup {A\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {F Minor} #})
))
((= psn 4)
(if (= tonic-semi 1)
(set! key-name #{ \markup {D\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {B\raise #.4 {\flat}
Minor} #})
))
((= psn 0)
(if (= tonic-semi 6)
(set! key-name #{ \markup {G\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {E\raise #.4 {\flat}
Minor} #})
))
((= psn 3)
(if (= tonic-semi 11)
(set! key-name #{ \markup {C\raise #.4 {\flat}
Major} #})
(set! key-name #{ \markup {A\raise #.4 {\flat}
Minor} #})
))
)
)
)
(ly:grob-set-property! grob 'stencil
(ly:stencil-combine-at-edge (ly:key-signature-interface::print
grob) 1 1
(ly:stencil-scale (grob-interpret-markup grob key-name)
.7 .7) ;; RESIZE TEXT
.5 )) ;; PADDING
)))))
\layout {
\context {
\Staff
\consists \Custom_key_sig_engraver
}
}
\new Staff {
\key c \major
c'1
\key a \minor
a'1
\key g \major
g'1
\key e \minor
e'1
\key d \major
d'1
\key b \minor
b'1
\key a \major
a'1
\key fis \minor
fis'1
\key e \major
e'1
\key cis \minor
cis'1
\key b \major
b'1
\key gis \minor
gis'1
\key fis \major
fis'1
\key dis \minor
dis'1
\key cis \major
cis'1
\key ais \minor
ais'1
\key f \major
f'1
\key d \minor
d'1
\key bes \major
bes'1
\key g \minor
g'1
\key ees \major
ees'1
\key c \minor
c'1
\key aes \major
aes'1
\key f \minor
f'1
\key des \major
des'1
\key bes \minor
bes'1
\key ges \major
ges'1
\key ees \minor
ees'1
\key ces \major
ces'1
\key aes \minor
aes'1
}
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/11
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/11
- Re: Custom key signature stencils, differentiating major and minor keys,
Paul Morris <=
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/12
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/12
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/12
- Message not available
- Message not available
- Message not available
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/13
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/13
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/13
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/14
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/14
- Re: Custom key signature stencils, differentiating major and minor keys, Thomas Morley, 2012/11/16
- Re: Custom key signature stencils, differentiating major and minor keys, MING TSANG, 2012/11/16