Curating a Sonic Pi Music Playlist

Amazing amazing :smiley: thank you all :slight_smile:

1 Like

Here is my attempt to replicate a GoGo Penguin track in Sonic Pi:

4 Likes

I tried uploading one of my ambient tracks to spotify but the free distribution platform I’m using declined my track because my cover wasn’t quality or whatever :pleading_face:

When I finally get it posted on spotify I’ll post it here! Also, if anyone here is up to helping me with the cover art that would be nice. My cover photo was just a frame of a modified preset on hydra. Here’s the hydra code if anyone’s interested:

osc(-5.38, 0.0021, -0.478).color(0.056, 0.441, 0.313).rotate(0.585, 0.124).modulate(noise(-1.075), () => 1.376 * Math.sin(0.019 * time)).out(o0);
1 Like

would love to help with your artwork :slight_smile:

This is awesome!

Here are the links to all my current work:

1 Like

Still incredibly impressed by this.

1 Like

Thanks for the feature!!!

All the albums that I posted so far on https://enkid0.bandcamp.com are made 100% with Sonic Pi. Is that url sufficient for you, or would you rather have a link per album (8 links) or… a link per track? (that would be more complicated =)).

@enkid0 Don’t worry I will do the digging :slight_smile:
@modulo thank you for sharing :slight_smile:

1 Like

Thanks for the continual share … I have some exciting news coming soon … :smiley:

1 Like

Thank you! It means a lot to me.

1 Like

I’m putting my Sonic Pi-made tracks in here. Primarily I’m using SPi to arrange “living backing tracks” for others in the band to play to. But I’ve started to try composing in SPi too.

I’ll add that some of samples are made with tools outside SPi, but I’m using a lot of the in-built sounds too.

2 Likes

That’s ace. Can I ask what are you using for the bass on this track?

Robin - what a mix. How did you code in all that Bach? So many notes, hard enough when I used to try playing it. I especially like the Rachmaninoff, that’s a great sound going on there.

Some of the tracks remind me of the Radiophonic workshop - not so much their left-field stuff but when then made those synth-based theme tunes for bbc programmes. Is it the sine waves? :smiley:

Believe it or not, I just used the SPi fm synth, which doesn’t always sound right, but with some tweaking sometimes it’s surprisingly believable. My goal was to complete this project with SPi built-in samples and synths only. Here is the entire code: https://github.com/garenhart/gogo-penguin-hopopono. Just make sure to read the readme if you want to run it. BTW, I really enjoyed listening to your tracks!

1 Like

Thanks so much, great to see the code - and well commented too. I’m definitely going to steal your bass sound though :smile:

2 Likes

All 4 tracks are cool… but ‘One Drop’ really hits.

As a lover of dub I’d really like to see that code, Sir.

Might I offer this as a trade?

Respec.

Eli…

2 Likes

Thanks for the kind words, and nice work yourself! Lots of good-sounding elements in there which I will shamelessly copy :smile: I’ll single out the ruff on the snare, that’s good. I need more of those touches.

One of my band wanted a dub track, so mine is a live/endless backing track for that, King Tubby style - well, hopefully. In performance I’ll switch the different bits in an out and muck about with the reverb. Take it down to the bare minimum and bring it up again, you know.

There’s a few samples in there, mostly mine, one from Freesound. Although the samples were made in SPi and recorded - the reason being the effects (echo and reverb) were taking too much CPU run live.

As requested:

# Rubber Dub
# Coded by: KniKnoo. https://gist.github.com/kniknoo/9bba301ab048cbfa350777d39a6098f6
# Remixed by: Just Eli... https://soundcloud.com/just-eli-139271289/

use_bpm 75
use_debug false
use_random_seed 98736
set_sched_ahead_time! 1

# Array used to start and stop loops outputting sounds,
tracker = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

n = (ring :r, :r, :d2, :d3, :f3, :r, :d1, :f2)

fade_in = (line 0, 2, inclusive: true, steps: 40).ramp
fade_in1 = (line 0, 3, inclusive: true, steps: 15).ramp
fade_out = (line 3, 1, inclusive: true, steps: 40).ramp
fade_out1 = (line 2, 0.5, inclusive: true, steps: 15).ramp
fade_out2 = (line 3, 1.5, inclusive: true, steps: 40).ramp
fade_through = fade_in+fade_out
fade_through1 = fade_in+fade_out1
fade_through2 = fade_in+fade_out2

