[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
Re: BendSpanner-engraver, Federico Bruni, 2016/09/11
Re: BendSpanner-engraver, Trevor Daniels, 2016/09/11