# Copyright 2023 Kirk Rader. All rights reserved.
# Farandole Lamentoso
midi_all_notes_off
sleep 1
arp_synth = :dpulse
bass_synth = :bass_foundation
seed = 0
next_seed = 7
arps = 2
arp_tempo = 0.33
send_midi_arp = false
send_midi_bass = false
play_notes = true
define :play_arp do |r, c|
use_synth arp_synth
c.times do
use_random_seed seed
seed = seed + next_seed
r.shuffle.length.times do
n = r.tick
if send_midi_arp
midi n
end
if play_notes
play n
end
sleep arp_tempo
end
end
end
define :play_bass do |n, s|
use_synth bass_synth
if send_midi_bass
midi n, sustain: s
end
if play_notes
play n, sustain: s
end
end
define :play_bass_melody do |n, s|
in_thread do
n.length.times do
play_bass n.tick, s
sleep s
end
end
end
a_min = (ring :A3, :C4, :E4)
d_min = (ring :A3, :D4, :F4)
g_maj = (ring :G3, :B3, :D4)
c_maj = (ring :G3, :C4, :E4)
f_maj = (ring :F3, :A3, :C4)
b_min = (ring :F3, :B3, :D4)
a_min_inv = (ring :E3, :A3, :C4)
e_maj_sus = (ring :E3, :A3, :B3)
e_maj = (ring :E3, :Gs3, :B3)
bass_melody = (ring :C3, :A2, :B2, :Gs2)
2.times do
play_bass :A3, (arps * a_min.length * arp_tempo)
play_arp a_min, arps
play_bass :D3, (arps * d_min.length * arp_tempo)
play_arp d_min, arps
play_bass :G3, (arps * g_maj.length * arp_tempo)
play_arp g_maj, arps
play_bass :C3, (arps * c_maj.length * arp_tempo)
play_arp c_maj, arps
play_bass :F3, (arps * f_maj.length * arp_tempo)
play_arp f_maj, arps
play_bass :B3, (arps * b_min.length * arp_tempo)
play_arp b_min, arps
play_bass_melody bass_melody, (a_min_inv.length * arp_tempo)
play_arp a_min_inv, arps
play_arp e_maj_sus, 1
play_arp e_maj, 1
end
play_bass :A2, (arps * a_min_inv.length * arp_tempo)
play_arp a_min_inv, arps
if send_midi_arp
midi :A4
end
if play_notes
play :A4
end
play_bass :A2, (arps * a_min_inv.length * arp_tempo)