lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: midiPanPosition in midi context block


From: Thomas Morley
Subject: Re: midiPanPosition in midi context block
Date: Fri, 8 Nov 2019 20:07:44 +0100

Am Fr., 8. Nov. 2019 um 15:35 Uhr schrieb David Kastrup <address@hidden>:
>
> Matt Wallis <address@hidden> writes:
>
> > But it doesn't work if I try to set the midiPanPosition inside a midi
> > context block like this:
> >
> > \version "2.19.83"
> >
> > \include "english.ly"
> > sopStaff = \new Staff = "sop" {
> >   \relative c' { e4 f g a }
> > }
> > altoStaff = \new Staff = "alto" {
> >   \relative c' { c4 d e f }
> > }
> > \score {
> >   <<
> >     \sopStaff
> >     \altoStaff
> >   >>
> >   \midi {
> >     \context Staff = "sop" {
> >       \set Staff.midiPanPosition = #1.0
> >       \set Staff.midiBalance = #1.0
> >     }
> >     \context Staff = "alto" {
> >       \set Staff.midiPanPosition = #-1.0
> >       \set Staff.midiBalance = #-1.0
> >     }
> >   }
> > }
>
> This is terrible.  Really, really terrible.  \context Staff = "xxx"
> should never be allowed in an output block since setting name-specific
> context defs is not supported and does not make sense, either.  I'll see
> whether I can stop the parser from accepting this abomination.
> >
> > Furthermore, the result of doing this is that both staffs are played
> > through the left, and nothing on the right.
> >
> > Am I doing something wrong?
>
> As a rule, changing syntax until something passes the parser instead of
> working from documented syntax and examples is a bad idea.  Most of the
> time, you'll trigger error messages pinpointing the problem.
>
> But sometimes there are oversights.
>
> > I want to do the setting in the midi context block because I require
> > different pan positions for a staff depending on which score it
> > appears in.
>
> Then create different variables/expressions for that purpose.  But the
> \midi block cannot sensibly differentiate between differently named
> contexts.
>
> --
> David Kastrup
>

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.


Cheers,
  Harm



reply via email to

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