dchord = chord(:g4, :minor, num_octaves: 3)
synth_cutoffs = range(60, 100, 0.5).mirror
synth_rhythm = (ring 1.5, 1.5, 1)
synth_transpositions = (stretch 0, 36) + (stretch -12, 6) + (stretch 12, 6)
synth_phases = (stretch 0.75, 15) + [0.25]
synth_pans = (ring -0.5, 0.5)
synth_volume = 1

dubpad_cutoffs = range(70, 100, 5).mirror
dubpad_phases = (ring 8, 8, 8, 0.5)
dubpad_mixes = (ring 0.5, 0.5, 0.5, 0)
dchord = chord(:g4, :minor, num_octaves: 3)

# Repeat a loop.
define :repeat_loop do |i|
  tracker[i] = 2
end


define :start_loop do |i|
  tracker[i] = 1
end

define :stop_loop do |i|
  tracker[i] = 0
end

define :stop_all do
  tracker[0] = 0
  tracker[1] = 0
  tracker[2] = 0
  tracker[3] = 0
  tracker[4] = 0
  tracker[5] = 0
  tracker[6] = 0
  tracker[7] = 0
  tracker[8] = 0
  tracker[9] = 0
  tracker[10] = 0
  tracker[11] = 0
  
end


define :sn_roll do #|length|
  in_thread do
    sn_amp = 0.05
    4.times do
      sample :sn_dolf, amp: sn_amp, sustain: 0, release: 0.125
      sleep 0.0625
      sn_amp += 0.07
    end
  end
end

define :dubpad do |ch, amp|
  with_fx :echo, amp: amp, mix: dubpad_mixes.look,
  phase: 1.5, decay: 2 do
    with_fx :reverb, room: 0.8 do
      with_fx :ixi_techno, phase: dubpad_phases.tick, cutoff_min: 70 do
        with_synth :tb303 do
          with_synth_defaults attack: 0.1, release: 8,
          cutoff: dubpad_cutoffs.look, res: 0.5 do
            play_chord ch
            play_chord ch.map { |n| n + 0.3 } # Detune chord
          end
        end
      end
    end
  end
end

live_loop :bar do
  sleep 1
end

live_loop :beats do
  sync :bar
  sleep 4
end

live_loop :kick do
  if tracker[0]>0 then
    sample :drum_heavy_kick
    sleep 1
  else
    sleep 1
  end
end

with_fx :reverb, mix: 0.35, room: 0.1, damp: 0.9 do
  live_loop :snare do
    if tracker[1]>0 then
      use_sample_defaults sustain: 0, release: 0.25
      sleep 0.75
      sn_roll if rand > 0.8
      sleep 0.25
      sample :sn_dolf
      del = [0.25, 0.5, 0.75].choose
      cue :bass
      sleep del
      sample :drum_snare_soft, amp: 0.7 if rand > 0.5
      sleep 1 - del
    else
      sleep 1
    end
  end
end


live_loop :hats do
  if tracker[2]>0 then
    sample :drum_cymbal_closed, sustain: 0.125, amp: 0.3 if rand > 0.9
    sleep 0.5
    sample :drum_cymbal_closed, sustain: 0.125, amp: 0.5
    sleep 0.5
  else
    sleep 1
  end
end

live_loop :hats2 do
  if tracker[2]>0 then
    sample [:elec_tick, :elec_blip].choose, sustain: 0.006, amp: 0.8, hpf: 100 if rand > 0.3
    sleep 0.25
  else
    sleep 1
  end
end

live_loop :bass do
  if tracker[3]>0 then
    if rand(1) > 0.75
      n = (ring :r, :r, :d2, :d3, :f3, :r, :d1, :f2)
    else
      n=n.shuffle
    end
    use_synth :fm
    use_transpose +12
    use_synth_defaults release: 0.125 + rrand(0, 0.2), amp: 0.25, pan: rrand(-0.5, 0.5)
    use_transpose +12
    play n.look, cutoff: rrand(30, 130)
    sleep 0.25
    tick
  else
    sleep 1
  end
