«Re: [improved] Gradually change TempoClock tempo [ accelerando / decelerando ] [extension]» by tom.dugovic
on 13 Apr'22 02:50 inThis gradually changes the tempo of a TempoClock, each beat of a specified number of beats, and starting at the next bar.
Personally, I was not able to heavily distinguish between .linlin
and .linexp
for reasonable musical tempos.
There may be a mathematically smoother way of handling this at the control rate.
This function does not gracefully handle multiple simultaneous invocations.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
// Put this in your extensions directory + TempoClock { gradualTempo_ {|newTempo, beats=4, quant=1| if(beats <=1, { this.tempo_(newTempo); },{ var startTime = this.nextTimeOnGrid(quant); this.schedAbs(this.nextTimeOnGrid(quant), { this.prRecurseGradualTempo(newTempo, beats); }); }); } prRecurseGradualTempo {|finalTempo, beatsRemaining| if(beatsRemaining <= 0, { this.tempo_(finalTempo); }, { var stepTempo = 1.linexp(0, beatsRemaining, this.tempo, finalTempo); this.tempo_(stepTempo); this.sched(1, { this.prRecurseGradualTempo(finalTempo, beatsRemaining-1); }); }); } }
reception
Interesting. Did you know something like this exists already? https://swiki.hfbk-hamburg.de/MusicTechnology/763
I was not aware of that, though I was thinking of trying to implement something like that. Thanks for sharing!