On 2019-02-22 11:29 pm, Martin Tarenskeen wrote:
I tried to create it as a \markup. For MIDI output this doesn't work
though. You could add \midi { \tempo 8 = 145 } for that.
%%%%%%%%%%
\score {
{
\tempo \markup {
\concat {
\smaller \general-align #Y #DOWN
\note #"4" #1 " = 72.5"
}
}
c'
}
\layout {}
\midi { \tempo 8=145 }
%%%%%%%%%%
Should \tempo be used within a \midi block? According to a rule in
convertrules.py, it was deprecated in favor of directly setting
tempoWholesPerMinute, which supports being set to any rational number:
%%%%
\midi { \context { \Score
tempoWholesPerMinute = #(ly:make-moment 987 29) %% ~136.138 BPM
} }
%%%%
Mind you, that rule was back in 2.9.16. And it doesn't sound like
anything was actually deprecated if \tempo still works in \midi.
Regardless, it should be noted that LilyPond internally only supports
specifying an integral number of quarter notes per minute. This comes
from Tempo_performer::process_music casting the rational
tempoWholesPerMinute to an integer after multiplying by four, since
Audio_tempo::per_minute_4 is an integral type.
If we consider the crazy value in my example above, LilyPond would end
up storing this as only 136 BPM before converting it to the value stored
in the MIDI file.
The MIDI specification allows pretty fine granularity for tempo, letting
you specify the number of microseconds per quarter note. For 136.138
BPM, that works out to 440,729 microseconds per quarter note whereas an
exact 136 BPM is 441,176 microseconds per quarter note--a difference of
about 447 microseconds per quarter note. After 2,237 quarter
notes--roughly 16.45 minutes of music--there would be a drift of one
second.
tl;dr: \tempo 8=145 will unfortunately not result in \tempo 4=72.5.
Depending on rounding, it would end up as either 72 or 73.
-- Aaron Hill
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user