end

with_fx :gverb, mix: 0.1, room: 20, amp: 0.6 do
  live_loop :skank do
    if tracker[4]>0 then
      with_fx :bitcrusher, mix: 0.7, amp: 0.5, bits: 8, sample_rate: 3136 do
        use_synth :dpulse
        use_synth_defaults release: 0.125
        sleep 0.5
        if rand > 0.8
          with_fx :echo, phase: [0.25, 0.333, 0.375, 0.75].choose, decay: 4, mix: 0.5 do
            play (chord, :g4, :m, invert: -1)
          end
        else
          play (chord, :g4, :m, invert: -1)
        end
        3.times do
          sleep 1
          play (chord, :g4, :m, invert: -1)
        end
        sleep 0.5
      end
      
    else
      sleep 1
    end
  end
end

with_fx :echo, mix: 0.8, phase: 0.75, decay: 4 do
  with_fx :flanger, stereo_invert_wave: 1, feedback: 0.5, amp: 0.5 do
    
    live_loop :lead do
      if tracker[5]== 1 then
        with_fx :flanger, stereo_invert_wave: 1, feedback: 0.5, amp: 0.5 do
          sync :bass
          sync :bass
          use_synth :mod_beep
          rps = (range 6, 9).choose
          use_synth_defaults res: 0.9, attack: 0.25, noise: 2, release: 2 , cutoff: 100, amp: 0.2,
            note_slide: 0.02, sustain: 0.25 * rps / 1.25, decay: 0.25 * rps / 1.25, sustain_level: 0.8,
            mod_range: 0.5, mod_phase: 0.125, mod_wave: 2, pulse_width: 0.2
          mynote = (note_range, :g4, :g6, pitches: (scale, :g, :minor_pentatonic))
          play mynote.reverse.tick
          rps.times do
            control note: mynote.tick - [0, 12].choose
            sleep [0.25, 0.25, 0.5, 0.5, 0.75].choose
          end
          tracker[5] = 0
          sleep 2.5
        end
      else
        sleep 1
      end
    end
    
    if tracker[5] > 0 then
      with_fx :flanger, stereo_invert_wave: 1, feedback: 0.5, amp: 0.5 do
        sync :bass
        sync :bass
        use_synth :mod_beep
        rps = (range 6, 9).choose
        use_synth_defaults res: 0.9, attack: 0.25, noise: 2, release: 2 , cutoff: 100, amp: 0.2,
          note_slide: 0.02, sustain: 0.25 * rps / 1.25, decay: 0.25 * rps / 1.25, sustain_level: 0.8,
          mod_range: 0.5, mod_phase: 0.125, mod_wave: 2, pulse_width: 0.2
        mynote = (note_range, :g4, :g6, pitches: (scale, :g, :minor_pentatonic))
        play mynote.reverse.tick
        rps.times do
          control note: mynote.tick - [0, 12].choose
          sleep [0.25, 0.25, 0.5, 0.5, 0.75].choose
        end
        sleep 2.5
      end
    else
      sleep 1
    end
    
  end
end

live_loop :boom do
  sync :kick
  if tracker[6] == 1 then
    with_fx :reverb, room: 1 do
      sample :bd_boom, amp: 3
    end
    sample :drum_tom_hi_hard, amp: 3, rate: 0.2
    tracker[6]=0
    sleep 4
  end
  
  if tracker[6]>0 then
    with_fx :reverb, room: 1 do
      sample :bd_boom, amp: 1
    end
    sample :drum_tom_hi_hard, amp: 3, rate: 0.2
    sleep 4
  else
    sleep 1
  end
end

live_loop :alien_woosh do
  sync :kick
  if tracker[7] == 1 then
    with_fx :reverb, room: 1 do
      sample :ambi_dark_woosh
      tracker[7]=0
      sleep 4
    end
  end
  
  if tracker[7]>0 then
    with_fx :reverb, room: 1 do
      sample :ambi_dark_woosh
      sleep 4
    end
  else
    sleep 1
  end
end

