lilypond-user
[Top][All Lists]
Advanced

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

Automatic beaming in melismas


From: Ben Rudiak-Gould
Subject: Automatic beaming in melismas
Date: Sun, 18 Mar 2012 13:48:16 -0700

\version "2.15.32"

I'd like to easily make choral scores with automatic beaming inside
melismas and none outside. Inspired by
https://code.google.com/p/lilypond/issues/detail?id=1308, I wrote a
Lilypond Guile function to do the same thing as the reporter's Perl
script. Unfortunately, I can't get it to work in all cases.

The first problem is that in situations like "c8[[ d]] e f", which I
convert to "\autoBeamOn c8 \melisma d \melismaEnd \autoBeamOff e f",
all four notes are beamed together. As far as I can tell, the
auto-beaming state is ignored except at the first beamed note: when
looking ahead to find how many notes to beam, the algorithm doesn't
consider whether auto-beaming was turned off in the mean time. (Is
this a bug?) I could fix this by attaching \noBeam to notes that
aren't part of a melisma, but this feels hacky and it's actually
somewhat tricky since it would mean keeping track of the current
melisma state, considering things like nested sequential and parallel
music, etc. Currently I don't have to worry about that. At any rate,
at least I see how I could solve this problem in principle.

The second problem is that c8[[ d]] e[[ f]] gets beamed as c8[ d e f].
I can't figure out how to solve this. If there were an object I could
insert in the note sequence that would not be crossed by automatic
beams, but otherwise had no effect, that would solve the problem. But
I can't find one.

  c d s8*0 e f  ==>  c[ d e f]

  c d s8*0\noBeam e f  ==>  c[ d] e f

  c d \skip8*0 e f  ==>  c[ d e f]

  c d \skip8*0\noBeam e f  ==>  error

  c d \bar "" e f  ==>  c d e[ f], and it wouldn't work at bar lines
anyway (which I have no way of detecting)

  c d r8*0 e f  ==>  c[ d] e[ f], but the rest is visible and the stem
of the e is aligned with the rest instead of the note

How much of the above is intentional behavior and how much is buggy?
Is there any way of doing what I want without requiring manual beaming
fixups from the user (which are a hassle, and would have to be
explained in the documentation of my helper function)?

Thanks,

-- Ben



reply via email to

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