I think the issue is that you want different tempos in parallel parts. LilyPond doesn't support that. It internally tracks time in whole notes, not seconds. If the measures in parallel parts are to have the same length (on the page) then they must have the same internal length in wholes.
There's an exampleThere are examples in the documentation of what I think you want in the Polymetric notation section. YouIn general, you need to:
- Pick a value Linternal to serve asan "internal tempo", which may match the internal measure length
- Applynotated tempo of one or more parts.
\scaleDurations
with(The formulas below assume the argument Linternalunits for tempos are wholes/Lactual to each partminute or similar, so larger is faster.) - Use
\time
withWrite the internal lengthnotated tempo for each part as an argumentmarkup. Since it's uninterpreted by LilyPond, but\set Staff.timeSignatureFraction
to the time signature you wantcan write whatever you like, including values rounded to actually appear on the pagethree decimal places. - If you want the correct tempo in MIDI output, set
\tempo
to Linternal = (1 minute / duration), and possibly\omit
it so it doesn't printIn each part write something like
\time (notated measure duration * internal tempo / notated tempo)
\set Staff.timeSignatureFraction = (notated measure duration)
\scaleDurations (internal tempo / notated tempo) {
...
}
If you want unaligned measure boundaries then you also need \enablePolymeter
as shown in the second example in the documentation.
If you want the speed of MIDI output to be correct, add \tempo
followed by the internal tempo to the \midi
block, or \omit \tempo
somewhere in the score. If you don't care about MIDI then it's not necessary.