On 27 November 2017 at 00:24, David Kastrup <[email protected]> wrote:
> Gianmaria Lari <[email protected]> writes:
>
> > On 8 November 2017 at 18:15, David Kastrup <[email protected]> wrote:
> >
> >> Gianmaria Lari <[email protected]> writes:
> >>
> >> > Talking about midi, is there any way to to reduce or increase the
> tempo
> >> of
> >> > some measures by a certain percentage instead of setting it to an
> >> absolute
> >> > value?
> >> >
> >> > For example instead of:
> >> >
> >> > \tempo 4=100 a b c d
> >> > \tempo 4=110 e f g a
> >> >
> >> >
> >> > something like
> >> >
> >> > \tempo 4=100 a b c d
> >> > \tempo 4=currentTempo*1.1 e f g a
> >> >
> >>
> >> Well, it's not pretty (but then one can try wrapping the prettiness into
> >> a music function), but here goes:
> >
> > I tried to make it pretties. Here it is the code:
> >
> > \version "2.19.80"
> > increaseTempo =
> > #(define-music-function (factor)(number?) #{
> > \context Timing \applyContext
> > #(lambda (c)
> > (set! (ly:context-property c 'tempoWholesPerMinute)
> > (ly:moment-mul (ly:context-property c 'tempoWholesPerMinute)
> > (ly:make-moment factor))))
> >
> > #} )
> >
> > \score {
> > {
> > \tempo 4=100
> > a b c' d'
> > \increaseTempo 3
> > e' f' g' a'
> > }
> > \midi {}
> > \layout {}
> > }
> >
> > This works ok only when \increaseTempo argument is integer. If i try
> > \increaseTempo 2.5 it doesn't work. How to fix it?
>
> You need exact numbers. So \increaseTempo ##e2.5 should work. Which is
> equivalent to \increaseTempo #5/2 .
>
> Either that, or you write instead of factor something like
> (rationalize (inexact->exact factor) #e0.0001)
>
> --
> David Kastrup
>
Dear David, thank you for your help. Both solution works perfectly.
I checked online for the rationalize and inexact->exact and now this is
clear. But why don't simply round or trunc the function argument? And
what's about the other syntax #a/b?
I copy here the complete code so that others can take advantage of it.
%%%%% Increase tempo using a "fraction" argument
\version "2.19.80"
increaseTempo =
#(define-music-function (factor)(number?) #{
\context Timing \applyContext
#(lambda (c)
(set! (ly:context-property c 'tempoWholesPerMinute)
(ly:moment-mul (ly:context-property c 'tempoWholesPerMinute)
(ly:make-moment factor))))
#} )
\score {
{
\tempo 4=100
a b c' d'
\increaseTempo ##e2.5 %equivalent to \increaseTempo #5/2
e' f' g' a'
}
\midi {}
\layout {}
}
%%%%% Increase tempo using
increaseTempo =
#(define-music-function (factor)(number?) #{
\context Timing \applyContext
#(lambda (c)
(set! (ly:context-property c 'tempoWholesPerMinute)
(ly:moment-mul (ly:context-property c 'tempoWholesPerMinute)
(ly:make-moment (rationalize (inexact->exact factor)
#e0.0001)))))
#} )
\score {
{
\tempo 4=100
a b c' d'
\increaseTempo 2.5
e' f' g' a'
}
\midi {}
\layout {}
}
Thank again, g.
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user