lilypond-user
[Top][All Lists]

## Re: feathered beam calculations

 From: Thomas Morley Subject: Re: feathered beam calculations Date: Fri, 21 Dec 2018 20:55:13 +0100

```Am Fr., 21. Dez. 2018 um 20:10 Uhr schrieb Reggie <address@hidden>:
>
> Aaron Hill wrote
> > Given the current implementation, it would be necessary to use an
> > approximate rational like 50/63 as the moment in order to get 'f' to be
> > half of 'c'.  Why that number?  Well, it's a close approximation to the
> > irrational cube root of one half.  We determine this exact value by
> > taking the desired ratio (1/2) and raising it to the reciprocal of the
> > number of scaling steps between the first and last notes (three, in this
> > case, which becomes the fraction 1/3).  (1/2)^(1/3) is about 0.7937; and
> > 50/63 is roughly 0.79365.
> >
> > But before we get lost in the murky details of whether the implemented
> > behavior is right or the documentation is right, let us circle back
> > around to a key point that I feel has not been stressed enough.
> >
> > This means your score really should be bar check clean *before* you ever
> > use \featherDurations.
> >
> > I said earlier we would talk about bar checks *within* the feathered
> > sequence of notes.  Consider the following addition to our example:
> >
> >      << { r64 \featherDurations #(ly:make-moment 2/1)
> >               { c32*127/14[ d e f g a | b] } }
> >         { r64 \featherDurations #(ly:make-moment 2/1)
> >               { c32*63/12[ d e f g a] } | b1 }
> >         { r64 { c64 d32 e16 f8 g4 a2 } | b1 } >>
> >
> > You'll see that the 'b' is included within the beamed notes.  Because we
> > now have seven notes covering the period of two measures less one 64th,
> > we had to adjust our scaling fraction to 127/14.  However, what is most
> > important is that \featherDurations fixes the timing of the notes to
> > allow the inside bar check to pass.  Omit it, and you'll see that the
> > bar check fails.  But also try changing the 2/1 moment to anything else,
> > and the bar check will also fail.
> >
> > What we have here is a very fragile element in the score that can be
> > easily avoided by never requiring any note (apart from the first) within
> > a feathered sequence to align to anything else.  The final 'b' above
> > should properly be outside the feathered sequence (or possibly start a
> > new sequence of its own).  In this way, the math to ensure all of the
> > sequences have the right lengths can be done completely independent of
> > \featherDurations.
> >
> > Hopefully some of this will be helpful.
> >
> > -- Aaron Hill
> >
> > _______________________________________________
> > lilypond-user mailing list
>
> > lilypond-user@
>
> > https://lists.gnu.org/mailman/listinfo/lilypond-user
>
> Aaron that makes sense but only if you have failed bar checks before
> feathering. Let's say you have a perfect score with no fails. And now you
> want to simply insert feather beamed notes only in one measure but have them
> spaced out according to the speed accelerando ritard as standard. How do you
> even begin to know what math * * * * you should be doing when there is no
> math to do in the first place??? NO bar check math because everything is
> already fine. Why can't you just spread out the notes according to how
> feathers are supposed to? Prove me please. Here look.
>
>
> \relative c'
> {
>
>   \override Beam.grow-direction = #LEFT
>   \featherDurations #(ly:make-moment 2/1)
>   c32[ d e f g f e f d f g f d e d f] c4~c | c1 |
> }
>
>
> My CODE has no errors. And yet the 2/1 does NOT space out any notes at ALL
> it's just normal beamed notes with fancy feathers. What math do I need how
> does one even know what math to use since there are no bar bad checks? See?
> :))

Well, try to reread Aaron's message (as he suggested), you may stumble across:
"
[Side note: Harm made a slight mistake in his example usage.  If you
want to feather a sequence of notes, you must put those notes in curly
braces.  Omitting the braces in the example above will result in no
feathering, as only the first note will be passed to the function.]
"

Aaron's correct ofcourse. And now you made the same mistake.  ;)
The argument of featherDurations needs to be enclosed with { and }, at
least if you want featherDurations be applied to sequential music.
(and I can't imagine a case where one wouldn't want to do so)

Cheers,
Harm

```

reply via email to