|
From: | Lukas-Fabian Moser |
Subject: | Re: Ties between voices |
Date: | Sat, 23 Jul 2022 12:49:13 +0200 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 |
Hi Andrew,
I know that we can't natively make ties between notes in different voices. I know that there was a Google Summer of Code task that could not be completed.
A few weeks ago, I sent you the following privately (I was too timid to post in on the list):
My idea was to \consist the Tie_engraver to the Staff context not _instead_ of to the Voice context, but _in addition_. Then we have two Tie engravers and need a mechanism by which to tell if a given tie should be collected by the Voice-level Tie_engraver or at Staff level (in order to connect ties between different voices).
During my experiments I re-implemented the Tie_engraver in Scheme; although it turned out that (contrary to my expectations) the necessary adjustments could just as easily have been made in C++, the advantage is that we can test this approach without the need to re-compile a custom LilyPond build.
The attached file (requiring 2.23.6 and above) generates
as easily as:
\new Staff \with { \consists #New_tie_engraver }
{
<<
\relative {
<c''~ c,\to Staff~>4 c8 b a g~ 4
}
\\
\relative {
s4 c'2 e4
}
>>
}
Of course the same mechanism might be implemented for, e.g., the Slur_engraver. But this requires additional work, as the slur positioning mechanism is not quite up to positioning Staff-level slurs correctly.
The attached Scheme Tie_engraver may be used as a drop-in replacement for the standard C++ Tie_engraver; in my local branch, it compiles the full regression test suite without causing differences.)
Lukas
tie-engraver.ly
Description: Text Data
[Prev in Thread] | Current Thread | [Next in Thread] |