lilypond-user
[Top][All Lists]
Advanced

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

Re: BendSpanner-engraver


From: Thomas Morley
Subject: Re: BendSpanner-engraver
Date: Tue, 13 Sep 2016 22:41:13 +0200

Hi Marc et all,

thanks for the friendly words, I'll reply more detailed one by one.

Right now I was a very long time among the details of this coding,
I've the feeling I sometimes overlook major points in the overall
code.
In german we have: " Ich kann den Wald vor lauter Bäumen nicht mehr
sehen." No clue if this can be translated sufficiently ...
I made the experience in such cases to take a break from it doing
something else helps a lot.
Even if I wouldn't want to take one I'm forced to: my regular job
started after summer-break :((

That said :

2016-09-13 8:33 GMT+02:00 Marc Hohl <address@hidden>:
> Hi Harm, hi list,
>
> I did some simple tests and looked through the code in more detail:
>
> ---
>
> The customization features are great! Also, I like the dashed line of the
> pre-pend-hold use cases.
>
> The dashed line would also be great in cases like those:
>
> c'\3\startBend d'\3\stopBend~ d'\3
> % bend up, no release, bent note is tied
>
> c'\3\startBend d'\3\stopBend~ d'\3~ d'\3\startBend c'\3\stopBend
> % bend up, bent note is tied, release

Looks doable, I'll probably try the upcoming weekend.

> ---
>
> In my archives, I found a real-world-example that does not (yet) work:
>
> < g'\3 b'\2 >4\startBend
> < a'\3 c''\2 >\stopBend\startBend
> < g'\3 b'\2 >2\stopBend
>
> It is not that easy to play on guitar, but the lower string is raised by two
> semitones, whereas the upper string is raised by one semitone.

The coding doesn't support bends to different amounts. And I don't
think it's really needed, you could already do:

ex-marc = {
  \once \override BendSpanner.after-line-breaking =
    #(lambda (grob)
      (ly:grob-set-property! grob 'text
        #{
          \markup
            \override #'(direction . 1)
            \override #'(baseline-skip . 1.5)
            \dir-column \halign #CENTER {
              \italic \fontsize #-2 "full"
              #(ly:grob-property grob 'text)
            }
        #}))
< g'\3 b'\2 >4\startBend
< a'\3 c''\2 >\stopBend\startBend
< g'\3 b'\2 >2\stopBend
}

\score {
  <<
    \new Staff { \clef "G_8" \ex-marc }
    \new TabVoice \ex-marc
  >>
}

Well, we can't expect a user to find his way to this coding, maybe
some predefined function, will do it!?

> I hope to find the source somewhere to provide you a scan of how it should
> look like.

Would be great.

>
> ---
>
> Another idea/thought/proposal: IIUC, the engraver does not take the string
> numbers into account. I think this would be a good feature from a user's
> point of view:
>
> c'\startBend d'\stopBend\startBend c'\stopBend
>
> could then probably be simplified to
>
> c'\3\startBend d'\3 c'\3\stopBend

You may have noticed the file bend-music-functions.ly being remarkable short.
Coding shortcuts and appending them to the bend-music-functions-file
is on the TODO

Something at the lines of:

bendShortCut =
#(define-music-function (m1 m2 m3) (ly:music? ly:music? ly:music?)
  (let ((arts1 (ly:music-property m1 'articulations)))
  (ly:music-set-property! m1 'articulations
    (cons
      #{ \startBend #}
      (ly:music-property m1 'articulations)))
  (ly:music-set-property! m2 'articulations
    (cons
      #{ \stopBend #}
      (ly:music-property m2 'articulations)))

  (ly:music-set-property! m2 'articulations
    (cons
      #{ \startBend #}
      (ly:music-property m2 'articulations)))

  (ly:music-set-property! m3 'articulations
    (cons
      #{ \stopBend #}
      (ly:music-property m3 'articulations))))
  (make-sequential-music (list m1 m2 m3)))

\new TabVoice {
  \bendShortCut c' d' c'
}

This is a very first shot, more a proof-of-concept...

>
> if the engraver internally takes care of each string seperately.
> I don't know how hard an implementation would be, but tied notes on a
> certain string can be detected automatically, so the dashed "keep this note
> bent"-line replaces a tied note.
> Perhaps the slow-down in the bend::remove-certain-tab-note-heads routine
> can be avoided if bend events are handled specifically for certain strings:
>
> < g\3~ b\2~ fis'\1\startBend > < g\3 \b\2 g'\1\stopBend >

I considered it already.
Though, the engraver mimics the behaviour of TextSpanner.
And you can't start a TextSpanner inside EventChord.

I didn't figure how to do it different.


I have a suspicion about the slow down...
Will test as soon as I have some spare time, though it's a highly
complex and huge coding.
Sometimes I feel like touching the limits of my current coding skills.
Proceeding means to do all very carefully and thoroughly and _not_ in
any hurry ;)

> ---
>
> I do hope my feedback does not sound too negative,

Not at all!!!
I highly appreciate your input

> this is a huge amount of
> work you have done for us guitar players! Thanks a lot!

Although, guitar-player myself I never use TabStaff
rofl

>
> Cheers,
>
> Marc


Thanks,
  Harm



reply via email to

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