[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Tweaking individual ties in a chord
From: |
Thomas Morley |
Subject: |
Re: Tweaking individual ties in a chord |
Date: |
Tue, 29 Mar 2016 16:04:02 +0200 |
2016-03-29 15:34 GMT+02:00 Thomas Morley <address@hidden>:
> 2016-03-29 15:26 GMT+02:00 Thomas Morley <address@hidden>:
>> 2016-03-29 12:19 GMT+02:00 Thomas Morley <address@hidden>:
>>> 2016-03-29 10:41 GMT+02:00 Andrew Bernard <address@hidden>:
>>>> Can you tweak individual ties in a chord (despite that the NR says that
>>>> this
>>>> is a known issue)? I am always hopeful there are solutions.
>>>>
>>>> The 2.19.38 NR says in Section 5.3.4:
>>>>
>>>>
>>>> When several similar items are placed at the same musical moment, the
>>>> \override command cannot be used to modify just one of them – this is where
>>>> the \tweak command must be used. Items which may appear more than once at
>>>> the same musical moment include the following:
>>>>
>>>> note heads of notes inside a chord
>>>> articulation signs on a single note
>>>> ties between notes in a chord
>>>> tuplet brackets starting at the same time
>>>>
>>>>
>>>>
>>>> This gives the impression that ties in a chord can be tweaked. Is this
>>>> simply incorrect?
>>>>
>>>> Andrew
>>>>
>>>> — snip
>>>>
>>>> \version "2.19.38"
>>>>
>>>> {
>>>> <g' _~ b' ^~ d'' ^~>4 <g' b' d''>
>>>>
>>>> % tweaks all the ties not just the first
>>>> <g'-\tweak Tie.details.height-limit #4 ~ b' ^~ d'' ^~>4 <g' b' d''>
>>>> }
>>>>
>>>>
>>>> — snip
>>>
>>>
>>> Hi Andrew,
>>>
>>> there's shapeTieColumn already, see:
>>> http://lilypond.1069038.n5.nabble.com/Shape-of-individual-ties-in-chords-td158120.html#a158343
>>> http://www.mail-archive.com/address@hidden/msg47432/shape-tie-columns.ly
>>> https://github.com/openlilylib/openlilylib/tree/master/notation-snippets/shaping-bezier-curves/shape-tie-column
>>>
>>> But there is an issue with 'control-points in a TieColumn:
>>> https://sourceforge.net/p/testlilyissues/issues/1789/
>>> I don't know the current state of it, but there is a workaround.
>>>
>>>
>>> Though, you asked about Tie.details.height-limit, let me have a closer
>>> look...
>>>
>>> Cheers,
>>> Harm
>>
>> The mentioned bug is indeed present and a major nuisance.
>> Though, I come up with the nasty coding below, although I recommend
>> thorough testing on real life examples.
>> Limitations/problems are mentioned in the function's description.
>
> Glitch found.
> Please change after-line-breaking to before-line-breaking.
>
>>
>> \version "2.19.36"
>>
>> \layout {
>> indent = 0
>> ragged-right = ##f
>> }
>>
>> test =
>> #(define-music-function (vals)(list?)
>> "Sets details.hight-limit for ties in @code{TieColumn}, then suiciding
>> @code{TieColumn}.
>> Relies on setting @code{~} for each note of an event-chord AND setting
>> direction-modifiers, i.e. @code{^~} or @code{_~} will work, but not
>> simple @code{~}. Otherwise a programming error occurs:
>> 'no Tie_column or Semi_tie_column. Killing grob.'
>> "
>> #{
>> \override TieColumn.after-line-breaking =
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> #(lambda (grob)
>> (let* ((ties (ly:grob-array->list (ly:grob-object grob 'ties))))
>> (for-each
>> (lambda (g h-l)
>> (ly:grob-set-nested-property! g '(details height-limit) h-l))
>> ties
>> vals) ;; starting with lowest tie
>>
>> ;; let the new values displayed in terminal:
>> ;(for-each
>> ; (lambda (g)
>> ; (format #t "details.hight-limit is ~y"
>> ; (assoc-get 'height-limit (ly:grob-property g 'details))))
>> ; ties)
>>
>> (ly:grob-suicide! grob)))
>> #})
>>
>> unTest =
>> \revert TieColumn.after-line-breaking
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>> %% EXAMPLE
>> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>>
>> {
>> %% works
>> \test #'(4.0 1.2 2.3)
>> <g' _~ b' _~ d'' ^~>4 q
>>
>> \unTest
>> <g' _~ b' _~ d'' ^~>4 q
>>
>> \break
>>
>> %% doesn't work
> %% returns the mentioned programming error
>> \test #'(4.0 1.2 2.3)
>> <g' b' d''>4~ q
>>
>> \unTest
>> <g' b' d''>4~ q
>> }
>>
>>
>> HTH,
>> Harm
Likely esier:
testII =
#(define-music-function (vals mus)(list? ly:music?)
#{
\override TieColumn.before-line-breaking =
#(lambda (grob)
(let* ((ties (ly:grob-array->list (ly:grob-object grob 'ties))))
;; starting with lowest tie
(for-each
(lambda (g h-l)
(ly:grob-set-nested-property! g '(details height-limit) h-l))
ties
vals)))
$mus
\once\override TieColumn.positioning-done = #'()
#})
{
s1
\break
\testII #'(7 2 6)
<
g' _~
b' _~
d'' ^~
>4
q
}
%% or manually:
{
s1
\break
<
g'-\tweak Tie.details.height-limit #7 _~
b'-\tweak Tie.details.height-limit #2 _~
d''-\tweak Tie.details.height-limit #6 ^~
>4
\once\override TieColumn.positioning-done = #'()
q
}
HTH,
Harm