live_loop :zawa do
  sync :kick
  if tracker[8] == 1 then
    with_fx :reverb, room: 1 do
      with_fx :slicer do
        with_fx :pitch_shift, pitch: -12 do
          use_synth :zawa
          
          [3,5,6,7,8,10].choose.times do |i|
            play chord(:e3, :minor).choose, release: [0.2, 0.4, 0.6, 0.8, 1].choose, pan: [1,0,-1].choose, cutoff: rrand(80, 110)
            tracker[8]=0
            sleep [0.25,0.5,0.75].choose
          end
        end
      end
    end
  end
end

live_loop :pad do
  sync :kick
  if tracker[9] == 1 then
    dubpad dchord, 0.125
    tracker[9] = 0
    sleep 16
  end
  if tracker[9] > 0 then
    dubpad dchord, 0.125
    sleep 16
  end
  sleep 0.1
end

live_loop :synth do
  sync :kick
  if tracker[10] == 1 then
    ch = invert_chord(dchord, rand_i(3))
    sleep synth_rhythm.tick
    # get random values for 1-shot synth.
    tick_advance = rrand_i(0,10)
    tick_advance.times do
      tick
    end
    with_fx :echo, amp: synth_volume, mix: 0.3,
    decay: 8, phase: synth_phases.look do
      with_fx :pan, pan: synth_pans.look do
        with_fx :reverb, room: 0.7, damp: 0.8 do
          with_synth_defaults attack: 0.05, release: 0.3 do
            with_transpose synth_transpositions.look do
              with_synth :sine do
                play_chord ch
              end
              cutoff = synth_cutoffs.look
              with_fx :ixi_techno, cutoff_min: cutoff,
              cutoff_max: cutoff - 30, phase: 1, res: 0.3 do
                with_synth :dsaw do
                  play_chord ch, attack: 0.1
                  tracker[10] = 0
                end
              end
            end
          end
        end
      end
    end
  end
  
  if tracker[10] > 0 then
    ch = invert_chord(dchord, rand_i(3))
    sleep synth_rhythm.tick
    with_fx :echo, amp: synth_volume, mix: 0.3,
    decay: 8, phase: synth_phases.look do
      with_fx :pan, pan: synth_pans.look do
        with_fx :reverb, room: 0.7, damp: 0.8 do
          with_synth_defaults attack: 0.05, release: 0.3 do
            with_transpose synth_transpositions.look do
              with_synth :sine do
                play_chord ch
              end
              cutoff = synth_cutoffs.look
              with_fx :ixi_techno, cutoff_min: cutoff,
              cutoff_max: cutoff - 30, phase: 1, res: 0.3 do
                with_synth :dsaw do
                  play_chord ch, attack: 0.1
                end
              end
            end
          end
        end
      end
    end
  else
    sleep 0.1
  end
end

live_loop :burp do
  sync :kick
  if tracker[11] == 1 then
    with_fx :reverb, room: 1 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        with_fx :slicer do
          with_fx :pitch_shift, pitch: 12 do
            sample :misc_burp, rate: 0.2, amp: 3
            tracker[11] = 0
            sleep 4
          end
        end
      end
    end
  end
  
  if tracker[11]>0 then
    with_fx :reverb, room: 1 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        with_fx :slicer do
          with_fx :pitch_shift, pitch: 12 do
            sample :misc_burp, rate: 0.2, amp: 3
            sleep 4
          end
        end
      end
    end
  else
    sleep 1
  end
end

kick = 0
snare = 1
hats = 2
bass = 3
skank = 4
lead = 5
boom = 6
alien_whoosh = 7
zawa = 8
dub_pad = 9
dub_synth = 10
burp= 11
boom = 6

start_loop lead
sleep 8

repeat_loop kick
sleep 2
repeat_loop snare
repeat_loop hats
sleep 4
repeat_loop bass
sleep 4
repeat_loop skank
sleep 4
start_loop lead
sleep 8
repeat_loop dub_pad
sleep 16
stop_loop dub_pad
repeat_loop dub_synth
sleep 32
start_loop zawa
sleep 8
start_loop burp
sleep 12
start_loop boom
sleep 12
start_loop burp
sleep 12
start_loop zawa
sleep 12
stop_loop dub_synth
sleep 8
repeat_loop dub_pad
sleep 12
start_loop lead
sleep 16
stop_loop dub_pad
sleep 4
start_loop lead
sleep 16
start_loop zawa
sleep 4
stop_all

And you might also be interested in an effects
suite I called ‘Dub Generation’ but never actually
posted to the forums before now I dont think:

"                                  Dub Generation" # V3.0
#___________________________________________________________________________________
"TRACK"#___0___1___2___3___4___5___6___7___8___9__10___11___12___13__14___15___16__17__18 |
track =   [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0, 0 ,  0 ,  0 ,  0 , 0 ,  0 ,  0 , 0 , 0  ]
"             0 to deactivate, 1 for 1-shot effect, 2 for continuous loop."#              |
#_________________________________________________________________________________________|
#            __Track___________Track______________Track_____________Track_______          |
#           /                |                  |                 |             \         |
#           |  0 Kick        | 6  Rim           | 12 Whoosh       | 18 Dub Pad  |         |
#           |  1 Boom        | 7  Bass          | 13 Train        |             |         |
#           |  2 Beat 1      | 8  Skank         | 14 Zawa         |             |         |
#           |  3 Beat 2      | 9  Swirl         | 15 Burp         |             |         |
#           |  4 Snare/Roll  | 10 Guitar 1      | 16 Ghostly keys |             |         |
#           |  5 Hat         | 11_Guitar 2      | 17 Synth tune   |             |         |
#           \________________|__________________|_________________|_____________/         |
#_________________________________________________________________________________________|
"KICK PATTERN"# 0___1___2___3___4___5___6___7                                             |
kick_pattern = [1 , 0 , 0 , 1 , 0 , 1 , 1 , 0].ring
#_________________________________________________________________________________________|
"                             ALT-R or CLICK 'RUN' to ACTIVATE"#                           |
#_________________________________________________________________________________________|
#
#                   Note: Not all effect/volume changes are instantaneous...
#                         you will need to judge them for yourself.
#
#                                 Control Panel by: Eli...
#
# Extra 'BOOM' added for my friend Xomby.  'Respec'...















x=0
set_bpm = 100

kick = 0
boom = 1
base_drum = 2
secondary_drum = 3
snare = 4
hat = 5
rim = 6
bass = 7
skank = 8
lead = 9
guitar1 = 10
guitar2 = 11
alien_whoosh = 12
train = 13
zawa = 14
burp = 15
ghostly_keys = 16
dub_synth = 17
dub_pad = 18

synth_cutoffs = range(60, 100, 0.5).mirror
synth_rhythm = (ring 1.5, 1.5, 1)
synth_transpositions = (stretch 0, 36) + (stretch -12, 6) + (stretch 12, 6)
synth_phases = (stretch 0.75, 15) + [0.25]
synth_pans = (ring -0.5, 0.5)
synth_volume = 1

dubpad_cutoffs = range(70, 100, 5).mirror
dubpad_phases = (ring 8, 8, 8, 0.5)
dubpad_mixes = (ring 0.5, 0.5, 0.5, 0)
dchord = chord(:e3, :minor, num_octaves: 3)
dubpad_volume = 1

n = (ring :r, :r, :d2, :d3, :f3, :r, :d1, :f2)

define :combo do |s, t, u|
  start_loop s
  start_loop t
  start_loop u
  sleep 4
  stop_loop s
  stop_loop t
  stop_loop u
end

define :sn_roll do #|length|
  in_thread do
    sn_amp = 0.05
    4.times do
      sample :sn_dolf, amp: sn_amp, sustain: 0, release: 0.125
      sleep 0.0625
      sn_amp += 0.07
    end
  end
end

define :dubpad do |ch, amp=0.25|
  with_fx :echo, amp: amp, mix: dubpad_mixes.look,
  phase: 1.5, decay: 2 do
    with_fx :reverb, room: 0.8 do
      with_fx :ixi_techno, phase: dubpad_phases.tick, cutoff_min: 70 do
        with_synth :tb303 do
          with_synth_defaults attack: 0.1, release: 8,
          cutoff: dubpad_cutoffs.look, res: 0.5 do
            play_chord ch
            play_chord ch.map { |n| n + 0.3 } # Detune chord
          end
        end
      end
    end
  end
end

# Repeat a loop.
define :repeat_loop do |i|
  track[i] = 2
end

# Bring in a loop.
define :start_loop do |i|
  track[i] = 1
end

# Remove a loop.
define :stop_loop do |i|
  track[i] = 0
end

tick_set 1

live_loop :ticker, auto_cue: false do
  use_bpm set_bpm
  tick
  cue :ticker
  sleep 1
end

live_loop :beats do
  sync :ticker
  set :kick, kick_pattern.tick
  cue :beats
end

live_loop :bar do
  sync :beats
  sleep 4
end

live_loop :kick do
  if track[0] > 0 then
    sync :beats
    kicker = get :kick
    puts kicker
    sample :bd_tek, amp: 1 if kicker == 1
    if track[0] == 1 then
      track[0] = 0
    end
  else
    sleep 0.25
  end
end

live_loop :boom do
  use_bpm set_bpm
  sync :kick
  if track[1] > 0 then
    with_fx :reverb, room: 1 do
      sample :bd_boom, amp: 3
    end
    sample :drum_tom_hi_hard, amp: 3, rate: 0.2
    if track[1] == 1 then
      track[1]=0
      sleep 1
    end
  else
    sleep 1
  end
end

live_loop :base_drums do
  use_bpm set_bpm
  sync :kick
  if track[2] > 0 then
    with_fx :reverb, room: 0.5, phase: 0.5 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        2.times do
          sample :drum_heavy_kick, amp: 1, release: 1
          sleep 1.5
          sample :drum_snare_hard, amp: 0.3, release: 1
          sleep 1.5
        end
        if track[2] == 1 then
          track[2]=0
          
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :secondary_drums do
  use_bpm set_bpm
  sync :kick
  if track[3] > 0 then
    with_fx :reverb, room: 0.5, phase: 0.5 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        sleep 1.5
        
        sample :drum_snare_hard, amp: 0.3, release: 1
        sleep 1.5
        
        sample :drum_heavy_kick, amp: 0.8, release: 1
        sleep 1.5
        
        sample :drum_snare_hard, amp: 0.5, release: 1
        sleep 0.5
        
        sample :drum_bass_soft, amp: 0.25, release: 1
        sleep 0.25
        sample :drum_bass_hard, amp: 0.75, release: 1
        sleep 0.25
        sample :drum_bass_soft, amp: 0.5, release: 1
        sleep 0.5
        if track[3] == 1 then
          track[3]=0
        end
        
      end
    end
  else
    sleep 1
  end
end

with_fx :reverb, mix: 0.35, room: 0.1, damp: 0.9 do
  live_loop :snare do
    use_bpm set_bpm
    if track[4]>0 then
      use_sample_defaults sustain: 0, release: 0.25
      sleep 0.75
      sn_roll if rand > 0.8
      sleep 0.25
      sample :sn_dolf
      del = [0.25, 0.5, 0.75].choose
      cue :bass
      sleep del
      sample :drum_snare_soft, amp: 0.7 if rand > 0.5
      sleep 1 - del
      if track[4] == 1 then
        track[4] = 0
      end
    else
      sleep 1
    end
  end
end

live_loop :hat1 do
  use_bpm set_bpm
  if track[5]>0 then
    sample :drum_cymbal_closed, sustain: 0.125, amp: 0.3 if rand > 0.9
    sleep 0.5
    sample :drum_cymbal_closed, sustain: 0.125, amp: 0.5
    sleep 0.5
    if track[5] == 1 then
      track[5] = 0
    end
  else
    sleep 1
  end
end


live_loop :rim do
  use_bpm set_bpm
  if track[6]>0 then
    sample [:elec_tick, :elec_blip].choose, sustain: 0.006, amp: 0.8, hpf: 100 if rand > 0.3
    sleep 0.25
    if track[6] == 1 then
      track[6] = 0
    end
  else
    sleep 1
  end
end

