Sonic Pi Monthly Challenge #3

Dear Sonic Pi’ers,

It is time for challenge number 3 :smiley:

This challenge is dedicated to vinyl record speeds.

Instructions:

  1. Choose a vinyl record speed - 33, 45 or 78 rpm. Your song BPM must be a multiplication of your chosen rpm speed. So, for example, if you choose 45, your song BPM must be either 45, 90, 135 and so on.
    You may use the built-in synths and samples or use external samples; it is up to you.
    The length and genre is also up to you.

  2. Post the code and audio links (Youtube/Soundcloud/Bandcamp, etc) in this topic.
    Tell us about your process and/or what inspired your music, if you want.

The deadline for this challenge is 31st December.

Code and audio links will get added to the challenge repo

Happy coding :computer:

3 Likes
# Demonstrates the interaction of

# 'use_bpm', 'sleep', and implicit

# release

for time in 1..10
  
  use_bpm(33*time)
  
  for octave in 0..3
    
    play hz_to_midi 100*(2**octave)
    
    sleep (33*time)/60.0

  end

end
# A Sonic Pi tribute to the turntable - by Binarysweets
# Settings can be adjusted while playing
# Change :deck1_on or :deck2_on to true to start playing the decks
# Use the :deck1_speed_adj / :deck1_speed_adj to fine tune the tempo

# Choose the record speed, 33, 45 or 78
rpm = 45

# Select a scale
set :scl, scale(:bb1, :diatonic, num_octaves: 3)

# It's DJ time!
######################################################################
#                    ___                                          ___#
# __________________/  /                       __________________/  /#
#| _    _______    /  /                       | _    _______    /  / #
#|(_) .d########b.//)| _____________________ |(_) .d########b.//)|   #
#|  .d############//  ||        _____        ||  .d############//  | #
#| .d######""####//b. ||() ||  [D JAY]  || ()|| .d######""####//b. | #
#| 9######(  )#_//##P ||()|__|  | = |  |__|()|| 9######(  )#_//##P | #
#| 'b######++#/_/##d' ||() ||   | = |   || ()|| 'b######++#/_/##d' | #
; set :deck1_on, true             ;             set :deck2_on, true
#|  _"9a#######aP"    ||  _   _____..__   _  ||  _"9a#######aP"    | #
#| |_|  `""""''       || (_) |_____||__| (_) || |_|  `""""''       | #
#|  ___..___________  ||_____________________||  ___..___________  | #
;set :deck1_speed_adj,3           ;           set :deck2_speed_adj,3
#|____________________|                       |____________________| #
#                                                                    #
######################################################################


set :bpm, rpm * 3
use_bpm get :bpm

live_loop :deck1 do ; tick
  use_bpm get[:bpm] + get[:deck1_speed_adj]
  
  if get[:deck1_on] == true
    sample :loop_compus, slice: look,
      amp: rrand(3, 3.2),
      beat_stretch: [16, 32].choose if bools(1,0,1,1).look
  end
  
  sleep 0.25
end

live_loop :deck2 do ; tick
  use_bpm get[:bpm] + get[:deck2_speed_adj]
  
  if get[:deck2_on] == true
    scl = get :scl
    notes = (ring 0,1,1,2, 0,2,2,3).mirror
    
    with_fx :bitcrusher, sample_rate: 2000, bits: [6,4].choose do
      with_synth :square do
        play scl[notes.look], amp: rrand(1.0, 1.2),
          release: 0.5 if bools(0,1,1,0).look
      end
    end
  end
  
  sleep 1
end

# The ascii art isn't mine - https://ascii.co.uk/art/turntables
7 Likes

That is very cool. Now I start to see what this challenge is about.

Yes, very nice idea! my poor CPU can’t handle it for very long though… :joy: :sweat_smile:

That’s weird. Apart from the deck switches, it’s just two standard live loops.
Could it be the bitcrusher fx inside the deck2 loop maybe?

Here is my contribution. OK, not vinyl but shellac :smile: The volume is a bit low, they didn’t have electric amps back then, you’ll have to turn up after listening to @binarysweets DJ thing. That doesn’t seem to use too much CPU on mine btw

#Sonic Pi Challenge Dec 2020
#SOXSA
#Shellac Interlude

set_volume! 5
use_bpm 78
sleep 3

use_synth :noise
with_fx :bpf, centre: 80, amp: 0.5 do
  play :e4, sustain: 0.05, release: 0.0
end

live_loop :surfacenoise do
  if tick < 140 then
    use_synth :noise
    with_fx :bpf, centre: 80 do
      play :e4, amp: 0.1, sustain: 1.0
    end
    sleep 0.6
    with_fx :bpf, centre: 30 do
      play :e4, amp: 0.6, sustain: 1.0
    end
    sleep 0.4
  else
    sleep 1
  end
end


x=0.43
y=0.1
z=0.9
live_loop :scratches do
  if tick>5 and look<110 then
    x = rrand(0.0,1.0) if one_in(13)
    y = rrand(0.0,1.0) if one_in(17)
    z = rrand(0.0,1.0) if one_in(19)
    with_fx :bpf, centre: 80, amp: 8.0 do
      at x do
        sample :ambi_swoosh, beat_stretch: 0.01, amp: 0.5
      end
      at y do
        sample :ambi_swoosh, beat_stretch: 0.02, amp: 0.1
      end
      at z do
        sample :ambi_swoosh, beat_stretch: 0.04, amp: 0.1
      end
    end
  end
  sleep 1
end

live_loop :randomnoises do
  if tick<110 and one_in(7) then
    sleep rrand(0.1,1.0)
    use_synth :noise
    with_fx :bpf, centre: 80, amp: rrand(0.3,0.5) do
      play :e4, sustain: 0.05, release: 0.0
    end
  end
  sleep 1
end

live_loop :choir do
  if tick>8 and look<100 then
    with_fx :reverb, mix: 0.8, damp: 0.1 do
      with_fx :nbpf, centre: 80, amp: 0.1 do
        a=[3,4,3,2,6,6,2,8,4].ring.look + rrand(0.0,0.1)
        sample :ambi_choir, amp: 0.1, beat_stretch: a
      end
    end
  end
  sleep 1
end
3 Likes

Apparently a tight loop that repeats every 0.25 beats at 78 rpm/234 BPM is what does it for me… (45 rpm works, but there are constant ‘Timing warning: running slightly behind’ messages). This is on a Windows desktop, it may work differently on my macbook, haven’t tested it there :man_shrugging:
image

Just two weeks left to get your submissions in for this one!
Thank you for the submissions so far :+1:

I have finally managed to have a bit of time to do something for one of these :slight_smile: Here’s mine:
(With apologies to any native Irish speakers out there :sweat_smile:)


PS. If you do know Irish, I’m actually kind of curious about the words and phrases they are saying on the recording - feel free to translate for me!

3 Likes

Here is an entry from me. I picked a bpm of 2 * 78 to meet the challenge requirement and thought a festive offering would be appropriate, so here are two verses of the Carol of the Bells arranged for Sonic Pi. I decided to spend quite a lot of time adjusting the volume level of the individual parts as they play, using the “at” command to trigger the changes, and fx :level wrappers to do the adjustment. I also added two further fx :level wrappers to balance the first part against the remaining three which used a different synth. The code is below and you can hear it on soundcloud

#Carol_of_the_Bells.rb
#coded for Sonic Pi by Robin Newman, Dec 22 2020

use_bpm 2*78 #twice 78rpm!! criterion for Monthly Challenge #3
s=0.95;r=0.1 #set sustain release fractions
pp=0.3;p=0.4;mf=0.6;f=0.8;ff=1 #defeine vol levels

with_fx :reverb,room: 0.8,mix: 0.8 do
  use_synth :beep #synth for top part
  with_fx :level ,amp: 1.3 do #most toop part relative to the others
    with_fx :level,amp: pp do |v1| #set initial volume
      set :v1,v1 #pointer to fx_level
      #control volume at times specified by "at" this part also has variable slide times
      at [12*3,16*3, 24*3,25*3,26*3,27*3,44*3,48*3,56*3,57*3,58*3,59*3],
      [[mf,0],[f,0],[ff,3],[mf,3],[f,3],[p,3],[mf,0],[f,0],[ff,3],[mf,3],[f,3],[p,3]] do |vol1|
        control get(:v1),amp: vol1[0],amp_slide: vol1[1]
      end
      
      a1=[:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:G5,:G5,:G5,:F5,:Ef5,:D5,:D5,:D5,:C5,:Bf4,:C5,:C5,:C5,:D5,:C5,:G4,:G4,:G4,:G4,:D4,:E4,:Fs4,:G4,:A4,:Bf4,:C5,:D5,:C5,:Bf4,:D4,:E4,:Fs4,:G4,:A4,:Bf4,:C5,:D5,:C5,:Bf4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:D5,:C5,:D5,:Bf4,:G5,:G5,:G5,:F5,:Ef5,:D5,:D5,:D5,:C5,:Bf4,:C5,:C5,:C5,:D5,:C5,:G4,:G4,:G4,:G4,:D4,:E4,:Fs4,:G4,:A4,:Bf4,:C5,:D5,:C5,:Bf4,:D4,:E4,:Fs4,:G4,:A4,:Bf4,:C5,:D5,:C5,:Bf4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:G4]
      b1=[1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.0,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,1.0,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,12.0]
      in_thread do
        for i in 0..a1.length-1
          play a1[i],sustain: b1[i]*s,release: b1[i]*r,pan: -0.6
          sleep b1[i]
        end
      end
    end #level1
  end #level part boost
  use_synth :blade#for remaining parts
  with_fx :level,amp: 0.8 do# balance parts 2-4 reduced
    with_fx :level,amp: pp do |v2| #set initial volume
      set :v2,v2
      at [12*3,16*3,28*3,36*3,44*3,48*3,60*3],[mf,f,p,pp,mf,f,p] do |vol2|
        control get(:v2),amp: vol2,amp_slide: 0.5 #fixed slide times
      end
      
      a2=[:r,:r,:r,:r,:G4,:F4,:Ef4,:D4,:G4,:F4,:Ef4,:D4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:G4,:A4,:A4,:G4,:G4,:A4,:Bf4,:G4,:G4,:A4,:Bf4,:D5,:G4,:G4,:G4,:G4,:D4,:E4,:Fs4,:G4,:D4,:E4,:Fs4,:G4,:D4,:C4,:F4,:Ef4,:D4,:r,:G4,:F4,:Ef4,:D4,:G4,:F4,:Ef4,:D4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:Bf4,:A4,:Bf4,:G4,:G4,:A4,:A4,:G4,:G4,:A4,:Bf4,:G4,:G4,:A4,:Bf4,:D5,:G4,:G4,:G4,:G4,:D4,:E4,:Fs4,:G4,:D4,:E4,:Fs4,:G4,:D4,:C4,:F4,:Ef4,:D4]
      b2=[3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,1.0,1.0,1.0,3.0,1.0,1.0,1.0,3.0,3.0,3.0,3.0,9.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,1.0,1.0,1.0,3.0,1.0,1.0,1.0,3.0,3.0,3.0,3.0,12.0]
      in_thread do
        for i in 0..a2.length-1
          play a2[i],sustain: b2[i]*s,release: b2[i]*r,pan: -0.2
          sleep b2[i]
        end
      end
    end#level2
    
    with_fx :level,amp: pp do |v3| #set initial volume
      set :v3,v3
      at [12*3,16*3,24*3,28*3,40*3,44*3,48*3,56*3,60*3],[mf,f,ff,p,pp,mf,f,ff,p] do |vol3|
        control get(:v3),amp: vol3,amp_slide: 0.5 #fixed slide times
      end
      
      a3=[:r,:r,:r,:r,:r,:r,:r,:r,:Ef4,:D4,:C4,:G3,:C4,:C4,:C4,:C4,:D4,:D4,:D4,:D4,:Ef4,:Ef4,:Ef4,:Ef4,:D4,:D4,:D4,:D4,:D4,:E4,:F4,:Ef4,:D4,:G4,:F4,:Ef4,:D4,:D4,:Ef4,:Ef4,:D4,:C4,:D4,:D4,:D4,:D4,:Ef4,:Ef4,:Ef4,:F4,:Ef4,:D4,:D4,:D4,:D4,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:G3,:G3,:G3,:G3,:G3,:r,:r,:r,:r,:r,:Ef4,:D4,:C4,:G3,:C4,:C4,:C4,:C4,:D4,:D4,:D4,:D4,:Ef4,:Ef4,:Ef4,:Ef4,:D4,:D4,:D4,:D4,:D4,:E4,:F4,:Ef4,:D4,:G4,:F4,:Ef4,:D4,:D4,:Ef4,:Ef4,:D4,:C4,:D4,:D4,:D4,:D4,:Ef4,:Ef4,:Ef4,:F4,:Ef4,:D4,:D4,:D4,:D4,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:G3,:G3,:G3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3]
      b3=[3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,1.0,1.0,1.0,0.5,0.5,1.0,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,3.0,3.0,9.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,1.0,1.0,1.0,0.5,0.5,1.0,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,1.0,0.5,0.5,0.5,0.5,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0]
      in_thread do
        for i in 0..a3.length-1
          play a3[i],sustain: b3[i]*s,release: b3[i]*r,pan: 0.2
          sleep b3[i]
        end
      end
    end#level3
    
    
    with_fx :level,amp: mf do |v4| #set initial volume
      set :v4,v4
      at [16*3,24*3,28*3,44*3,48*3,56*3,60*3],[f,ff,p,mf,f,ff,p] do |vol4|
        control get(:v4),amp: vol4,amp_slide: 0.5 #fixed slide times
      end
      
      a4=[:r,:r,:r,:r,:r,:r,:r,:r,:r,:r,:r,:r,:Ef3,:Ef3,:Ef3,:Ef3,:G3,:G3,:G3,:G3,:C4,:C4,:C4,:C4,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:D3,:D3,:D3,:D3,:E3,:F3,:Ef3,:D3,:C3,:G2,:r,:r,:r,:r,:r,:r,:r,:r,:r,:Ef3,:Ef3,:Ef3,:Ef3,:G3,:G3,:G3,:G3,:C4,:C4,:C4,:C4,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:Bf3,:A3,:Bf3,:G3,:D3,:D3,:D3,:D3,:E3,:F3,:Ef3,:D3,:C3,:G2]
      b4=[3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,3.0,2.0,1.0,3.0,3.0,3.0,3.0,9.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,3.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,3.0,3.0,3.0,2.0,1.0,3.0,3.0,3.0,3.0,12.0]
      in_thread do
        for i in 0..a4.length-1
          play a4[i],sustain: b4[i]*s,release: b4[i]*r,pan: 0.6
          sleep b4[i]
        end
      end
    end#level4
  end#level balance parts 2-4
  
end#fx

4 Likes

Brilliant both of these.

I’m pleased we got a seasonal one in :grinning:

no more monthly challenges?

Hi,

Maybe :slight_smile:

The last challenge didn’t receive any submissions so I stopped, but I’ve been busy with other stuff as well.

Do you have an idea for one?

Hum?

Something that just came to mind:

One sound.

Imagine having to use only one sound and stretch, slice, pitch to make something?

Could be neat.

I’ve got one which is from Allen Strange’s book ’ Electronic Music: Systems, Techniques and Control’. It’s a sequencing score written by Daniel Goode for his 1975 piece ‘Faust Crosses the Raritan somewhere in West Africa and finds himself back home, somewhere south of the Reich’. The image contains the score based instructions.

I use this sometimes in the Ableton user group to approach sequencing from a different perspective.
Looking forward to hearing and seeing different implementations.

I’d recommend Strange’s book as being a really good source of ideas whether using modular, DAW or live coding, or any combination thereof.

2 Likes

@din, it’s a great idea, we did this for challenge #1 already though

Yes, I do like this idea, perhaps I’ll open this one as challenge #6 for September :+1: