Meandering notes

Following a question on in_thread which I answered earlier today, I played around with the chord definition I proposed and ended up with the piece below. I love the way that Sonic Pi is so flexible and easily and quickly lets you develop an idea with pleasing (to me at least) results.

#meanderingNotes by Robin Newman
#resulting from a question asked on in_thread
use_random_seed 2020
use_debug false
define :linkbpm do #adjusts link speed up and down 
  
  in_thread do #in thread raise the link bpm from 40 to 100
    set_link_bpm! 40
    sp=40
    60.times do
      sleep 0.5
      sp+=1
      set_link_bpm! sp
      
    end
    sleep rt(30) #real time 30 seond wait
    60.times do #decrease the link speed back to 40
      sleep 0.5
      sp -= 1
      set_link_bpm! sp
    end
  end
end

linkbpm #start link bpm variation
with_fx :reverb, room: 0.5,mix: 0.6 do #add some reverb
  n= chord_names
  define :chordPlusOctave do |base,type| #defines 4 note chord
    (chord(base,type).to_a + [note(base)+12])#.sort
  end
  use_synth :tb303
  
  live_loop :test do
    base=[:c4,:f4,:g4,:g3].choose #select root of chord
    type = n.choose #chose chord type
    tick_reset #this tick used to traverse through the chord
    detail= "chord is #{base} #{type} including octave note" #description
    rev = dice(2)==1 #random flag to reverse the chord
    l= chordPlusOctave(base,type) #choose the chord notes
    if dice(2)==1 #sort the chord sometimes
      l=l.sort
      detail=detail+", sorted" #indicate sorted
    end
    if rev
      detail=detail+" and reversed" #indicate reversed
    end
    puts detail #print description
    cut=rrand_i(80,110) #choose cutoff
    density [1,3,1,1,2].choose do #vary density
      chordPlusOctave(base,type).length.times do #arppegiate chord notes
        play l.tick,cutoff: cut,amp: 0.5,pan: (-1)**dice(2) if rev #vary pan and direction
        play l.reverse.tick,cutoff: cut,amp: 0.5 ,pan: (-1)**dice(2) if !rev
        sleep 0.25
      end
    end
    stop if vt>90
  end
  
end#reverb
2 Likes