On 2019-11-08 11:07 am, Thomas Morley wrote:
Below seems to work for \layout.

\version "2.19.83"

idFontSize =
  \applyContext
    #(lambda (ctx)
      (ly:context-set-property! ctx 'fontSize
        (cond ((string=? (ly:context-id ctx) "foo")
               -6)
              ((string=? (ly:context-id ctx) "bar")
               6)
              (else (ly:context-property ctx 'fontSize)))))

\score {
  <<
    \new Staff = "foo"  \relative c' { e4 f g a }
    \new Staff = "bar"  \relative c' { c4 d e f }
  >>
  \layout {
    \context {
      \Staff
      \idFontSize
    }
  }
}

Didn't test for midi, though, why shouldn't the method work there as well.

Created a helper to wrap up the conditional context modification:

%%%%
\version "2.19.83"

modify = #(define-music-function (name mod) (string? ly:context-mod?)
  #{ \applyContext #(lambda (ctx)
        (and (string=? (ly:context-id ctx) name)
              (ly:context-mod-apply! ctx mod))) #})

\score {
  <<
    \new Staff = "foo" \fixed c' { g4 c' a b | c'1 }
    \new Staff = "bar" \fixed c' { e4 g f d | e1 }
  >>
  \layout {
    \context { \Staff
      \modify "foo" \with { fontSize = 3 }
      \modify "bar" \with { \override NoteHead.color = #blue }
    }
  }
  \midi {
    \tempo 4 = 100
    \context { \Staff
      \modify "foo" \with { midiInstrument = "flute" }
      \modify "bar" \with { midiPanPosition = #LEFT }
    }
  }
}
%%%%

MIDI output block works too.  (:


-- Aaron Hill

Reply via email to