lilypond-devel
[Top][All Lists]
Advanced

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

Re: Reverting Beat Grouping Commands


From: Trevor Daniels
Subject: Re: Reverting Beat Grouping Commands
Date: Mon, 13 Apr 2009 09:44:16 +0100


Carl D. Sorensen wrote Monday, April 13, 2009 1:32 AM

On 4/12/09 6:14 AM, "Trevor Daniels" <address@hidden> wrote:

Carl

Standardising on a single format for auto-beaming would be a major improvement, and this looks the right way to go. But at present the
beatLength/beatGrouping values provide the default action in the
event of no defined beam-ending rules.  A catch-all default is
needed, as we cannot provide explicit default rules for all the
(infinite) time signatures.

The catch-all default would be implemented in auto-beaming.scm. If there were no defined rule, then the denominator of the time signature would be
used to end the beaming, just as it currently is.

OK.  As long as we provide default rules for compound
time signatures that should be fine.

I'm a bit concerned about dropping the easy beatLength/beatGrouping interface, which seems to be prefered by most users, and replacing it with a more complex one, but I don't have any suggestions (which
work) to make at present.  Might a special user interface be
preferable to \override and \revert?

Instead of

\set beatGrouping = #'(1 3 3)

(which can be wrong, because it doesn't reference the time signature), it
would be something like

\override #'autoBeamSetting #'(end 7 8) =
 \makeAutoBeamSetting '(* . ((1 . 8) (4 . 8) (7 . 8)))

Should this not be \set rather than \override, as
this is a context property?

I agree this is a bit more difficult to type, and may be more difficult to
understand.  But I think the advantages of

A) Having the time signature explicitly included
make this worthwhile.

Absolutely

B) Being explicit about the grouping points
make this worthwhile.

Not so sure about this.

\set #'autoBeamSetting #'(end 7 8) =
 \makeAutoBeamSetting '(* . ((1 . 8) (4 . 8) (7 . 8)))

could be written equivalently as

\set #'autoBeamSetting #'(lengths 7 8) =
 \makeAutoBeamSetting '(* . ( 1 3 3 ))

where the beat length is either dem if * or beam
duration if specified.  makeAutoBeamSetting could
convert these to the equivalent 'end' form.

Granted you could not write

\set #'autoBeamSetting #'(end 7 8) =
 \makeAutoBeamSetting '(* . ((3 . 16) (4 . 8) (7 . 8)))

in the alternative syntax, so some flexibility would
be lost, but as this would affect only 16th and shorter
beams this would work:

\set #'autoBeamSetting #'(lengths 7 8) =
 \makeAutoBeamSetting '(* . ( 4 3 )
                   16 . ( 3 5 6 ))

Hhm.  Now I'm not sure which I prefer.  This example
looks worse!  And the grouping form can be specified
in an invalid way, meaning errors can be generated.
One advantage of the ending form is that pretty well
everything you can write is valid, as the final beam
will always end at the end of the bar even if this is
not specified.  Only specifying moments beyond the end
of the bar would be erroneous.

Perhaps on balance I prefer specifying end points
after all.

Trevor





reply via email to

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