[Top][All Lists]

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

Re: MetronomeMark placement questions

From: Xavier Scheuer
Subject: Re: MetronomeMark placement questions
Date: Sat, 19 Jun 2010 17:12:40 +0200

2010/6/19 Kieren MacMillan <address@hidden>:

> Hey y'alls,
> I'm trying to solve the age-old [for me] problem of MetronomeMark
> placement.

I complained a lot about the bad "tempo indications" placement, I'm
really glad to see people trying to solve it.

> There are [at least] four issues that need to be solved simultaneously:
>  (1) MMs [almost always] need to be at the top of each system;

Well, this is already the case, isn't it?
"Staff_collecting_engraver" takes care of that for both RehearsalMark
and MetronomeMark, which is fine.

>  (2) MMs potentially need to be other places (e.g., bottom of each
> system, or mid-system between two staff groups);

Ususally, when not printed at the top of the whole system it is (based
on my own experience with scores from IMSLP):

  a. either printed at the top and at the bottom of the whole system,
     which is not possible to do _correctly_ right now.
     We could use the trick of LSR 10 but that would simply add
     "Metronome_mark_engraver" to the lowest staff, and won't handle
     correctly the case of removed Staff (\RemoveEmptyStaffContext).

To solve this I could imagine something like

  \set doubleMetronomeMarks = ##t

(inspired by "\set doubleSlurs = ##t"), that would print MetronomeMark
at both the top and the bottom of the context it applies to (Score).

NOTE: The problem is *exactly* the same for RehearsalMarks !!!
      That you be great to solve it the same way.

  b. MM printed at the top of the whole system _and_ at the top of a
     StaffGroup (normally "strings" for pieces like symphonies) inside
     the system.
     We can already handle this easily by adding
     "Metronome_mark_engraver" to this StaffGroup and removing
     "Staff_collecting_engraver" for the Score context.

  c. MM printed at the top _and_ at the bottom of the whole system
     *but also* at the top of a StaffGroup inside the system.
     This is more complicated since it is a combination of both a & b.
     So the possibility to use "doubleMetronomeMarks" within the Score
     context should let the possibility _not to use it_ within the
     StaffGroup.  I have no idea how to make that possible.
     By defining "doubleMetronomeMarks" as a property of the grob

>  (3) MMs should be baseline-alignable across any given system;

I did not go "that far" in my expectations...

>  (4) These rules need to be followed regardless of which staves appear
> or disappear (cf \RemoveEmptyStaffContext).

Of course I agree.
But didn't "Staff_collecting_engraver" already take care of that?
(or should be supposed to)

> In the short term, I'm considering creating a Tempo context, which
> only prints out tempo indications (akin to the TimeSig context of
> yore).  This context could then be placed in the \score wherever one
> needs it, solving (1), (2), and (4); since the context would be
> independent of any other contexts, (3) is automagically solved.
> But I want this to be easy to implement, so I either want the Tempo
> context to automagically ignore everything except MetronomeMark grobs,
> or I need to build a function/macro to strip out everything except
> MetronomeMark grobs.

I do not like this idea.
As Carl said, that would _constrain_ the user to have a separate music
expression to pass to the Tempo context... and I hate that!
We do not have a separate context for RehearsalMarks.
We have a separate "Dynamics" context for Piano centered dynamics
and I hate that...

That's not how it is supposed to work (IMO).
I would 100 times prefer to have it handled by a simple property change.

  \override DynamicLineSpanner #'centered-between-staves = ##t

same for Metronome(+Rehearsal)Mark :

  \override MetronomeMark #'baseline-align = ##t

but _keeping them in the normal (Staff) context_!

> Q#2: In the long term, would the short term solution still be the best,
> or should Lilypond Do The Right Thing™ in some other way that doesn't
> require a separate context?

I definitely agree.
Of course your Q#1 "separate context" solution could maybe be more
easily implemented, but from a user point of view this is awkward,
not intuitive and certainly unpleasant: that would constrain people to
separate the music into parts (notes, dynamics, indications, ...),
constrain them to use a \global variable and to play with spacer rests.

Of course you can "split" music into different variables if you want,
but I do not want this to become an "obligation".

We all want LilyPond to Do The Right Thing™.  ;-)


Xavier Scheuer <address@hidden>

reply via email to

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