Skip to content

Instantly share code, notes, and snippets.

@aen1gma
Created May 29, 2018 21:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save aen1gma/15327a6a6889dd31945114276806a3c2 to your computer and use it in GitHub Desktop.
Save aen1gma/15327a6a6889dd31945114276806a3c2 to your computer and use it in GitHub Desktop.
SonicPiExperiments
#CONFIG
use_bpm 140
base_dir = "~/Documents/Sonic Pi Projects/"
#FUNCTIONS
run_file base_dir + "FnSynth.rb"
run_file base_dir + "FnArp.rb"
#CONTROLS
toggle_pad_amb = 1
toggle_drums_kick = 0
toggle_drums_snare = 0
toggle_drums_hat = 0
toggle_bass = 1
toggle_arp = 1
#METRONOME
live_loop :bar do
sleep 4
end
#PAD
live_loop :pad_amb, sync: :bar do
stop if toggle_pad_amb == 0
osc_opts={
osc1: :pulse, osc1_width: 0.2, osc1_amp: 0.3, osc1_pitch: 0, osc1_voices: 2, osc1_detune: 0.000001,
osc2: :pulse, osc2_width: 0.2, osc2_amp: 0.3, osc2_pitch: 7, osc2_voices: 2, osc2_detune: 0.000001,
osc3: :pulse, osc3_width: 0.2, osc3_amp: 0.2, osc3_pitch: 12, osc3_voices: 2, osc3_detune: 0.000001,
osc4: :pulse, osc4_width: 0.2, osc4_amp: 0.2, osc4_pitch: 15, osc4_voices: 2, osc4_detune: 0.000001,
osc5: :gnoise, osc5_amp: 0.05, osc5_pitch: 0, osc5_voices: 1, osc5_detune: 0.01
}
adsr_opts={
attack: 6, decay: 2, release: 3,
attack_level: 1, decay_level: 0.5, sustain_level: 0.5
}
filter_opts={
filter: :rlpf, cutoff_begin: 50, cutoff_end: 65, cutoff_slide: 8, res: 0.7
}
rhythm={
timing: [16],
sustain: [5]
}
melody = [:D4, :Cs4]
with_fx :reverb, room: 0.7 do
with_fx :echo do
with_fx :flanger do
synth_play(melody, rhythm, osc_opts, adsr_opts, filter_opts)
end
end
end
end
#BASS
live_loop :bass, sync: :bar do
stop if toggle_bass == 0
osc_opts={
osc1: :pulse, osc1_width: 0.35, osc1_amp: 0.5, osc1_pitch: 0, osc1_voices: 7, osc1_detune: 0.01,
osc2: :tri, osc2_amp: 0.5, osc2_pitch: -12, osc2_voices: 1, osc2_detune: 0.01
}
adsr_opts={
attack: 0.05, decay: 0.05, sustain: 0, release: 0.05,
attack_level: 1, decay_level: 0.75, sustain_level: 0.25
}
filter_opts={
filter: :rlpf, cutoff_begin: 70, cutoff_end: 50, cutoff_slide: 0.3, res: 0.5
}
rhythm={
timing: [0.5],
sustain: [0.4]
}
with_fx :distortion do
32.times do
melody = [:D2]
synth_play(melody, rhythm, osc_opts, adsr_opts, filter_opts)
end
32.times do
melody = [:Cs2]
synth_play(melody, rhythm, osc_opts, adsr_opts, filter_opts)
end
end
end
#ARP
live_loop :sawArp, sync: :bar do
stop if toggle_arp == 0
osc_opts={
osc1: :saw, osc1_amp: 0.6, osc1_pitch: 0, osc1_voices: 7, osc1_detune: 0.01,
osc2: :saw, osc2_amp: 0.4, osc2_pitch: 12, osc2_voices: 7, osc2_detune: 0.01,
osc3: :saw, osc3_amp: 0.4, osc3_pitch: -12, osc3_voices: 7, osc3_detune: 0.01
}
adsr_opts={
attack: 0, decay: 0, sustain: 0.5, release: 0.5,
attack_level: 0, decay_level: 1, sustain_level: 1
}
filter_opts={
filter: :lpf, cutoff_begin: 40, cutoff_end: 50, cutoff_slide: 0.25#, res: 0.7
}
rhythm={
timing: [0.5, 0.5, 0.5],
sustain: [0.7]
}
cutoffb_ring = (line 40, 60, inclusive: true, steps: 33).mirror
cutoffe_ring = (line 50, 70, inclusive: true, steps: 33).mirror
num_notes = 4
32.times do
filter_opts[:cutoff_begin] = cutoffb_ring.tick(:cbtick)
filter_opts[:cutoff_end] = cutoffe_ring.tick(:cetick)
melody = arp(chord(:D3, :minor), num_octaves: 2, pattern: :down)
synth_play(melody, num_notes, rhythm, osc_opts, adsr_opts, filter_opts)
end
32.times do
filter_opts[:cutoff_begin] = cutoffb_ring.tick(:cbtick)
filter_opts[:cutoff_end] = cutoffe_ring.tick(:cetick)
melody = arp(chord(:Cs4, :major), num_octaves: 2, pattern: :up)
synth_play(melody, num_notes, rhythm, osc_opts, adsr_opts, filter_opts)
end
end
### FnArp.rb ###
define :arp do |notes, options={}|
options[:num_octaves] ||= 1
options[:pattern] ||= :up
arp_notes = Array.new
for n in notes
arp_notes.push(n.to_i)
end
if options[:num_octaves] > 1 then
arp_notes_new = Array.new
add = 12
for o in 2..options[:num_octaves]
for a in arp_notes
arp_notes_new.push(a + add)
end
add += 12
end
arp_notes += arp_notes_new
end
arp_notes = arp_notes.ring
case options[:pattern]
when :up
arp_notes = arp_notes.sort
when :down
arp_notes = arp_notes.sort.reverse
when :updown
arp_notes = arp_notes.reflect
arp_notes = arp_notes.drop_last(1)
when :downup
arp_notes = arp_notes.sort.reverse
arp_notes = arp_notes.reflect
arp_notes = arp_notes.drop_last(1)
when :random
#use_random_seed 1
arp_notes = arp_notes.shuffle
end
#print arp_notes
return arp_notes
end
define :synth_play do |melody, num_notes = :all, rhythm, osc_opts, adsr_opts, filter_opts|
#DEFAULTS
rhythm[:timing] ||= 0
rhythm[:sustain] ||= 0
osc_opts[:osc1] ||= :pulse
osc_opts[:osc1_amp] ||= 1
osc_opts[:osc1_width] ||= 0.5
osc_opts[:osc1_pitch] ||= 0
osc_opts[:osc1_voices] ||= 7
osc_opts[:osc1_detune] ||= 0.001
osc_opts[:osc2] ||= 0
osc_opts[:osc3] ||= 0
osc_opts[:osc4] ||= 0
osc_opts[:osc5] ||= 0
adsr_opts[:attack] ||= 0
adsr_opts[:decay] ||= 0
adsr_opts[:sustain] ||= 0.5
adsr_opts[:release] ||= 0.5
adsr_opts[:attack_level] ||= 1
adsr_opts[:decay_level] ||= 1
adsr_opts[:sustain_level] ||= 1
filter_opts[:filter] ||= :rlpf
filter_opts[:cutoff_begin] ||= 110
filter_opts[:cutoff_end] ||= 80
filter_opts[:cutoff_slide] ||= 0.25
filter_opts[:res] ||= 0.5
if rhythm[:timing] == 0 then
timing = [1]
end
if rhythm[:sustain] == 0 then #If note-specific sustain values not provided, create single value ring with adsr_opts[:sustain] value
sustain = [adsr_opts[:sustain]]
end
timing = rhythm[:timing].ring
sustain = rhythm[:sustain].ring
melody = melody.ring
if num_notes != :all then
melody = melody.take(num_notes)
end
voices1 = [1, 1, 1, 1, 1, 1, 1] #voices1 = [1.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00]
voices2 = [1, 1, 1, 1, 1, 1, 1] #voices2 = [0.70, 0.50, 0.00, 0.00, 0.00, 0.00, 0.00]
voices3 = [1, 1, 1, 1, 1, 1, 1] #voices3 = [0.60, 0.40, 0.40, 0.00, 0.00, 0.00, 0.00]
voices4 = [1, 1, 1, 1, 1, 1, 1] #voices4 = [0.50, 0.30, 0.40, 0.30, 0.00, 0.00, 0.00]
voices5 = [1, 1, 1, 1, 1, 1, 1] #voices5 = [0.40, 0.25, 0.25, 0.25, 0.25, 0.00, 0.00]
voices6 = [1, 1, 1, 1, 1, 1, 1] #voices6 = [0.35, 0.20, 0.20, 0.20, 0.20, 0.20, 0.00]
voices7 = [1, 1, 1, 1, 1, 1, 1] #voices7 = [0.30, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20]
case osc_opts[:osc1_voices]
when 1 then osc1_v1_amp = osc_opts[:osc1_amp] * voices1[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices1[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices1[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices1[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices1[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices1[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices1[6]
when 2 then osc1_v1_amp = osc_opts[:osc1_amp] * voices2[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices2[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices2[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices2[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices2[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices2[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices2[6]
when 3 then osc1_v1_amp = osc_opts[:osc1_amp] * voices3[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices3[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices3[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices3[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices3[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices3[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices3[6]
when 4 then osc1_v1_amp = osc_opts[:osc1_amp] * voices4[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices4[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices4[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices4[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices4[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices4[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices4[6]
when 5 then osc1_v1_amp = osc_opts[:osc1_amp] * voices5[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices5[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices5[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices5[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices5[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices5[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices5[6]
when 6 then osc1_v1_amp = osc_opts[:osc1_amp] * voices6[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices6[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices6[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices6[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices6[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices6[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices6[6]
when 7 then osc1_v1_amp = osc_opts[:osc1_amp] * voices7[0]; osc1_v2_amp = osc_opts[:osc1_amp] * voices7[1]; osc1_v3_amp = osc_opts[:osc1_amp] * voices7[2]; osc1_v4_amp = osc_opts[:osc1_amp] * voices7[3]; osc1_v5_amp = osc_opts[:osc1_amp] * voices7[4]; osc1_v6_amp = osc_opts[:osc1_amp] * voices7[5]; osc1_v7_amp = osc_opts[:osc1_amp] * voices7[6]
end
case osc_opts[:osc2_voices]
when 1 then osc2_v1_amp = osc_opts[:osc2_amp] * voices1[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices1[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices1[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices1[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices1[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices1[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices1[6]
when 2 then osc2_v1_amp = osc_opts[:osc2_amp] * voices2[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices2[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices2[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices2[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices2[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices2[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices2[6]
when 3 then osc2_v1_amp = osc_opts[:osc2_amp] * voices3[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices3[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices3[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices3[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices3[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices3[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices3[6]
when 4 then osc2_v1_amp = osc_opts[:osc2_amp] * voices4[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices4[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices4[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices4[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices4[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices4[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices4[6]
when 5 then osc2_v1_amp = osc_opts[:osc2_amp] * voices5[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices5[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices5[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices5[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices5[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices5[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices5[6]
when 6 then osc2_v1_amp = osc_opts[:osc2_amp] * voices6[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices6[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices6[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices6[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices6[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices6[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices6[6]
when 7 then osc2_v1_amp = osc_opts[:osc2_amp] * voices7[0]; osc2_v2_amp = osc_opts[:osc2_amp] * voices7[1]; osc2_v3_amp = osc_opts[:osc2_amp] * voices7[2]; osc2_v4_amp = osc_opts[:osc2_amp] * voices7[3]; osc2_v5_amp = osc_opts[:osc2_amp] * voices7[4]; osc2_v6_amp = osc_opts[:osc2_amp] * voices7[5]; osc2_v7_amp = osc_opts[:osc2_amp] * voices7[6]
end
case osc_opts[:osc3_voices]
when 1 then osc3_v1_amp = osc_opts[:osc3_amp] * voices1[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices1[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices1[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices1[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices1[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices1[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices1[6]
when 2 then osc3_v1_amp = osc_opts[:osc3_amp] * voices2[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices2[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices2[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices2[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices2[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices2[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices2[6]
when 3 then osc3_v1_amp = osc_opts[:osc3_amp] * voices3[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices3[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices3[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices3[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices3[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices3[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices3[6]
when 4 then osc3_v1_amp = osc_opts[:osc3_amp] * voices4[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices4[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices4[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices4[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices4[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices4[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices4[6]
when 5 then osc3_v1_amp = osc_opts[:osc3_amp] * voices5[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices5[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices5[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices5[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices5[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices5[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices5[6]
when 6 then osc3_v1_amp = osc_opts[:osc3_amp] * voices6[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices6[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices6[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices6[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices6[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices6[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices6[6]
when 7 then osc3_v1_amp = osc_opts[:osc3_amp] * voices7[0]; osc3_v2_amp = osc_opts[:osc3_amp] * voices7[1]; osc3_v3_amp = osc_opts[:osc3_amp] * voices7[2]; osc3_v4_amp = osc_opts[:osc3_amp] * voices7[3]; osc3_v5_amp = osc_opts[:osc3_amp] * voices7[4]; osc3_v6_amp = osc_opts[:osc3_amp] * voices7[5]; osc3_v7_amp = osc_opts[:osc3_amp] * voices7[6]
end
case osc_opts[:osc4_voices]
when 1 then osc4_v1_amp = osc_opts[:osc4_amp] * voices1[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices1[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices1[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices1[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices1[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices1[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices1[6]
when 2 then osc4_v1_amp = osc_opts[:osc4_amp] * voices2[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices2[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices2[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices2[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices2[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices2[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices2[6]
when 3 then osc4_v1_amp = osc_opts[:osc4_amp] * voices3[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices3[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices3[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices3[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices3[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices3[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices3[6]
when 4 then osc4_v1_amp = osc_opts[:osc4_amp] * voices4[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices4[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices4[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices4[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices4[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices4[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices4[6]
when 5 then osc4_v1_amp = osc_opts[:osc4_amp] * voices5[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices5[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices5[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices5[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices5[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices5[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices5[6]
when 6 then osc4_v1_amp = osc_opts[:osc4_amp] * voices6[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices6[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices6[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices6[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices6[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices6[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices6[6]
when 7 then osc4_v1_amp = osc_opts[:osc4_amp] * voices7[0]; osc4_v2_amp = osc_opts[:osc4_amp] * voices7[1]; osc4_v3_amp = osc_opts[:osc4_amp] * voices7[2]; osc4_v4_amp = osc_opts[:osc4_amp] * voices7[3]; osc4_v5_amp = osc_opts[:osc4_amp] * voices7[4]; osc4_v6_amp = osc_opts[:osc4_amp] * voices7[5]; osc4_v7_amp = osc_opts[:osc4_amp] * voices7[6]
end
case osc_opts[:osc5_voices]
when 1 then osc5_v1_amp = osc_opts[:osc5_amp] * voices1[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices1[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices1[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices1[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices1[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices1[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices1[6]
when 2 then osc5_v1_amp = osc_opts[:osc5_amp] * voices2[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices2[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices2[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices2[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices2[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices2[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices2[6]
when 3 then osc5_v1_amp = osc_opts[:osc5_amp] * voices3[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices3[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices3[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices3[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices3[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices3[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices3[6]
when 4 then osc5_v1_amp = osc_opts[:osc5_amp] * voices4[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices4[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices4[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices4[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices4[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices4[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices4[6]
when 5 then osc5_v1_amp = osc_opts[:osc5_amp] * voices5[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices5[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices5[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices5[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices5[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices5[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices5[6]
when 6 then osc5_v1_amp = osc_opts[:osc5_amp] * voices6[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices6[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices6[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices6[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices6[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices6[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices6[6]
when 7 then osc5_v1_amp = osc_opts[:osc5_amp] * voices7[0]; osc5_v2_amp = osc_opts[:osc5_amp] * voices7[1]; osc5_v3_amp = osc_opts[:osc5_amp] * voices7[2]; osc5_v4_amp = osc_opts[:osc5_amp] * voices7[3]; osc5_v5_amp = osc_opts[:osc5_amp] * voices7[4]; osc5_v6_amp = osc_opts[:osc5_amp] * voices7[5]; osc5_v7_amp = osc_opts[:osc5_amp] * voices7[6]
end
use_synth_defaults attack: adsr_opts[:attack], decay: adsr_opts[:decay], release: adsr_opts[:release],
attack_level: adsr_opts[:attack_level], decay_level: adsr_opts[:decay_level], sustain_level: adsr_opts[:sustain_level],
cutoff: 100
puts tick
with_fx filter_opts[:filter], cutoff: filter_opts[:cutoff_begin], res: filter_opts[:res] do |c|
synth osc_opts[:osc1], amp: osc1_v1_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch]
synth osc_opts[:osc1], amp: osc1_v2_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] - osc_opts[:osc1_detune] if osc_opts[:osc1_voices] > 1
synth osc_opts[:osc1], amp: osc1_v3_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] + osc_opts[:osc1_detune] if osc_opts[:osc1_voices] > 2
synth osc_opts[:osc1], amp: osc1_v4_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] - (osc_opts[:osc1_detune] * 2) if osc_opts[:osc1_voices] > 3
synth osc_opts[:osc1], amp: osc1_v5_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] + (osc_opts[:osc1_detune] * 2) if osc_opts[:osc1_voices] > 4
synth osc_opts[:osc1], amp: osc1_v6_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] - (osc_opts[:osc1_detune] * 3) if osc_opts[:osc1_voices] > 5
synth osc_opts[:osc1], amp: osc1_v7_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc1_width], pitch: osc_opts[:osc1_pitch] + (osc_opts[:osc1_detune] * 3) if osc_opts[:osc1_voices] > 6
if osc_opts[:osc2] != 0
synth osc_opts[:osc2], amp: osc2_v1_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch]
synth osc_opts[:osc2], amp: osc2_v2_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] - osc_opts[:osc2_detune] if osc_opts[:osc2_voices] > 1
synth osc_opts[:osc2], amp: osc2_v3_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] + osc_opts[:osc2_detune] if osc_opts[:osc2_voices] > 2
synth osc_opts[:osc2], amp: osc2_v4_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] - (osc_opts[:osc2_detune] * 2) if osc_opts[:osc2_voices] > 3
synth osc_opts[:osc2], amp: osc2_v5_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] + (osc_opts[:osc2_detune] * 2) if osc_opts[:osc2_voices] > 4
synth osc_opts[:osc2], amp: osc2_v6_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] - (osc_opts[:osc2_detune] * 3) if osc_opts[:osc2_voices] > 5
synth osc_opts[:osc2], amp: osc2_v7_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc2_width], pitch: osc_opts[:osc2_pitch] + (osc_opts[:osc2_detune] * 3) if osc_opts[:osc2_voices] > 6
end
if osc_opts[:osc3] != 0
synth osc_opts[:osc3], amp: osc3_v1_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch]
synth osc_opts[:osc3], amp: osc3_v2_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] - osc_opts[:osc3_detune] if osc_opts[:osc3_voices] > 1
synth osc_opts[:osc3], amp: osc3_v3_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] + osc_opts[:osc3_detune] if osc_opts[:osc3_voices] > 2
synth osc_opts[:osc3], amp: osc3_v4_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] - (osc_opts[:osc3_detune] * 2) if osc_opts[:osc3_voices] > 3
synth osc_opts[:osc3], amp: osc3_v5_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] + (osc_opts[:osc3_detune] * 2) if osc_opts[:osc3_voices] > 4
synth osc_opts[:osc3], amp: osc3_v6_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] - (osc_opts[:osc3_detune] * 3) if osc_opts[:osc3_voices] > 5
synth osc_opts[:osc3], amp: osc3_v7_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc3_width], pitch: osc_opts[:osc3_pitch] + (osc_opts[:osc3_detune] * 3) if osc_opts[:osc3_voices] > 6
end
if osc_opts[:osc4] != 0
synth osc_opts[:osc4], amp: osc4_v1_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch]
synth osc_opts[:osc4], amp: osc4_v2_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] - osc_opts[:osc4_detune] if osc_opts[:osc4_voices] > 1
synth osc_opts[:osc4], amp: osc4_v3_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] + osc_opts[:osc4_detune] if osc_opts[:osc4_voices] > 2
synth osc_opts[:osc4], amp: osc4_v4_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] - (osc_opts[:osc4_detune] * 2) if osc_opts[:osc4_voices] > 3
synth osc_opts[:osc4], amp: osc4_v5_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] + (osc_opts[:osc4_detune] * 2) if osc_opts[:osc4_voices] > 4
synth osc_opts[:osc4], amp: osc4_v6_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] - (osc_opts[:osc4_detune] * 3) if osc_opts[:osc4_voices] > 5
synth osc_opts[:osc4], amp: osc4_v7_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc4_width], pitch: osc_opts[:osc4_pitch] + (osc_opts[:osc4_detune] * 3) if osc_opts[:osc4_voices] > 6
end
if osc_opts[:osc5] != 0
synth osc_opts[:osc5], amp: osc5_v1_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch]
synth osc_opts[:osc5], amp: osc5_v2_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] - osc_opts[:osc5_detune] if osc_opts[:osc5_voices] > 1
synth osc_opts[:osc5], amp: osc5_v3_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] + osc_opts[:osc5_detune] if osc_opts[:osc5_voices] > 2
synth osc_opts[:osc5], amp: osc5_v4_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] - (osc_opts[:osc5_detune] * 2) if osc_opts[:osc5_voices] > 3
synth osc_opts[:osc5], amp: osc5_v5_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] + (osc_opts[:osc5_detune] * 2) if osc_opts[:osc5_voices] > 4
synth osc_opts[:osc5], amp: osc5_v6_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] - (osc_opts[:osc5_detune] * 3) if osc_opts[:osc5_voices] > 5
synth osc_opts[:osc5], amp: osc5_v7_amp, note: melody.look, sustain: sustain.look, pulse_width: osc_opts[:osc5_width], pitch: osc_opts[:osc5_pitch] + (osc_opts[:osc5_detune] * 3) if osc_opts[:osc5_voices] > 6
end
control c, cutoff: filter_opts[:cutoff_end], cutoff_slide: filter_opts[:cutoff_slide]
end
sleep timing.look
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment