I have heard that teaching is a good way of learning, so here I am, a learner, offering a useful(?) template for an adaptable sequencer.
The point of it is ithe first time you press play, and when you press it after stop, the sequencer restarts, but if you press play while it is playing, it continues from where it had got to.
Leave the lines involving SET and GET alone. (You can modify the sequence by changing the variables ax, bc, cx and dx if you like, probably best to do that at the end of the live_loop if they are likely to be outside the bounds of their respective arrays, as the code that sets them at the end of the live_loop increment item by one and then wraps them to fit inside their arrays.
Everything else is fair game for rewriting as you fancy. If you have really long lists of numbers for the sequencer arrays a, b, c, and d, put them in text files and uncomment the eval lines at the top.
It’s currently set up with a demonstrateion piece.
a = [ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] b = [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] c = [ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 ] d = [ 0, 0, 51, 54, 0, 0, 51, 48, 0, 0 ] # a = eval_file "" # b = eval_file "" # c = eval_file "" # d = eval_file "" if not defined?(a1) then set :ai,0; set :bi,0; set :ci,0; set :di,0 end set_mixer_control! amp: 0.75 live_loop :one do ax = get:ai; bx = get:bi; cx = get:ci; dx = get:di use_bpm 180 use_synth :piano use_synth_defaults release: 3 if a[ax] != 0 play 60 end if b[bx] != 0 play 63 end if c[cx] != 0 play 66 end if d[dx] != 0 synth :fm, note:d[dx], attack:2, release:2, amp:0.15 end if a[ax]+b[bx]+c[cx]+d[dx] == 0 sample :bd_zome, amp: tick % 5 / 25.0 sleep 1/2.0 else sleep 1/3.0 end set :ai,(ax+1)%a.size; set :bi,(bx+1)%b.size set :ci,(cx+1)%c.size; set :di,(dx+1)%d.size end