// title: Gradually change TempoClock tempo [ accelerando / decelerando ] // author: Tom Dugovic // description: // This 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. // code: t = TempoClock(120/60).permanent_(true); ( ~change_clock_tempo = {|clock, tempo, beats=1| beats.do {|beat| var stepTempo = beat.linexp(0, beats-1, clock.tempo, tempo); clock.schedAbs(clock.nextBar + beat, { "New Tempo: ".post; (stepTempo*60).post; " BPM".postln; clock.tempo_(stepTempo); }); }; nil; }; Pbindef(\n, \octave, 4, \dur, 0.5, \degree, Pseq((0..7), inf) ).play(t, quant: 4); ); ~change_clock_tempo.value(t, 200/60, 16); ~change_clock_tempo.value(t, 50/60, 8); t.tempo*60