Trying to be less abstract, started by defining a chord progression with a set of ‘embellishment’ notes for each chord on guitar first.
#All This Static Under Clouded Skies
duration = 240.0
with_bpm 30 do
with_fx :normaliser, level: 0.90 do
chord1 = [:G2, :C3, :G3, :B4, :D4, :G5]
embel1 = [:A5, :C4]
chord2 = [:E3, :D4, :Fs4, :G4, :D5, :E5]
embel2 = [:A5]
chord3 = [:D3, :G3, :D4, :Fs4]
embel3 = [:G4, :A4]
chord4 = [:E2, :B3, :E4, :G4]
embel4 = [:B4, :E4, :D4]
chord5 = [:A3, :E3, :A4, :C4, :E4]
embel5 = [:G4]
pairs = [[chord1, embel1], [chord2, embel2], [chord3, embel3], [chord4, embel4], [chord5, embel5]]
strumtimes = [4, 4, 2, 2, 4, 1, 1, 2]
set :c, chord1
set :e, embel1
x=0
live_loop :strum do
if vt > duration * 0.95
stop
end
if vt > duration * 0.01
cue :arp
c,e = pairs.tick(:strum)
set :e, e
set :c, c
x=0.1
l=0.1
v=0.125
vol = vt/duration*3
c.each do |n|
with_fx :distortion, amp:1, distort:0.9 do
with_synth :dark_ambience do
if one_in(3)
play n, amp:vol, release: 4, ring: 1, room: 15, reverb_time: 25
end
end
s = l +rand(0.02)
sleep s
x+=s
end
end
with_fx :ixi_techno, res: vt/duration, cutoff_min: (1-vt/duration)*120 do
if one_in(2)
sample :loop_industrial
end
end
end
sleep strumtimes.tick(:strumtime)-x
end
arptimes = [0.25, 0.25, 0.25, 0.75]
octaves = [0,0,0,0,0,12]
live_loop :arpeggio do
if vt > duration *0.8
stop
end
if vt > duration * 0.3
e = get[:e]
c = get[:c]
if one_in(4)
notes = c
else
notes = e
end
with_fx :distortion, amp:1, distort:0.9 do
with_synth :hollow do
play notes.tick(:arpn)+octaves.tick(:oct), amp:0.5+0.5*(1-vt/duration), release: 4
end
end
end
sleep arptimes.tick(:arp)
end
emb_pitch = 0
emb_times = [0.125, 0.125, 0.125, 1, 1]
live_loop :embellish do
if vt > duration*0.85
stop
end
if vt > duration * 0.01
e = get[:e]
c = get[:c]
if one_in(3)
notes = e+c
else
notes = e
end
with_fx :ping_pong, mix:0.5 do
with_synth :hollow do
with_fx :flanger, phase: duration/20 do
with_fx :ixi_techno, res: vt/duration, cutoff_min: (1-vt/duration)*120 do
with_fx :reverb, room:0.7 do
with_fx :distortion, amp:3 do
play choose(notes)+emb_pitch*12, amp: 0.25+0.75*vt/duration, release: emb_times.look(:embtimes)*1.5
end
end
end
end
end
end
if one_in(12)
emb_pitch += choose([-1,1,1])
if emb_pitch < -1
emb_pitch = 0
end
if emb_pitch > 2
emb_pitch = 0
end
end
end
sleep emb_times.tick(:embtimes)+choose([0,0,0,0,1,0.25])
end
live_loop :bass do
if vt > duration*0.9
stop
end
e = get[:e]
n=e[0]
with_swing do
with_synth :piano do
play n-24, release:8, attack:1, amp: 30
end
end
sleep 4
end
beepnotes = [0,1]
live_loop :beep do
if vt > duration * 0.2
if vt > duration *0.9
stop
end
c = get[:c]
with_synth :beep do
play c[beepnotes.tick(:beepnotes)]-12, amp:3
end
end
sleep 0.25
end
beattimes = [0.25, 1, 0.25, 1, 0.25]
live_loop :beat do
if vt > duration * 0.3
if vt > duration * 0.9
stop
end
sample :drum_bass_hard
with_fx :ping_pong do
end
end
sleep beattimes.tick(:beat)
end
live_loop :b1 do
if vt > duration * 0.9
stop
end
with_fx :panslicer, phase:1, amp:0.5, mix:0.5 do
sample :bass_thick_c, amp: (1-vt/duration)
sleep 1
end
end
end
end