Last active
December 29, 2016 02:56
-
-
Save srdjan-m/a97f60886dc40a541d5f8ba5887e0633 to your computer and use it in GitHub Desktop.
sonic_pi: optimized badass
This file contains hidden or 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
| # "The Optimized Badass" | |
| # Sonic Pi v2.11 | |
| # ---------------------------------------- | |
| # Samples used in this song can be downloaded from: | |
| # https://dl.dropboxusercontent.com/u/657073/sonicpi/badass-samples.zip | |
| # Unpack and put them into your samples folder. | |
| # ---------------------------------------- | |
| # This file is too long to be played from the Sonic Pi IDE | |
| # Instead of pasting this code, just enter the following into the Sonic Pi editor: | |
| # run_file "/path/to/this_file.rb" | |
| # Enjoy! | |
| # ---------------------------------------- | |
| use_debug false | |
| use_bpm 120 | |
| @samples_dir = "/Users/srdjan/Dropbox/Projects/Sonic_Pi/badass/samples/" # Change this path to your samples folder path! | |
| @circle = 0 | |
| def claps(a = 1) | |
| diff = a/10 | |
| sample @samples_dir, "GDYN_Punching_Perc_PRO_SGC - 8", amp: rrand(0.2, 0.4) | |
| with_fx :band_eq, freq: 100, res: 0.9, db: -10 do | |
| with_fx :compressor, treshold: 0.1, slope_below: 1, slope_above: 0.001 do | |
| with_fx :reverb, room: 0.8, damp: 0.1 do | |
| sample @samples_dir, "clap", amp: rrand(a - diff, a + diff), lfp: 90 | |
| end | |
| end | |
| end | |
| end | |
| in_thread do #!!! CONTROL !!! | |
| 145.times {cue :beat; sleep 4; @circle += 1; puts "Circle: #{@circle}"} | |
| stop | |
| end | |
| in_thread(name: :claps) do ### CLAPS ### | |
| claps_pattern = [[0, 0, 0, 0], [0, 0, 0, 1], [0, 0, 1, 1], [0, 1, 1, 1], [1, 1, 1, 1], [0, 1, 0, 1]] | |
| claps = [1, #start | |
| 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 2, 0, 1, 0, 1, # normal | |
| 1, 2, 1, 2, 1, 2, 1, 1, # faster | |
| 2, 2, 2, 0, # bridge | |
| 0, 0, 0, 1, # chorus | |
| 0, 0, 0, 1, | |
| 1, 1, 1, 2, | |
| 5, 5, 5, 5, | |
| 5, 5, 5, 5, # the fastest | |
| 4, 4, 0, 2, | |
| 1, 2, 1, 2, 1, 2, 1, 2, 0, 1, 0, 2, 0, 1, 0, 1, # normal | |
| 1, 2, 1, 2, 1, 2, 1, 1, # faster | |
| 2, 2, 2, 0, # bridge | |
| 0, 0, 0, 1, # chorus | |
| 0, 0, 0, 1, | |
| 1, 1, 1, 2, | |
| 5, 5, 5, 5, | |
| 5, 5, 5, 5, # the fastest | |
| 4, 4, 0, 2, | |
| 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, # solo | |
| 0, 0, 0, 1, # chorus | |
| 0, 0, 0, 1, | |
| 1, 1, 1, 2, | |
| 5, 5, 5, 5, | |
| 4, 4, 4, 4, # the fastest | |
| 4, 4, 0, 2 | |
| ] | |
| triggers = [28, 29, 30, 31, 80, 81, 82, 83, 121, 122, 138, 139] # no bass drum at | |
| loop do | |
| sync :beat | |
| 4.times do |t| | |
| with_fx :reverb, room: 0.3, damp: 0.9, mix: 0.275 do | |
| sample @samples_dir, "Tribal-Kick-09", amp: 0.5, pan: 0 unless triggers.include?(@circle) | |
| end | |
| if claps_pattern[claps[@circle]][t] == 1 | |
| c = 0.67 | |
| if claps[@circle] == 4 | |
| c = 0.5 | |
| end | |
| claps(c) | |
| end | |
| sleep 1 | |
| end | |
| end | |
| end | |
| in_thread(name: :drums) do ### DRUMS ### | |
| drums = [0, #start | |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # part1 | |
| 1, 1, 1, 1, 1, 1, 1, 1, | |
| 1, 1, 1, 0, # bridge | |
| 1, 1, 1, 1, # chorus | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 0, 0, | |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # part 2 | |
| 1, 1, 1, 1, 1, 1, 1, 1, | |
| 1, 1, 1, 0, # bridge | |
| 1, 1, 1, 1, # chorus | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 0, 0, | |
| 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, # solo | |
| 0, 0, 0, 0, # chorus | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 1, 1, | |
| 1, 1, 0, 0 # the end | |
| ] | |
| loop do | |
| sync :beat | |
| if drums[@circle] == 1 | |
| 4.times do |x| | |
| use_synth :zawa | |
| play :d1, attack:0, sustain: 0.005, release: 0.03, cutoff: 57, amp: 0.75, pan: 0.25 | |
| use_synth :fm | |
| play :d1, attack:0, sustain: 0.03, release: 0.2, cutoff: 120, amp: 1, pan: -0.25 | |
| sample :bd_sone, lpf: 75, amp: 0.35 | |
| sleep 0.5 | |
| val = [0.02, 0.03, 0.02, 0.2][x] # sustain and release values | |
| unless [25, 26, 27, 28, 29, 30, 31, 77, 78, 79, 80, 81, 82, 83, 121].include?(@circle) | |
| with_fx :echo, decay: 2 do | |
| use_synth :cnoise | |
| with_fx :compressor, treshold: 0.2, slope_above: 1, slope_below: 0.75 do | |
| play :c10, decay: 0.02, sustain: val, release: val, amp: 0.00333, pan: -0.3, | |
| cutoff: 121 , res: 0.9, env_curve: 7 | |
| end | |
| end | |
| end | |
| # Strange "beep" sound | |
| use_synth :mod_tri | |
| a = 0 | |
| a = 0.018 if @circle > 60 && @circle < 69 | |
| play :e6, attack:0, sustain: val * 2, release: val * 2, amp: a, pan: 0.5, cutoff: 90 | |
| sleep 0.5 | |
| end | |
| end | |
| end | |
| end | |
| ### BASS ### | |
| bass_a = [[:c2, :ds2, :f2, :c2, :c2, :ds2, :f2, :c2], | |
| [:c2, :ds2, :f2, :c2, :c2, :ds2, :f2, :ds2], | |
| [:fs2, :fs2, :f2, :ds2, nil, nil, nil, nil], | |
| [:bb1, :bb1, :bb1, :bb1, nil, nil, nil, nil], # bridge | |
| [:c2, :c2, :c2, :c2, nil, nil, nil, nil], | |
| [:g1, :g1, :g1, :g1, nil, nil, nil, nil], | |
| [:g1, :g1, :g1, :g1, nil, nil, nil, nil], | |
| [:f2, :f2, :f2, :f2, :f2, :f2, :f2, :f2,], # chorus 1 | |
| [:g2, :g2, :g2, :g2, :gs2, :gs2, :gs2, :gs2], | |
| [:ds2, :ds2, :ds2, :ds2, :ds2, :ds2, :ds2, :ds2], | |
| [:g2, :g2, :g2, :g2, :as2, :as2, :as2, :as2], | |
| [:f2, :f2, :f2, :f2, :c2, :ds2, :f2, :ds2], # chorus 2 | |
| [:f2, :f2, :f2, :c2, :ds2, :f2, :as2, :as1],# :ds2, :ds2], | |
| [:ds2, :ds2, :ds2, :ds2, :ds2, :as2, :as1, :ds2], | |
| [:g2, :g2, :gs2, :a2, :as2, :as2, :as1, :d2] | |
| ] | |
| bass_s = [[0.4, 0.4, 0.5, 0.5, 0.4, 0.4, 0.5, 0.5], | |
| [0.4, 0.4, 0.5, 0.5, 0.4, 0.4, 0.5, 0.5], | |
| [0.4, 0.4, 0.5, 0.3, 0, 0, 0, 0], | |
| [0.5, 0.5, 0.6, 0.5, 0, 0, 0, 0], # bridge | |
| [0.5, 0.5, 0.6, 0.5, 0, 0, 0, 0], | |
| [0.5, 0.5, 0.6, 0.5, 0, 0, 0, 0], | |
| [0.6, 0.6, 0.6, 0.4, 0, 0, 0, 0], | |
| [0.6, 0.6, 0.4, 0.4, 0.6, 0.6, 0.4, 0.4], # chorus | |
| [0.6, 0.6, 0.4, 0.4, 0.6, 0.6, 0.4, 0.4], | |
| [0.6, 0.6, 0.4, 0.4, 0.6, 0.6, 0.4, 0.4], | |
| [0.6, 0.6, 0.4, 0.4, 0.6, 0.6, 0.4, 0.4] | |
| ] | |
| bass_play = [0, | |
| 1, 1, 1, 1, 1, 1, | |
| 2, # bridge | |
| 6, 3, 3, 4, 4, 5, # chorus | |
| 1, 1, 1, 1, 1, 1, | |
| 2, | |
| 6, 3, 3, 4, 4, 5, # chorus | |
| 1, 1, 1, 1, # solo | |
| 6, 3, 3, 4, 4, 5 # the end chorus | |
| ] | |
| bass = [[nil], | |
| bass_a[0] + bass_a[0] + bass_a[1] + bass_a[2], | |
| bass_a[3] + bass_a[4] + bass_a[5] + bass_a[6], # bridge 1 | |
| bass_a[7] + bass_a[8] + bass_a[9] + bass_a[14], # chorus 1 | |
| bass_a[11] + bass_a[12] + bass_a[13] + bass_a[14], # chorus 2 | |
| bass_a[7] + bass_a[8] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil], # chorus end | |
| [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] # chorus end | |
| ] | |
| bass_circle = 0 | |
| in_thread(name: :bass1) do ### USED FOR BRIDGE ONLY ### | |
| bass1_play = [0, | |
| 0, 0, 0, 0, 0, 0, | |
| 2, # bridge | |
| 0, 0, 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, 0, 0, | |
| 2, | |
| 0, 0, 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, # solo | |
| 0, 0, 0, 0, 0, 0 # the end chorus | |
| ] | |
| bass1 = [[nil], | |
| bass_a[0] + bass_a[0] + bass_a[1] + bass_a[2], | |
| bass_a[3] + bass_a[4] + bass_a[5] + [nil], # bridge 1 | |
| bass_a[7] + bass_a[7] + bass_a[8] + bass_a[8], # chorus | |
| bass_a[7] + bass_a[7] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil], # chorus end | |
| [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] + [nil, nil, nil, nil, nil, nil, nil, nil] # chorus end | |
| ] | |
| use_synth :dsaw | |
| loop do | |
| sync :beat | |
| play_pattern_timed bass1[bass1_play[bass_circle]], 0.5, env_curve: 4, release: 1, cutoff: 97, res: 0.1, amp: 0.1, detune: 0.1 | |
| end | |
| end | |
| in_thread(name: :bass) do | |
| use_synth :fm | |
| with_fx :band_eq, freq: 120, db: 10 do | |
| with_fx :reverb, room: 0.1 do | |
| loop do | |
| sync :beat | |
| play_pattern_timed bass[bass_play[bass_circle]], 0.5, env_curve: 7, attack: 0, attack_level: 1.5, | |
| sustain: 0.4, release: 0.5, cutoff: 85, amp: 0.225, divisor: 1.01, depth: 2.5 | |
| bass_circle += 1 | |
| end | |
| end | |
| end | |
| # end | |
| end | |
| in_thread(name: :growl) do ### GROWL ### | |
| growl_trigger = [9, 13, 21, 69, 73] | |
| ch = [chord(:c5, :minor7), chord(:f5, :add9), false].ring | |
| ch_i = 0 | |
| with_fx :level, amp: 0.565 do | |
| with_fx :reverb, room: 0.9, damp: 0.1 do | |
| loop do | |
| sync :beat | |
| if growl_trigger.include?(@circle) | |
| s = synth :prophet, note: :c2, note_slide: 0.25, attack: 0.3, sustain: 5, release: 5, cutoff: 70, cutoff_slide: 2.5, | |
| amp: 0.7, amp_slide: 0.3, pan: 0, pan_slide: 0.1, res: 0.6, res_slide: 1 | |
| sleep 1.80 | |
| # atmosphere ---------- | |
| use_synth :dark_ambience | |
| play_chord ch[ch_i], amp: 2, sustain: 2.5, attack: 2, release: 10 if ch[ch_i] | |
| ch_i += 1 | |
| # --------------------- | |
| with_fx :compressor, treshold: 0.7, slope_above: 1, slope_below: 0.5 do | |
| control s, note: :c5, pan: -0.9, cutoff: 125, res: 0.9, amp: 0.7 | |
| sleep 0.53 | |
| control s, note: :c2, pan: -0.9, cutoff: 130, res: 0.9, amp: 1 | |
| sleep 0.52 | |
| control s, note: :ds5, pan: 0.9, cutoff: 100, res: 0.6, amp: 0.7 | |
| sleep 0.56 | |
| control s, note: :fs3, pan: 0.9, cutoff: 130, res: 0.8, amp: 1 | |
| sleep 0.25 | |
| control s, note: :c3, pan: -0.3, cutoff: 115, res: 0.7, amp: 0.8 | |
| sleep 1 | |
| control s, note: :c3, pan: 0, cutoff: 60, res: 0.3 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :woop) do ### WOOP ### | |
| loop do | |
| sync :beat | |
| if [5, 15, 74].include?(@circle) | |
| with_fx :compressor, slope_below: 1.2 do | |
| with_fx :slicer do | |
| with_fx :band_eq, freq: 100, db: -7, db_slide: 5 do |e| | |
| control e, db: 10 | |
| with_fx :reverb, room:0, room_slide: 5, mix: 0.2, mix_slide: 5 do |r| | |
| control r, room: 1, mix: 0.9 | |
| u = synth :tb303, note: :g2, note_slide: 9, sustain: 6, release: 8, cutoff: 33, cutoff_slide: 7, | |
| amp: 0.15, amp_slide: 7, pan: 1, pan_slide: 10, res: 0.1, wave: 1, pulse_width: 0.125 | |
| control u, note: :f1, cutoff: 110, amp: 0.2, pan: -1 | |
| end | |
| end | |
| end | |
| end | |
| elsif [2, 10, 70,].include?(@circle) | |
| with_fx :compressor, slope_below: 1.4 do | |
| with_fx :slicer do | |
| with_fx :level, amp: 0, amp_slide: 2 do |a| | |
| control a, amp: 1 | |
| with_fx :reverb, room:0, room_slide: 2, mix: 0.1, mix_slide: 5 do |r| | |
| control r, room: 1, mix: 0.9 | |
| w = synth :dsaw, note: :c1, note_slide: 2, amp: 0, amp_slide: 7, attack: 0, decay: 0, env_curve: 3, | |
| detune: 12, sustain: 4, release: 7, cutoff: 0, cutoff_slide: 7, cutoff_slide_shape: 4, res: 0.99, | |
| pan: 1, pan_slide: 9 | |
| control w, note: :c2, cutoff: 130, amp: 0.4, pan: -1 | |
| u = synth :tb303, note: :c2, release: 10, cutoff: 33, cutoff_slide: 5, cutoff_attack: 12, amp: 0, | |
| amp_slide: 10, pan: 1, pan_slide: 9 | |
| control u, cutoff: 130, amp: 0.4, pan: -1 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :woopAddon) do ### WOOP ADDON ### | |
| use_random_seed 1 | |
| p = [(chord :c2, :minor7, num_octaves: 3), (chord :c3, :minor7, num_octaves: 3)].ring | |
| pi = 0 | |
| s = [9, 9, 9, 3].ring | |
| v = [0.3, 0.3, 0.3, 0.3].ring | |
| with_fx :echo, max_phase: 2, phase: 1, decay: 4, mix: 0.3 do | |
| with_fx :reverb, room: 0.7, damp: 0.1 do | |
| use_synth :dsaw | |
| loop do | |
| sync :beat | |
| if [2, 5, 10, 15, 70, 74].include?(@circle) # the same as above | |
| sleep s[pi] | |
| with_fx :reverb, room: 0.7 do | |
| with_fx :level, amp: 0, amp_slide: 3 do |a| | |
| control a, amp: 0.6 | |
| with_fx :pan, pan: -1, pan_slide: 3 do |pn| | |
| control pn, pan: 1 | |
| play_pattern_timed p[pi], [0.25], amp: v[pi], release: 0.3, res: 0.7, cutoff: 110 | |
| pi += 1 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :chorusAddon) do ### CHORUS ADDON ### | |
| use_random_seed 1 | |
| p = [(chord :g2, 'm7+5', num_octaves: 3)].ring | |
| pi = 0 | |
| v = [0.3, 0.3, 0.3, 0.3].ring | |
| with_fx :echo, max_phase: 2, phase: 1, decay: 4, mix: 0.3 do | |
| with_fx :reverb, room: 0.7, damp: 0.1 do | |
| use_synth :dsaw | |
| loop do | |
| sync :beat | |
| if [44, 48, 96, 100, 136, 140].include?(@circle) # the same as above | |
| with_fx :reverb, room: 0.7 do | |
| with_fx :level, amp: 0, amp_slide: 3 do |a| | |
| control a, amp: 0.6 | |
| with_fx :pan, pan: -1, pan_slide: 3 do |pn| | |
| control pn, pan: 1 | |
| play_pattern_timed p[pi], [0.25], amp: v[pi], release: 0.3, res: 0.7, cutoff: 110 | |
| pi += 1 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :beat1) do ### BEAT1 ### | |
| s = [0, #start | |
| 0, 2, 1, 2, 1, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1, 2, # part 2 | |
| 0, 0, 0, 2, 0, 0, 1, 2, | |
| 0, 0, 0, 0, # bridge | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 1, 2, 1, 2, 1, 2, # part 2 | |
| 1, 2, 1, 2, 1, 1, 2, 2, | |
| 0, 0, 0, 0, # bridge | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 2, # solo | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, | |
| 0, 0, 0, 0, # the end | |
| ] | |
| with_fx :rhpf, mix: 0.5, cutoff: 66 do | |
| with_fx :echo, decay: 0.5, mix: 0.5 do | |
| i = 1 | |
| loop do | |
| # sync :beat1 | |
| if @circle < 145 | |
| tick | |
| sample @samples_dir, "Tonic_BD_A_T1A_V2", amp: 0.8, rate: 0.75, hpf: 50, pan: -0.5 if (spread 4, 11).look and s[@circle] == 1 | |
| sample @samples_dir, "Tonic_BD_A_T1A_V2", amp: 0.25, rate: 2.75, lpf: 120 if (spread 7, 16).look and s[@circle] == 2 | |
| sample @samples_dir, "2_D#1_Hat_SP", amp: Math.sin((i += 4) * (Math::PI / 180)) * 0.08, rate: 2, pan: 0.5 if (spread 11, 24).look and s[@circle] != 0 | |
| sleep 0.25 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :beatSamples) do | |
| with_fx :reverb, room: 0.3 do | |
| with_fx :echo, phase: 0.5, mix: 0.2 do | |
| with_fx :band_eq, freq: 140, db: -10 do | |
| loop do | |
| sync :beat | |
| sample @samples_dir, "120_Breaking_the_Beat_SP", amp: 0.73, lpf: 90 if [64].include?(@circle) | |
| sample @samples_dir, "120_Breaking_the_Beat_SP", amp: 0.73, lpf: 90, release: 0.5 if [66].include?(@circle) # fade | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :xxx) do ### XXX ### | |
| xc = {f3a9: [(chord :f3, :add9), 6, 0.14, :f3], d3a9: [(chord :d3, :add9), 4, 0.15, :d3], | |
| c3min: [(chord :c3, :minor), 6, 0.125, :d3], a3maj: [(chord :a3, :major), 7, 0.125, :a3]} | |
| x_circle = [0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #16 | |
| xc[:f3a9], xc[:d3a9], xc[:c3min], xc[:a3maj], xc[:f3a9], xc[:d3a9], xc[:c3min], xc[:a3maj], #8 | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 0, #0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, #16 | |
| xc[:f3a9], xc[:d3a9], xc[:c3min], xc[:a3maj], xc[:f3a9], xc[:d3a9], xc[:c3min], xc[:a3maj], #8 | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 | |
| ] | |
| with_fx :reverb, room: 0.8, damp: 0.2 do | |
| loop do | |
| sync :beat | |
| if x_circle[@circle] != 0 | |
| ppn = -0.25 | |
| ppn = 0.25 if @circle % 2 == 0 | |
| use_synth :prophet | |
| with_fx :echo, decay: 3 do | |
| play_chord x_circle[@circle][0], cutoff: 80, amp: 0.05, release: 5, res: 0.5 | |
| end | |
| use_synth :tb303 | |
| with_fx :echo, decay: 5, phase: 0.25 do | |
| x_circle[@circle][1].times do | |
| with_fx :pan, pan: ppn do | |
| play_chord x_circle[@circle][0], cutoff: 99, amp: x_circle[@circle][2] + 0.01, release: 0.3 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| # end | |
| end | |
| in_thread(name: :chorus) do ### CHORUS ### | |
| rf = [[:f5, 0.25], [:e5, 0.5], [:ds5, 0.5], [:c5, 0.75], [:gs4, 1], [:f4, 1], | |
| [:f5, 0.25], [:e5, 0.5], [:ds5, 0.5], [:c5, 0.75], [:gs4, 1], [:f4, 1], | |
| [:g4, 0.25], [:as4, 0.5], [:ds5, 0.5], [:d5, 0.25], [:as4, 0.5], [:f4, 0.5], [:ds5, 0.5], [:f5, 1], | |
| [:g4, 0.25], [:as4, 0.5], [:ds5, 0.5], [:d5, 0.25], [:as4, 0.5], [:f4, 0.5], [:ds5, 0.5], [:f5, 1]].ring | |
| trigger = [29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, | |
| 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, | |
| 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141] | |
| with_fx :reverb, room: 1 do | |
| with_fx :echo, mix: 0.4 do | |
| with_fx :band_eq, freq: 110, db: 7 do | |
| loop do | |
| sync :beat | |
| if trigger.include?(@circle) | |
| # puts ">>>>>>>> CHORUS <<<<<<<<<<<" | |
| 28.times do | |
| tick | |
| use_synth :fm | |
| play rf[look][0], release: 0.3, amp: 0.2 | |
| sleep rf[look][1] | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :chorus_lead1) do | |
| x1 = [[:r, 192], [:c4, 6, -1], [:ds4, 6, -0.7], [:c4, 6, -0.3], [:as4, 6, 0.3], [:g4, 4, 0.7], [:ds4, 36, 1], | |
| [:c4, 6, -1], [:ds4, 6, -0.7], [:c4, 6, -0.3], [:as4, 6, 0.3], [:g4, 4, 0.7], [:ds4, 36, 1], | |
| [:c4, 6, -1], [:ds4, 6, -0.7], [:c4, 6, -0.3], [:as4, 6, 0.3], [:g4, 4, 0.7], [:ds4, 36, 1]] | |
| loop do | |
| sync :beat | |
| with_fx :flanger, depth: 10, phase: 8 do | |
| with_fx :reverb, room: 0.9, damp: 0.1 do | |
| if [29, 81, 121].include?(@circle) | |
| 19.times do |i| | |
| use_synth :dpulse | |
| ppp = (i.to_f - 10) / 10 | |
| play x1[i][0], attack: 0.01, amp: 0.11, release: 4, cutoff: 90, detune: 0.1, pan: x1[i][2] | |
| sleep x1[i][1] * 0.25 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :chorus_lead2) do | |
| myPan = -1 | |
| x2 = [[:r, 160], [:f4, 6], [:d4, 6], [:as3, 6], [:r, 6], [:r, 4], [:r, 36], | |
| [:f4, 6], [:d4, 6], [:as3, 6], [:r, 6], [:r, 4], [:r, 36], | |
| [:f4, 6], [:d4, 6], [:as3, 6], [:r, 6], [:r, 4], [:r, 36], | |
| [:f4, 6], [:d4, 6], [:as3, 6]] | |
| loop do | |
| sync :beat | |
| if [29, 81, 121].include?(@circle) | |
| with_fx :reverb, room: 0.9, damp: 0.1 do | |
| with_fx :hpf, cutoff: 85 do | |
| 22.times do |i| | |
| myPan *= -1 | |
| use_synth :dtri | |
| play x2[i][0], attack: 0.2, amp: 0.37, release: 3, cutoff: 120, detune: 12, pan: myPan | |
| sleep x2[i][1] * 0.25 | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| in_thread(name: :chorusbg) do | |
| ch = [0, #start | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # normal | |
| 0, 0, 0, 0, 0, 0, 0, 0, # faster | |
| 0, 0, 0, 0, # bridge | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, # the fastest | |
| (chord :f3, :major), 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # normal | |
| 0, 0, 0, 0, 0, 0, 0, 0, # faster | |
| 0, 0, 0, 0, # bridge | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, # the fastest | |
| (chord :f3, :major), 0, 0, 0, | |
| 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, # solo | |
| 0, 0, 0, 0, # chorus | |
| 0, 0, 0, 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, | |
| (chord :f3, :major), 0, (chord :g3, 'm7+5'), 0, # the fastest | |
| (chord :f3, :major), 0, 0, 0 | |
| ] | |
| use_synth :dsaw | |
| loop do | |
| sync :beat | |
| play ch[@circle], attack: 1, sustain: 4, release: 7, amp: 0.170, cutoff: 92 unless ch[@circle] == 0 | |
| end | |
| end | |
| # GUITAR ---------------------------------------- | |
| in_thread do | |
| a = [ | |
| (chord :f4, :add9), (chord :g4, :major), (chord :f4, :add9), (chord :f5, :add9), | |
| (chord :c5, :minor), | |
| (chord :gs5, :major), (chord :ds5, :major), (chord :c5, :major), (chord :cs5, :major), (chord :f5, :add9), | |
| (chord :bb4, :add9), (chord :c5, :major), | |
| (chord :f4, :add9), (chord :f4, :add9), (chord :g4, :major), (chord :f4, :add9), (chord :f5, :add9), | |
| (chord :c5, :minor), | |
| (chord :gs5, :major), (chord :ds5, :major), (chord :c5, :major), (chord :f5, :add9), | |
| (chord :c5, :major), (chord :c5, :major), (chord :c6, :major) | |
| ] | |
| s = [ | |
| 1.5, 0.5, 5.5, 0.5, | |
| 8, | |
| 0.75, 0.75, 0.5, 5.5, 0.5, | |
| 4, 4, | |
| 0.75, 0.75, 0.5, 5.5, 0.5, # part 2 | |
| 8, | |
| 0.75, 0.75, 0.5, 6, | |
| 2, 2, 4 | |
| ] | |
| r = [ | |
| 2, 1, 8, 3, | |
| 8, | |
| 4, 2, 1, 6, 1, | |
| 8, 4, | |
| 0.5, 1, 1, 8, 1, # part 2 | |
| 8, | |
| 4, 2, 1, 6, | |
| 2, 4, 2 | |
| ] | |
| loop do | |
| sync :beat | |
| with_fx :hpf, cutoff: 85 do | |
| with_fx :echo, phase: 2, max_phase: 4, decay: 4, mix: 0.4 do | |
| with_fx :lpf, pre_amp: 0.55 do | |
| with_fx :tanh, krunch: 1 do | |
| with_fx :reverb, room: 0.85 do | |
| with_fx :flanger do | |
| with_fx :compressor, slope_above: 1, slope_below: 2 do | |
| use_synth :beep | |
| if @circle == 105 | |
| a.length.times do |x| | |
| play a[x], release: r[x], amp: 0.95 | |
| sleep s[x] | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment