[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: |
Mon, 12 Nov 2012 11:44:24 -0500 |
Here is another revision (hopefully the last?!). The previous version would
include the key name over a key cancellation[1], but it would often be an
incorrect/unrelated key name (!).
This version does not include the name of the key above a key-cancellation,
unless the tonic note is the same in both keys, like a switch from G major to G
minor. (This is a glitch I haven't been able to work around. It always gives
the correct key name now at least. I tried checking for natural signs as the
type of accidental used in key cancellations, but this does not work.)
Cheers,
-Paul
[1] http://www.lilypond.org/doc/v2.16/Documentation/internals/keycancellation
\version "2.16.0"
% tonic-semi: semitone of tonic note, 0-11
% psn: vertical staff position of the last accidental sign in key signature
% accsign: the accidental sign type, 1/2=sharp, -1/2=flat
% Knowing these 3 things is enough to identify the key and whether it is
major/minor
#(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))
(acclist (ly:grob-property grob 'alteration-alist))
(accsign (if (null? acclist) 0 (cdr (list-ref acclist 0))))
(psn (if (null? acclist) 0 (car (list-ref acclist
0))))
(key-name #{ \markup {} #})
)
(cond
((= accsign 0) (cond
((= tonic-semi 0) (set! key-name #{ \markup \raise #3.4
{C Major} #}))
((= tonic-semi 9) (set! key-name #{ \markup \raise #3.4
{A Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= accsign 1/2)
(cond
((= psn 3) (cond
((= tonic-semi 7) (set! key-name #{ \markup {G Major}
#}))
((= tonic-semi 4) (set! key-name #{ \markup {E Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 0) (cond
((= tonic-semi 2) (set! key-name #{ \markup {D Major}
#}))
((= tonic-semi 11) (set! key-name #{ \markup {B Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 4) (cond
((= tonic-semi 9) (set! key-name #{ \markup {A Major}
#}))
((= tonic-semi 6) (set! key-name #{ \markup {F\raise
#.6 {\sharp} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 1) (cond
((= tonic-semi 4) (set! key-name #{ \markup {E Major}
#}))
((= tonic-semi 1) (set! key-name #{ \markup {C\raise
#.6 {\sharp} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 5) (cond
((= tonic-semi 11) (set! key-name #{ \markup {B Major}
#}))
((= tonic-semi 8) (set! key-name #{ \markup {G\raise
#.6 {\sharp} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 2) (cond
((= tonic-semi 6) (set! key-name #{ \markup {F\raise
#.6 {\sharp} Major} #}))
((= tonic-semi 3) (set! key-name #{ \markup {D\raise
#.6 {\sharp} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 6) (cond
((= tonic-semi 1) (set! key-name #{ \markup {C\raise
#.6 {\sharp} Major} #}))
((= tonic-semi 10) (set! key-name #{ \markup {A\raise
#.6 {\sharp} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
)
)
((= accsign -1/2)
(cond
((= psn 6) (cond
((= tonic-semi 5) (set! key-name #{ \markup {F Major}
#}))
((= tonic-semi 2) (set! key-name #{ \markup {D Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 2) (cond
((= tonic-semi 10) (set! key-name #{ \markup {B\raise
#.4 {\flat} Major} #}))
((= tonic-semi 7) (set! key-name #{ \markup {G Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 5) (cond
((= tonic-semi 3) (set! key-name #{ \markup {E\raise
#.4 {\flat} Major} #}))
((= tonic-semi 0) (set! key-name #{ \markup {C Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 1) (cond
((= tonic-semi 8) (set! key-name #{ \markup {A\raise
#.4 {\flat} Major} #}))
((= tonic-semi 5) (set! key-name #{ \markup {F Minor}
#}))
(else (set! key-name #{\markup{}#}))
))
((= psn 4) (cond
((= tonic-semi 1) (set! key-name #{ \markup {D\raise
#.4 {\flat} Major} #}))
((= tonic-semi 10) (set! key-name #{ \markup {B\raise
#.4 {\flat} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 0) (cond
((= tonic-semi 6) (set! key-name #{ \markup {G\raise
#.4 {\flat} Major} #}))
((= tonic-semi 3) (set! key-name #{ \markup {E\raise
#.4 {\flat} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
((= psn 3) (cond
((= tonic-semi 11) (set! key-name #{ \markup {C\raise
#.4 {\flat} Major} #}))
((= tonic-semi 8) (set! key-name #{ \markup {A\raise
#.4 {\flat} Minor} #}))
(else (set! key-name #{\markup{}#}))
))
)
)
)
(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)
.5 ))
)))))
% Resize text by changing the .7 .7 above in "(grob-interpret-markup grob
key-name) .7 .7)"
% Adjust padding by changing the .5 on the following line
\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, 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, 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
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/18