Paolo Prete <[email protected]> writes: > On Thu, Oct 21, 2021 at 3:04 PM David Kastrup <[email protected]> wrote: > >> >> >> Here's a cut&paste of something I currently use in scores of mine for >> doing things like accelerando, ritardando, and so on. >> >> tempoChange = >> #(define-music-function (interval endscale thenscale music) >> (ly:duration? scale? (scale? 1) ly:music?) >> "Make a gradual tempo change over @var{music}, essentially changing >> speed after >> every duration of @var{interval}, approaching a factor of speed of >> @var{endscale} >> compared to the start. Afterwards, tempo is switched to @var{thenscale} >> of the >> original speed (default 1). If @var{thenscale} is 0, the speed reached at >> the >> end is just maintained and can be overriden with an explicit @samp{\\tempo} >> command if required." >> (define (scaletempo oldscale newscale) >> (make-apply-context >> (lambda (ctx) >> (set! (ly:context-property ctx 'tempoWholesPerMinute) >> (ly:moment-mul (ly:context-property ctx 'tempoWholesPerMinute) >> (ly:make-moment (/ newscale oldscale))))))) >> >> (let* ((muslen (ly:moment-main (ly:music-length music))) >> (intlen (ly:moment-main (ly:duration-length interval))) >> (steps (/ muslen intlen)) >> (endfactor (scale->factor endscale)) >> (thenfactor (scale->factor thenscale))) >> (make-simultaneous-music >> (list music >> (context-spec-music >> (make-sequential-music >> (let loop ((rsteplst (iota (1+ steps) endfactor (/ (- 1 >> endfactor) steps))) >> (res (if (positive? thenfactor) >> (list (scaletempo endfactor thenfactor)) >> (list)))) >> (if (null? (cdr rsteplst)) >> res >> (loop (cdr rsteplst) >> (cons* (scaletempo (cadr rsteplst) (car >> rsteplst)) >> (make-skip-music (ly:make-duration 0 0 >> intlen)) >> res))))) >> 'Score))))) >> >> See if that helps you achieve your objective. >> >> > This is interesting, thanks, but I don't understand if it fits with the > growing beam example. > When that beams occur, I need three parameters: > > 1) the \tempo just before the beam > 2) the \tempo at first note of the beam > 3) the \tempo at the last note of the beam. > > Soon after the beam, I need that the tempo must be reset to 1)
That's the default. > From what I see, in your code, at the end of $music the tempo is reset to > 2) : am I wrong? I guess so. 2) is not separately settable but determined by the requested overall speed change (probably 1/2 or 2/1 in your case) divided by the number of steps requested (probably 4 or 8 or so). -- David Kastrup
