lilypond-user
[Top][All Lists]
Advanced

[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
}


reply via email to

[Prev in Thread] Current Thread [Next in Thread]