Palindrome Piano

Phil wrote a bassline & turned it into a piano part, then decided to make it Palindromic … things went from there… ended up recording a “live bass” sample & chopping it up with the amazing Sonic Pi {slice: look, num_slices: s } (s being 10 in this track).
The Piano fades in with a ramp & starts with a heavy Vowel FX dissipating to “plain piano”
I tried using (ramp a, b, incs).look but didn’t sound the same as using my (verbose?) range(a, b, incs).ramp … anyway, it’s on soundcloud :

Palindrome 2

use_bpm 110
use_debug false
use_cue_logging false

# custom samples, sorry folks!
dRoot = "C:/Users/Phil/Documents/samples/the_drum_club/Yamaha RY-30/"
bassPart = "C:/Users/Phil/Documents/samples/bass_mono_1.wav"

bd1 = [1,1,0,0,0,0,0,0,0,2,0,0,0,0,0,0].ring
sn1 = [0,0,0,0,1,0,0,0,0,0,0,0,1,0,[2,3].sample,0].ring
ht1 = [1,0,2,0,1,0,2,0].ring

bds = [0, "Bassdrum-03", "Bassdrum-02"]
sns = [0, "Snare3", "Rimshot1", "Rimshot2"]
hts = [0, "Hat Pedal-01", "Hat Pedal-02"]

live_loop :drums do
  tick
  if look >= 128
    a = range(1, 0, 0.001).ramp[look - 128]
  else
    a = range(0, 1, 0.001).ramp.look
  end
  # with the look value, we cycle through the drum arrays to play (or not) a sample pulled from the arrays referring to the different samples!
  with_fx :level, amp: a do
    if bd1.look != 0
      with_fx :distortion, distort: 0.7 do
        sample dRoot, bds[bd1.look]
      end
    end
    if sn1.look != 0
      sample dRoot, sns[sn1.look]
    end
    if ht1.look != 0
      sample dRoot, hts[ht1.look]
    end
    sleep 0.5
  end
end

bassNotes = [:g2, :d2, :as2, :c2, :d2, :as2, :a2, :c2, :ds2, :a2, :ds2, :g2, :a2, :as2].ring
lowNotes = [:g3, :a3, :as4, :ds3, :d3, :ds3, :a2, :a2, :ds3, :d3, :ds3, :as4, :a3, :g3].ring
topNotes = [:as4, :d4, :g3, :c4, :a4, :as4, :c4, :c4, :as4, :a4, :c4, :g3, :d4, :as4].ring

live_loop :piano do
  tick
  use_synth :piano
  use_synth_defaults amp: 1.2, sustain: 0.1, decay: 0.4
  puts "piano look = #{look}"
  if look >= 100 and look <= 130
    r = 2
    s = 1
  elsif look >= 0 and look < 100
    r = 4
    s = 0.5
  else
    r = 1
    s = 16
  end
  
  with_fx :level, amp: range(0, 1, 0.01).ramp.look do
    with_fx :vowel, mix: range(0.8, 0, 0.001).ramp.look, voice: [0,1,2,3,4].sample  do
      r.times do
        with_fx :reverb, damp: 0.2, room: 0.4 do
          play lowNotes.look, pan: 0.1
          sleep s
          play topNotes.look, pan: -0.1
          sleep s
        end
      end
    end
  end
end

live_loop :synthBass do
  tick
  co = 140
  use_synth :bass_foundation
  if look >= co
    use_synth_defaults amp: range(1, 0, 0.01)[co - look]
  end
  
  sleep 0.5
  with_fx :distortion, distort: range(0, 0.4, 0.01).ramp.look do
    with_fx :whammy, deltime: rand(), grainsize: rand(), max_delay_time: 1.22,  mix: 0.4 do
      play bassNotes.look, sustain: 2, decay: 6
      tick
      sleep 7.5
    end
  end
end

live_loop :bassLive do
  tick
  puts "new bass at #{look}"
  s = 10.0
  with_fx :ping_pong, feedback: 0.75, phase: 0.25, mix: 0.5 do
    sample bassPart, amp: range(0.1, 0.7, 0.01).look, slice: look, num_slices: s
  end
  sleep 8
end

3 Likes