live_loop :bass do
  use_bpm set_bpm
  if track[7]>0 then
    if rand(1) > 0.75
      n = (ring :r, :r, :d2, :d3, :f3, :r, :d1, :f2)
    else
      n=n.shuffle
    end
    use_synth :fm
    use_transpose +12
    use_synth_defaults release: 0.125 + rrand(0, 0.2), amp: 0.25, pan: rrand(-0.5, 0.5)
    use_transpose +12
    play n.look, cutoff: rrand(30, 130)
    sleep 0.25
    tick
    if track[7] == 1 then
      track[7] = 0
    end
  else
    sleep 1
  end
end

with_fx :gverb, mix: 0.1, room: 20, amp: 0.6 do
  use_bpm set_bpm
  live_loop :skank do
    if track[8]>0 then
      with_fx :bitcrusher, mix: 0.7, amp: 0.5, bits: 8, sample_rate: 3136 do
        use_synth :dpulse
        use_synth_defaults release: 0.125
        sleep 0.5
        if rand > 0.8
          with_fx :echo, phase: [0.25, 0.333, 0.375, 0.75].choose, decay: 4, mix: 0.5 do
            play (chord, :g4, :m, invert: -1)
          end
        else
          play (chord, :g4, :m, invert: -1)
        end
        3.times do
          sleep 1
          play (chord, :g4, :m, invert: -1)
        end
        sleep 0.5
        if track[8] == 1 then
          track[8] == 0
        end
      end
    else
      sleep 1
    end
  end
end

with_fx :echo, mix: 0.8, phase: 0.75, decay: 4 do
  with_fx :flanger, stereo_invert_wave: 1, feedback: 0.5, amp: 0.5 do
    
    live_loop :lead do
      use_bpm set_bpm
      if track[9] > 0 then
        with_fx :flanger, stereo_invert_wave: 1, feedback: 0.5, amp: 0.5 do
          sync :bass
          sync :bass
          use_synth :mod_beep
          rps = (range 6, 9).choose
          use_synth_defaults res: 0.9, attack: 0.25, noise: 2, release: 2 , cutoff: 100, amp: 0.2,
            note_slide: 0.02, sustain: 0.25 * rps / 1.25, decay: 0.25 * rps / 1.25, sustain_level: 0.8,
            mod_range: 0.5, mod_phase: 0.125, mod_wave: 2, pulse_width: 0.2
          mynote = (note_range, :g4, :g6, pitches: (scale, :g, :minor_pentatonic))
          play mynote.reverse.tick
          rps.times do
            control note: mynote.tick - [0, 12].choose
            sleep [0.25, 0.25, 0.5, 0.5, 0.75].choose
          end
          if track[9]== 1 then
            tracker[9] = 0
          end
          sleep 2.5
        end
      else
        sleep 1
      end
    end
    
  end
end

live_loop :guitar1 do
  use_bpm set_bpm
  sync :kick
  if track[10] > 0 then
    with_fx :reverb, room: 1 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        with_fx :slicer do
          sample :guit_em9, rate: 1
          sleep 4
          if track[10] == 1 then
            track[10]=0
            sleep 1
          end
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :guitar2 do
  use_bpm set_bpm
  sync :kick
  if track[11] > 0 then
    with_fx :reverb, room: 1 do
      with_fx :pitch_shift, pitch: -6 do
        sample :guit_e_fifths, rate: 1
        sleep 4
        if track[11] == 1 then
          track[11] = 0
          sleep 1
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :alien_woosh do
  use_bpm set_bpm
  sync :kick
  if track[12] > 0 then
    with_fx :reverb, room: 1 do
      sample :ambi_dark_woosh
      sleep 4
      if track[12] == 1 then
        track[12]=0
        sleep 1
      end
    end
  else
    sleep 1
  end
end

