Experiment with just intervals on continuous frequency (dynamic scale root / dynamic tuning)

r = [
  1/2.0,
  1/3.0,
  2/3.0,
  2/5.0,
  3/4.0,
  3/5.0,
  3/7.0,
  3/8.0,
  4/5.0,
  4/7.0,
  4/9.0,
  4/11.0,
  4/13.0,
  5/6.0,
  5/7.0,
  5/8.0,
  5/9.0,
  6/7.0,
  6/11.0,
  6/13.0,
  6/17.0,
  7/8.0,
  7/9.0,
  7/10.0,
  7/11.0,
  7/12.0,
  7/13.0,
  7/15.0,
  7/16.0,
  7/17.0,
  7/18.0,
  7/19.0,
  7/20.0,
  ##| 8/9.0,
  ##| 8/11.0,
  ##| 8/13.0,
  ##| 8/15.0,
  ##| 8/17.0,
  ##| 8/19.0,
  ##| 8/21.0,
  ##| 8/23.0,
  1/1.0,
  2/1.0,
  3/1.0,
  3/2.0,
  5/2.0,
  4/3.0,
  5/3.0,
  7/3.0,
  8/3.0,
  5/4.0,
  7/4.0,
  9/4.0,
  11/4.0,
  13/4.0,
  6/5.0,
  7/5.0,
  8/5.0,
  9/5.0,
  7/6.0,
  11/6.0,
  13/6.0,
  17/6.0,
  8/7.0,
  9/7.0,
  10/7.0,
  11/7.0,
  12/7.0,
  13/7.0,
  15/7.0,
  16/7.0,
  17/7.0,
  18/7.0,
  19/7.0,
  20/7.0,
  ##| 9/8.0,
  ##| 11/8.0,
  ##| 13/8.0,
  ##| 15/8.0,
  ##| 17/8.0,
  ##| 19/8.0,
  ##| 21/8.0,
  ##| 23/8.0
]
ru = [
  1/1.0,
  2/1.0,
  3/1.0,
  3/2.0,
  5/2.0,
  4/3.0,
  5/3.0,
  7/3.0,
  8/3.0,
  5/4.0,
  7/4.0,
  9/4.0,
  11/4.0,
  13/4.0,
  6/5.0,
  7/5.0,
  8/5.0,
  9/5.0,
  7/6.0,
  11/6.0,
  13/6.0,
  17/6.0,
  8/7.0,
  9/7.0,
  10/7.0,
  11/7.0,
  12/7.0,
  13/7.0,
  15/7.0,
  16/7.0,
  17/7.0,
  18/7.0,
  19/7.0,
  20/7.0,
  ##| 9/8.0,
  ##| 11/8.0,
  ##| 13/8.0,
  ##| 15/8.0,
  ##| 17/8.0,
  ##| 19/8.0,
  ##| 21/8.0,
  ##| 23/8.0
]
rd = [
  1/1.0,
  1/2.0,
  1/3.0,
  2/3.0,
  2/5.0,
  3/4.0,
  3/5.0,
  3/7.0,
  3/8.0,
  4/5.0,
  4/7.0,
  4/9.0,
  4/11.0,
  4/13.0,
  5/6.0,
  5/7.0,
  5/8.0,
  5/9.0,
  6/7.0,
  6/11.0,
  6/13.0,
  6/17.0,
  7/8.0,
  7/9.0,
  7/10.0,
  7/11.0,
  7/12.0,
  7/13.0,
  7/15.0,
  7/16.0,
  7/17.0,
  7/18.0,
  7/19.0,
  7/20.0,
  ##| 8/9.0,
  ##| 8/11.0,
  ##| 8/13.0,
  ##| 8/15.0,
  ##| 8/17.0,
  ##| 8/19.0,
  ##| 8/21.0,
  ##| 8/23.0
]

use_bpm 26
use_random_seed 1

n = 440
n1 = n

index = 0
extra_sleep = 0


with_fx :reverb, room: 0.7 do
  with_fx :reverb, room: 0.2 do
    live_loop :monochord do
      use_synth :tech_saws
      if n <= 180
        n = n * ru[(index + choose([0,0,-1,0,1,0,0])) % ru.length]
      elsif n >= 720
        n = n * rd[(index + choose([0,0,-1,0,1,0,0])) % rd.length]
      else
        n = n * r[(index + choose([0,0,-1,0,1,0,0])) % r.length]
      end
      play hz_to_midi(n), amp: 0.5, sustain: 0.85 + extra_sleep
      n = n1
      index += 19
      sleep 1 + extra_sleep
      extra_sleep = choose([0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,
                            0,0,0.25,0.5,0.5,1,0.25,-0.5,-0.5,-0.25,1.5,2,3,4,5,6])
    end
  end
end


live_loop :krazychord do
  stop
  sleep extra_sleep * 0.5
  use_synth :tri
  if n <= 100
    n = n * choose(ru)
  elsif n >= 600
    n = n * choose(rd)
  else
    n = n * choose(r)
  end
  
  play hz_to_midi(n), amp: 0.5
  play hz_to_midi(n*7/6.0), amp: 0.25
  play hz_to_midi(n*6/5.0), amp: 0.125
  play hz_to_midi(n*5/4.0), amp: 0.0625
  play hz_to_midi(n*4/3.0), amp: 0.03125
  play hz_to_midi(n*3/2.0), amp: 0.015625
  play hz_to_midi(n*2/1.0), amp: 0.0078125
  ##| play hz_to_midi(n*6/7.0), amp: 0.25
  ##| play hz_to_midi(n*5/6.0), amp: 0.125
  ##| play hz_to_midi(n*4/5.0), amp: 0.0625
  ##| play hz_to_midi(n*3/4.0), amp: 0.03125
  ##| play hz_to_midi(n*2/3.0), amp: 0.015625
  ##| play hz_to_midi(n*1/2.0), amp: 0.0078125
  ##| n = n1
  sleep 1 + extra_sleep * 0.5 + choose([0,0.1,0.2,0.3,-0.2,-0.4])
end



n0 = 440

sleep_shift = 0

with_fx :reverb, room: 0.7 do
  with_fx :reverb, room: 0.2 do
    live_loop :bichord do
      use_synth :tech_saws
      if n0 <= 180
        n1 = n1 * ru[index % ru.length]
      elsif n0 >= 720
        n1 = n1 * rd[index % rd.length]
      else
        n1 = n1 * r[index % r.length]
      end
      sleep_shift = choose([0.25,0.5,0.25,0,0,0,0,0])
      sleep sleep_shift
      play hz_to_midi(n0), amp: 0.5, sustain: 0.85 + extra_sleep
      play hz_to_midi(n1), amp: 0.5, sustain: 0.85 + extra_sleep
      n0 = n1
      sleep 1 - sleep_shift + extra_sleep
    end
  end
end