> 1. How do I change the pitch of the 'root' note? I tried playing with the
> three numbers from "(+ tonic-position 3) 7) 3)))". But I can't understand
> their logic.
>
> I'm not quite sure what you mean: The pitch of the 'root' note is taken
> directly from the \key command.
>
> For example, the following example generates all reasonable roots for key
> signatures with two sharps:
>
> {
> \key d \major
> a'1
> \key e \dorian
> a'1
> \key fis \phrygian
> a'1
> \key g \lydian
> a'1
> \key a \mixolydian
> a'1
> \key b \aeolian
> a'1
> \key cis \locrian
> a'1
> }
>
> Does this already solve your question?
>
No, it didn't at first.
I was talking about custom scales like Hijaz (1 2b 3 4 5 6b 7b) and its
variations.
I use the \set Staff.keyAlterations command.
But then I remembered that I have to use the normal \key command before the
keyAlterations command, to give it a context for the alterations.
I tried that and it works as a charm (see below).
But I can also explain the logic behind the three numbers 3 7 3 in the
> expression you quoted:
>
> - "tonic" is the tonic as a LilyPond pitch.
> - "tonic-position" is defined as (+ (ly:pitch-steps tonic)
> (ly:grob-property grob 'c0-position), i.e.
> ... the vertical position of "middle c" for the current clef (measured
> in half-staff distances, i.e. note steps, from the centermost staff line)
> plus
> ... the number of steps our tonic lies above middle c.
> Now we have the problem that this gives us the position of _some_
> tonic note, but we do not know yet in which octave it will lie; so it may
> very well be sitting far above or far below the staff. Therefore:
> - "adjusted-tonic-position" is defined as (- (modulo (+ tonic-position
> 3) 7) 3))), i.e. ((tonic-position + 3) mod 7) - 3. The idea is: Take the
> tonic-position modulo 7 since pitch names repeat after 7 steps. If we would
> simply take "tonic-position mod 7", this would amount to guaranteeing the
> tonic-position to lie between 0 and 6: But this means our note will lie on
> or above the centermost staff line (the lower staff lines will not be
> used).
> What we want instead is a "shifted" modulo operation that returns
> values not between 0 and 6 but between -3 and 3; in other words: Values of
> "tonic-position" between -3 and 3 should not get changed. So we first add 3
> (yielding a value between 0 and 6), then doing the modulo and finally
> transforming back by subtracting 3 again.
>
> To sum up: The 7 should not be changed (that's the amount of steps in our
> note name system), and the two 3's should be equal (and it's no coincidence
> that 3 = (7-1)/2).
>
Thank you for that. It's fantastic how Music Theory gets another life as a
Lilypond code:-)
2. How can I remove the parenthesis? I tried but continuously broke the
> code:-)
>
> The notehead stencil is in the "notehead" variable, and the paranthesized
> stencil is stored in "notehead-parens". The simplest way to get rid of the
> parentheses would be to replace "notehead-parens" in the final construction
> of the stencil by "notehead". But then we can also get rid of
> "notehead-parens" completely, hence we get:
>
> notehead_key_signature = #
> (lambda (grob)
> (let*
> ((key-sig (ly:key-signature-interface::print grob))
> (notehead
> (grob-interpret-markup grob
> (markup #:tiny #:musicglyph "noteheads.s2")))
> (tonic (assq-ref (ly:grob-property grob 'details) 'tonic))
> (tonic-position (+ (ly:pitch-steps tonic)
> (ly:grob-property grob 'c0-position)))
> (adjusted-tonic-position
> (- (modulo (+ tonic-position 3) 7) 3)))
> (ly:stencil-combine-at-edge
> key-sig X RIGHT
> (ly:stencil-translate-axis notehead
> (/ adjusted-tonic-position 2) Y)
> 0.5)))
>
> HTH
> Lukas
>
Thank you, thank you, thank you.
I finally arrived where I intended to go.
This is what I use on top of your code and it renders perfectly - image
attached.
\key d \major
\set Staff.keyAlterations = #`(
(2 . ,FLAT)
(3 . ,SHARP)
(6 . ,FLAT)
)
\mark "D Hijaz"
d' es' fis' g' a' bes' c'' d''
Viktor