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 13:36:47 -0500

On Nov 11, 2012, at 7:38 AM, MING TSANG <address@hidden> wrote:

> Hi, Paul:  Thank you for the custom key signature.  I have been dreaming this 
> for sometime, but hesitate to ask lilypond user community.  I have been using 
> circle of fifths to identify the key signature.

Hi Ming,  I'm glad you find it useful.


> You mention this custom key signature can be adapted to print above the clef 
> sign.  I am not a programmer, so not able to change (adapt).
> 
> Questions:  
> 1. Print the custom key signature above the clef sign
> 2. Is it possible to retain the traditional key signature then print the 
> custom key signature above
> 3. Can this custom key signature use with \include "english.ly" or \language 
> english?
> 4. Can ais (as in english) print as A# Major & f# Minor; same for flat as 
> well?

The new code below will print the name of the key above the standard key 
signature.  It now uses actual sharp and flat signs in the key names ("Fb" 
rather than "Fes"), and the text is smaller.  

It should work fine with \include "english.ly" or \language english, but I have 
not tried it.  You can edit the names of the keys by changing the relevant text 
in the following parts of the code.  For example change:

  #{ \markup \magnify #0.7 {B Major} #

  #{ \markup \magnify #0.7 {G\raise #.6 {\sharp} Minor} #

to
 
  #{ \markup \magnify #0.7 {B M} #

  #{ \markup \magnify #0.7 {G\raise #.6 {\sharp} m} #

for an abbreviated text ("B M"  and "G# m" instead of "B Major" and "G Minor").


I think this has reached the "potentially useful" stage, for anyone who is 
still learning the key signatures or wants to know explicitly whether keys are 
major or minor.

(Ideally it would be better if it did not print the name of the key signature 
above a key cancellation, as with the transition from A# Minor to F Major in 
the code below.  I would have to figure out how to somehow access whether it 
was engraving a key-cancellation or a key-signature.)

Any suggestions for improvement are welcome.  I am an amateur hack at this and 
stand on the shoulders of giant snippets.  :-)

(Like this one http://lsr.dsi.unimi.it/LSR/Item?id=233 for this most recent 
version).

Cheers,
-Paul


%%  Begin snippet

\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))
                          (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))))
                          (sig-stencil  (ly:key-signature-interface::print 
grob))
                        )
                        (cond 
                        ((= accsign 0) 
                                (if (= tonic-semi 0) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil  1 1 
                                                                
(grob-interpret-markup grob #{ \markup \raise #2.3 \magnify #0.7 {C Major} #}) 
.5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \raise #2.3 \magnify #0.7 {A Minor} #}) 
.5 ))
                                ))
                        ((= accsign 1/2)        ;; SHARP KEYS
                          (cond 
                                ((= psn 3) 
                                        (if (= tonic-semi 7) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {G Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {E Minor} #}) .5 ))
                                ))
                                ((= psn 0) 
                                        (if (= tonic-semi 2) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {D Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {B Minor} #}) .5 ))
                                ))
                                ((= psn 4) 
                                        (if (= tonic-semi 9) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {A Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {F\raise #.6 {\sharp} 
Minor} #}) .5 ))
                                ))
                                ((= psn 1) 
                                        (if (= tonic-semi 4) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {E Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {C\raise #.6 {\sharp} 
Minor} #}) .5 ))
                                ))
                                ((= psn 5) 
                                        (if (= tonic-semi 11)
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {B Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {G\raise #.6 {\sharp} 
Minor} #}) .5 ))
                                ))
                                ((= psn 2) 
                                        (if (= tonic-semi 6) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {F\raise #.6 {\sharp} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {D\raise #.6 {\sharp} 
Minor} #}) .5 ))
                                ))
                                ((= psn 6) 
                                        (if (= tonic-semi 1) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {C\raise #.6 {\sharp} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {A\raise #.6 {\sharp} 
Minor} #}) .5 ))
                                ))
                          )
                        )
                        ((= accsign -1/2)       ;; FLAT KEYS
                          (cond
                                ((= psn 6) 
                                        (if (= tonic-semi 5) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {F Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {D Minor} #}) .5 ))
                                ))
                                ((= psn 2) 
                                        (if (= tonic-semi 10) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {B\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {G Minor} #}) .5 ))
                                ))
                                ((= psn 5) 
                                        (if (= tonic-semi 3) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {E\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {C Minor} #}) .5 ))
                                ))
                                ((= psn 1) 
                                        (if (= tonic-semi 8) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {A\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {F Minor} #}) .5 ))
                                ))
                                ((= psn 4) 
                                        (if (= tonic-semi 1) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {D\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {B\raise #.4 {\flat} 
Minor} #}) .5 ))
                                ))
                                ((= psn 0) 
                                        (if (= tonic-semi 6) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {G\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {E\raise #.4 {\flat} 
Minor} #}) .5 ))
                                ))
                                ((= psn 3) 
                                        (if (= tonic-semi 11) 
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {C\raise #.4 {\flat} 
Major} #}) .5 ))
                                                (ly:grob-set-property! grob 
'stencil 
                                                        
(ly:stencil-combine-at-edge sig-stencil 1 1 
                                                                
(grob-interpret-markup grob #{ \markup \magnify #0.7 {A\raise #.4 {\flat} 
Minor} #}) .5 ))
                                ))
                          )     
                        )
                )
)))))

\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]