Created
May 29, 2018 21:17
-
-
Save aen1gma/15327a6a6889dd31945114276806a3c2 to your computer and use it in GitHub Desktop.
SonicPiExperiments
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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