[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: |
Wed, 21 Nov 2012 12:45:56 -0500 |
On Nov 18, 2012, at 7:26 AM, Thomas Morley <address@hidden> wrote:
> 2012/11/18 Paul Morris <address@hidden>:
> [...]
>> I do have some small changes I made to my local copy that I'd like to add.
>> They are for the accidental signs in the text -- better spacing and putting
>> them into a LilyPond variable for less repetition. I won't be able to get
>> to this until Wednesday at the earliest.
>
> No problem. I'll wait.
Hi Harm, I incorporated your 2.14 "downgrades" into my most current version,
and uploaded it to the LSR: http://lsr.dsi.unimi.it/LSR/Item?u=1&id=856
I kept the commented-out 2.16 version in the snippet, for easy future
migration. But I am fine with removing it if that's preferred for the LSR.
The most current code for use in 2.16 is pasted below.
Thanks again,
-Paul
% Begin snippet
\version "2.16.0"
% tonic-semi: semitone of the tonic note, 0-11, 0=C, 2=D, etc
% psn: vertical staff position of the last accidental sign in key signature
% accsign: the accidental sign type, 1/2=sharp, -1/2=flat
% (These 3 things let us identify the key and if it is major or minor.)
% txt-size: size of key name text
% padd: padding between key signature and key name
% C Major, F Major, A Minor, and D Minor all get extra padding
% so the name is above the staff
% This snippet does not work with modal keys (dorian, lydian, etc.)
% Key cancellations usually get no name above them,
% unless they have the same tonic note, like G major to G minor.
#(define Custom_key_signature_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 #:null))
(txt-size .7)
(padd .5)
(sharptxt (markup #:translate (cons -0.3 0.8) #:magnify .9 #:sharp))
(flattxt (markup #:translate (cons -0.2 0.4) #:magnify .9 #:flat))
)
(cond
((= accsign 0) (cond
((= tonic-semi 0) (set! key-name (markup "C Major" )) (set! padd 3.2))
((= tonic-semi 9) (set! key-name (markup "A Minor" )) (set! padd 3.2))
(else (set! key-name (markup #:null)))
))
((= 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 #:null)))
))
((= 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 #:null)))
))
((= psn 4) (cond
((= tonic-semi 9) (set! key-name (markup "A Major" )))
((= tonic-semi 6) (set! key-name (markup "F" sharptxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 1) (cond
((= tonic-semi 4) (set! key-name (markup "E Major" )))
((= tonic-semi 1) (set! key-name (markup "C" sharptxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 5) (cond
((= tonic-semi 11) (set! key-name (markup "B Major" )))
((= tonic-semi 8) (set! key-name (markup "G" sharptxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 2) (cond
((= tonic-semi 6) (set! key-name (markup "F" sharptxt "Major" )))
((= tonic-semi 3) (set! key-name (markup "D" sharptxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 6) (cond
((= tonic-semi 1) (set! key-name (markup "C" sharptxt "Major" )))
((= tonic-semi 10) (set! key-name (markup "A" sharptxt "Minor" )))
(else (set! key-name (markup #:null)))
))
)
)
((= accsign -1/2)
(cond
((= psn 6) (cond
((= tonic-semi 5) (set! key-name (markup "F Major" )) (set! padd 1.4))
((= tonic-semi 2) (set! key-name (markup "D Minor" )) (set! padd 1.7))
(else (set! key-name (markup #:null)))
))
((= psn 2) (cond
((= tonic-semi 10) (set! key-name (markup "B" flattxt "Major" )))
((= tonic-semi 7) (set! key-name (markup "G Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 5) (cond
((= tonic-semi 3) (set! key-name (markup "E" flattxt "Major" )))
((= tonic-semi 0) (set! key-name (markup "C Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 1) (cond
((= tonic-semi 8) (set! key-name (markup "A" flattxt "Major" )))
((= tonic-semi 5) (set! key-name (markup "F Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 4) (cond
((= tonic-semi 1) (set! key-name (markup "D" flattxt "Major" )))
((= tonic-semi 10) (set! key-name (markup "B" flattxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 0) (cond
((= tonic-semi 6) (set! key-name (markup "G" flattxt "Major" )))
((= tonic-semi 3) (set! key-name (markup "E" flattxt "Minor" )))
(else (set! key-name (markup #:null)))
))
((= psn 3) (cond
((= tonic-semi 11) (set! key-name (markup "C" flattxt "Major" )))
((= tonic-semi 8) (set! key-name (markup "A" flattxt "Minor" )))
(else (set! key-name (markup #:null)))
))
)
)
)
(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)
txt-size txt-size)
padd ))
)))))
\layout {
\context {
\Staff
\consists \Custom_key_signature_engraver
}
}
\new Staff \relative c {
\clef bass
\key c \major
c1
\key a \minor
a1
\key g \major
g1
\key e \minor
e'1
\key d \major
d1
\key b \minor
b1
\key a \major
a1
\key fis \minor
fis'1
\key e \major
e1
\key cis \minor
cis1
\key b \major
b1
\key gis \minor
gis1
\key fis \major
fis'1
\key dis \minor
dis1
\key cis \major
cis1
\key ais \minor
ais1
\key f \major
f'1
\key d \minor
d1
\key bes \major
bes1
\key g \minor
g'1
\key ees \major
ees1
\key c \minor
c1
\key aes \major
aes1
\key f \minor
f'1
\key des \major
des1
\key bes \minor
bes1
\key ges \major
ges'1
\key ees \minor
ees1
\key ces \major
ces1
\key aes \minor
aes1
}
- Re: Custom key signature stencils, differentiating major and minor keys, (continued)
- 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
- Re: Custom key signature stencils, differentiating major and minor keys, Paul Morris, 2012/11/18
- Re: Custom key signature stencils, differentiating major and minor keys, Thomas Morley, 2012/11/18
- Re: Custom key signature stencils, differentiating major and minor keys,
Paul Morris <=