live_loop :train do |s|
  use_bpm set_bpm
  sync :kick
  if track[13] > 0 then
    with_fx :reverb, room: 0.5, phase: 0.5 do
      if s
        sleep 2
        end_release = 4
      else
        end_release = 6
      end
      use_synth :bnoise
      play :Cs3, amp: 0.5, pan: -1
      sleep 0.25
      play :Es3, amp: 0.25, pan: 1
      sleep 0.5
      play :Cs2, amp: 0.4, pan: -1
      sleep 0.25
      play :Es2, amp: 0.25, pan: 1
      sleep 0.5
      play :Ds3, amp: 0.3, pan: -1
      sleep 0.25
      play :Bs3, amp: 0.25, pan: 1
      sleep 0.5
      play :Ds2, amp: 0.3, pan: -1
      sleep 0.25
      play :Bs2, amp: 0.25, pan: 1, release: end_release
      if track[13] == 1 then
        track[13]=0
        sleep 1.5
      end
    end
  else
    sleep 1
  end
end

live_loop :zawa do
  use_bpm set_bpm
  sync :kick
  if track[14] > 0 then
    with_fx :reverb, room: 1 do
      with_fx :slicer do
        with_fx :pitch_shift, pitch: -12 do
          use_synth :zawa
          [3,5,6,7,8,10].choose.times do |i|
            play chord(:e4, :minor).choose, release: [0.2, 0.4, 0.6, 0.8, 1].choose, pan: [1,0,-1].choose, cutoff: rrand(80, 110)
            sleep [0.25,0.5,0.75].choose
            if track[14] == 1 then
              track[14]=0
              sleep [0.25,0.5,0.75].choose
            end
          end
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :burp do
  use_bpm set_bpm
  sync :kick
  if track[15] > 0 then
    with_fx :reverb, room: 1 do
      with_fx :echo, mix: 0.3, phase: 0.25 do
        with_fx :slicer do
          with_fx :pitch_shift, pitch: 12 do
            sample :misc_burp, rate: 0.2, amp: 3
            sleep 4
            if track[15] == 1 then
              track[15] = 0
              sleep 4
            end
          end
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :ghostly_keys do
  use_bpm set_bpm
  sync :kick
  if track[16] > 0 then
    with_fx :reverb, room: 0.8 do
      with_fx :echo, delay: 0.5, decay: 4 do
        use_synth :dark_ambience
        play chord([:b3, :b4, :e3, :e4].choose, :minor).choose,
          amp: 1.5, release: 6
        [5,6,7,8,9,10].choose.times do |i|
          use_synth :piano
          play chord([:b1, :b2, :b3, :e1, :e2, :e3].choose,
          :minor).choose, cutoff: rrand(40, 100),
            amp: 0.75, attack: 0, release: rrand(1, 2),
            cutoff_max: 110, pan: [-1, 0, 1].choose
          sleep [0.25, 0.5, 0.5, 0.5, 1, 1].choose
          if track[16] == 1 then
            track[16] = 0
            sleep 1
          end
        end
      end
    end
  else
    sleep 1
  end
end

live_loop :synth do
  use_bpm set_bpm
  sync :kick
  if track[17] > 0 then
    ch = invert_chord(dchord, rand_i(3))
    sleep synth_rhythm.tick
    # get random values for 1-shot synth.
    tick_advance = rrand_i(0,10)
    tick_advance.times do
      tick
    end
    with_fx :echo, amp: synth_volume, mix: 0.3,
    decay: 8, phase: synth_phases.look do
      with_fx :pan, pan: synth_pans.look do
        with_fx :reverb, room: 0.7, damp: 0.8 do
          with_synth_defaults attack: 0.05, release: 0.3 do
            with_transpose synth_transpositions.look do
              with_synth :sine do
                play_chord ch
              end
              cutoff = synth_cutoffs.look
              with_fx :ixi_techno, cutoff_min: cutoff,
              cutoff_max: cutoff - 30, phase: 1, res: 0.3 do
                with_synth :dsaw do
                  play_chord ch, attack: 0.1
                  sleep synth_rhythm.look
                  if track[17] == 1 then
                    track[17] = 0
                  end
                end
              end
            end
          end
        end
      end
    end
  else
    sleep 0.1
  end
end

live_loop :pad do
  use_bpm set_bpm
  sync :kick
  if track[18] > 0 then
    dubpad dchord, 0.25
    sleep 16
    if track[18] == 1 then
      track[18] = 0
      sleep 1
    end
  else
    sleep 1
  end
end

Regards,

Eli…

2 Likes

Blimey Eli that’s amazing! I’ve got it playing now. That’s a great idea have the control in an array at the top.