Hi David, 

thanks a lot, looks promising. I'll have a look later when I'm home.

Urs

Am 11. April 2015 16:07:24 MESZ, schrieb David Nalesnik 
<david.nales...@gmail.com>:
>On Sat, Apr 11, 2015 at 9:01 AM, David Nalesnik
><david.nales...@gmail.com>
>wrote:
>
>> Hi Urs,
>>
>> On Sat, Apr 11, 2015 at 3:31 AM, Urs Liska <u...@openlilylib.org>
>wrote:
>>
>>> Hi,
>>>
>>> this is related to my previous thread and particularly to the file
>>> attached to
>>>
>http://lists.gnu.org/archive/html/lilypond-user/2015-04/msg00263.html
>>>
>>> If I have a Scheme engraver listening to TextScript-s I can get a
>list of
>>> entries at the same timestep and then compare them for equality.
>>> This even works without changes for DynamicText because that also
>has a
>>> 'text property. But if i have spanners such as hairpins it's not
>that
>>> simple anymore. So I'm asking myself if I can access the starting
>and
>>> ending timesteps of hairpins that are present in such a list. Of
>course I
>>> can collect hairpins in a list like I can collect TextScripts
>(currently
>>> I'm listening for line-interface). But is it possible to retrieve
>the start
>>> *and* end position of such items?
>>>
>>> The goal is to iterate over the list and find matching hairpins to
>remove
>>> duplicate ones.
>>>
>>>
>> A simple way to determine when a hairpin starts and ends is by using
>an
>> acknowledger and an end-acknowledger:
>>
>>  myEngraver =
>> #(lambda (context)
>>      (make-engraver
>>
>>       (acknowledgers
>>        ((hairpin-interface engraver grob source-engraver)
>>         (format #t "My start is at ~a~%" (ly:context-current-moment
>> context))))
>>
>>       (end-acknowledgers
>>        ((hairpin-interface engraver grob source-engraver)
>>         (format #t "My end is at ~a~%" (ly:context-current-moment
>> context))))
>>      ))
>>
>> \layout {
>>   \context {
>>     \Score
>>     \consists \myEngraver
>>   }
>> }
>>
>> {
>>   c''1~\<
>>   c''1\!
>>   c''2.\< c''4\!
>>   c''1~\>
>>   \break
>>   c''2~ c''\!
>> }
>>
>>
>> If you're collecting the hairpins for processing later, you could
>find the
>> timings of beginnings and endings through the columns at their
>bounds:
>>
>> myEngraver =
>> #(lambda (context)
>>    (let ((hairpins '()))
>>      (make-engraver
>>       (acknowledgers
>>        ((hairpin-interface engraver grob source-engraver)
>>         (set! hairpins (cons grob hairpins))))
>>
>>       ((finalize trans)
>>        (for-each
>>         (lambda (hp)
>>           (format #t "BEGINNING ~a END: ~a~%"
>>
>
>
>Not that you will use this method, but the following two lines ought to
>be
>
>
>            (grob::when (ly:spanner-bound hp LEFT))
>            (grob::when (ly:spanner-bound hp RIGHT))))
>
>           (grob::when (ly:item-get-column (ly:spanner-bound hp LEFT)))
>>             (grob::when (ly:item-get-column (ly:spanner-bound hp
>RIGHT)))))
>>         hairpins))
>>       )))
>>
>>
>DN
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to