lilypond-user
[Top][All Lists]
Advanced

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

Re: Making feathered beams more variable


From: Thomas Morley
Subject: Re: Making feathered beams more variable
Date: Fri, 28 Oct 2011 15:18:02 +0200

Hi David,

2011/10/28 David Nalesnik <address@hidden>
Hi Harm,

On Tue, Oct 25, 2011 at 12:05 PM, harm6 <address@hidden> wrote:

Hi David,

David Nalesnik-2 wrote:
>
> Hi Harm,
>
> On Mon, Oct 24, 2011 at 4:09 PM, Thomas Morley <
> address@hidden> wrote:

I'm looking for a method to integrate something like:

(if (= number 0)
    use: \override Beam #'grow-direction = #LEFT
(if (>= number stem-count)
    use: \override Beam #'grow-direction = #RIGHT
    otherwise use: \override Beam #'stencil = (grow-beam-var arg)

into the Beam-stencil-override.

I'm aware of the possibility to create a function to do that, but this is
not intended.

So, is it possible to program (grob-property-set! grob 'grow-direction LEFT)
somewhere in a stencil-override?


I'm not sure I understand what you want here.  Would you like to duplicate the effect of these overrides in the function (say by adding in null stencils), or actually call them when certain conditions are met?  The attached file does the latter.
 
Sorry, if I wasn't clear, but you did understand what I wanted! :)
Now it works fine.

(...)

There are two problems left.
First tiny problem:
The output with kneed-beams is ugly in some cases:
This example gives a overlooking stem at beam-end (test-code only)

xy = \once\override Stem #'french-beaming = ##t

\relative c {
       \once\override Beam #'stencil = #(grow-beam-var 5)
       f32 [ \xy f''' f,,, \xy f''' f,,, \xy f''' f,,, \xy f''' f,,, \xy
f''']
}

I'm not sure how to fix. 'french-beaming only works with the inner stems.
Is there a default-command I can't find? Should I integrate something into
the definition of grow-beam-var? Or create a separate override for this
stem?


I don't know if there's a setting to allow 'french-beaming to work with outer stems of a beam group. (I checked some Durand scores of Messiaen, and sure enough, the outer stems span the entire beam.)  I tried various overrides to adjust the length of the final stem only, and the solution I got to work is this:

xy = \once\override Stem #'french-beaming = ##t

\relative c {
  \once \override Beam #'stencil = #(grow-beam-var 5)
  f32 [ \xy f''' f,,, \xy f''' f,,, \xy f''' f,,, \xy f''' f,,, \xy
  \once \override  Stem #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'length 11)
    (ly:stem::print grob))  
  f''']
}

I changed your suggestion to a function (I've no problems using a function in this case) and tested both:
1. It doesn't works with "2.14.2", but with "2.15.13" there are no problems.
    Does it work with "2.14.2" for you?
2. Using it with \change Staff doesn't work! Maybe an issue with \change Staff?

\version "2.15.13"

xy = \once\override Stem #'french-beaming = ##t

#(define ((stem-length y) grob)
   (ly:grob-set-property! grob 'length y)
   (ly:stem::print grob))

xyOut =
#(define-music-function (parser location y-length)(number?)
#{
        \once \override  Stem #'stencil = #(stem-length $y-length)
#})

% This works
\relative c {
  \once \override Beam #'stencil = #(grow-beam-var 5)
  f32 [ \xy f''' f,,, \xy f''' f,,, \xy f''' f,,, \xy f''' f,,,
  \xyOut #11
  f''']
}

% This not. Issue in \change Staff ?

top = \change Staff = "1"
bottom = \change Staff = "2"

music = \relative c {
  \override Beam #'auto-knee-gap = #0
  \override Beam #'stencil = #(grow-beam-var 1)
    \bottom cis32[
    f
    %\xyOut #0
    \once \override  Stem #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'length 0)
    (ly:stem::print grob)) 
    \top f'']
}

\score {
  \new PianoStaff <<
    \new Staff = "1" {
      s16.
    }
    \new Staff = "2" {
      \clef bass
      \music
    }
  >>
}
 


Regarding the following example I'm not sure: should the peak point up or
down? What do you think?

\relative c' {
       \override Beam #'auto-knee-gap = #4
       \override Beam #'stencil = #(grow-beam-var 16)
       c''32 [b a g
       f g a b
       c b a g
       f g a b
       e,,, c''' b a
       g a b c
       d c b a
       g a b c]
       c1
}

Well, with the current position of the beam, what you have is the only option.  Otherwise the beam will cover the ledger lines.

To avoid covering the ledger lines I used a 'positions-override and changed the function a little to get the possibility to turn the peak up or down, if I use negative values. But only if the beam is kneed and level. I'm afraid it would be too much work to generalize this feature, needed only in very special cases.
See attached file.

 
Second problem.
I tried to use \featherDuration with my Definition, but it doesn't work as
expected (seems it works only once a beam):

(...)

There's a "known warning" about \featherDurations which applies here, I think.  You have too many notes in the group. Your beams work with this short example:

\relative c'' {
  \override Beam #'stencil = #(grow-beam-var 4)
  \featherDurations #(ly:make-moment 1 2)
  {c32[ c c c} \featherDurations #(ly:make-moment 2 1) {c c c c]} c2. 
}

Maybe you could think of some artful way to modify the function in music-functions-init.ly to incorporate the increase/decrease.  That way you could handle the peak smoothly.

I knew about the "known warning", though, perhaps there is someone out there, who worked with it and could give me some hint.
And I will try myself. :)
 

I hope this helps!

 
You leveled up my function 1000% at least!

Thanks a lot!
  Harm

Attachment: harm-feathered-beams-align-to-stems-rev_04.ly
Description: Text Data


reply via email to

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