lilypond-user
[Top][All Lists]
Advanced

[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



reply via email to

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