|
From: | Urs Liska |
Subject: | Re: (Urgent:) Getting start and end translation-timestep of a (hairpin) grob |
Date: | Sat, 11 Apr 2015 16:53:07 +0200 |
User-agent: | K-9 Mail for Android |
On Sat, Apr 11, 2015 at 9:01 AM, David Nalesnik <address@hidden> wrote:DNHi Urs,On Sat, Apr 11, 2015 at 3:31 AM, Urs Liska <address@hidden> 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~\>\breakc''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)))))
[Prev in Thread] | Current Thread | [Next in Thread] |