Another sketch using Sonic Pi 5 Tech Preview. Shows how you can alter the sketch as it runs. This one uses a built in loop sample to priced sound. Various parameter are changed to alter the sketch as it runs.
Thanks to Nato Hieda for the idea of using multiple colorama with a gradient feed.
code is shown below.
#Sonic Pi 5 Tech Preview Hydra example
#coded by Robin Newman, February 2023
#shows techniques for controlling and aptering a sketch in a live_loop
use_debug false
set :clobber,false #used to stop the sketch
t=2*Math::PI #time unit
at 108 do #time till clobber is set true
set :clobber,true
end
with_fx :reverb, room: 0.8,mix: 0.7 do
sample :drum_roll,amp: 4 #initial drum roll before the start
sleep t
live_loop :Hydra do
#the following paramters generated as strings are inserted in the hydra sketch string
g=[0.1,0.2,0.4].reverse.tick.to_s #gradient
c=[0.01,0.02,0.05].look.to_s #colorama parameter
rxy=["1,1","1,2","2,1","1,3","3,1"].look #repeat x,y parameter
k=[5,6,7,8].choose.to_s #kaleid parameter
i=[0,0,1,0,1].look.to_s #invert paranter: o gives no inversion
puts "g: #{g} c: #{c} rxy: #{rxy} k: #{k} i: #{i}"
sample :drum_cymbal_hard,amp: 2
#next line sets up hydra code in a string and calls it with hydra function
hydra "speed = 1
gradient("+g+").colorama("+c+").colorama("+c+").colorama("+c+").colorama("+c+")
.colorama("+c+").colorama("+c+").colorama("+c+").colorama("+c+")
.colorama("+c+").colorama("+c+")
.repeat("+rxy+").kaleid("+k+")
.rotate(()=> Math.PI/2*Math.sin(time%360 )).invert("+i+")
.scale(1,25/44.0,1) //set this to adjust for screen aspect ratio 25/44 was the ratio of hegith to width in my setup
.scale(0.5) //reduces size of pattern
.out(o0)"
if get(:clobber) #shut down initiated
sample :drum_roll,amp: 4 #drum roll again during final pattern
sleep t
hydra "solid(0,0,0).out(o0)" #blank screen
sample :drum_heavy_kick,amp: 4 #final drum hit
stop
end
sample :loop_mika,beat_stretch: t #loop_mika repeated with beat stretch t
sleep t #time between sketch changes
end
end#reverb