My experiments with Sonic Pi: 2. Are Microwaves Friends?
My first experiment with Sonic Pi was all craft, no art, I’d say. The idea was to create a cover of No Surprises by Radiohead, the aim was to study arrangement, the result was a lullabylike rendition of the Radiohead classic, a successful experiment by my defined criteria. What I wanted to do next, in experiment no. 2, was use Sonic Pi for composition.
The purpose of this experiment
This time, the idea was as much craft as earlier, but a little more art. The idea was to a. see if I could compose an entire track on Sonic Pi, and b. see how easy or difficult such composition was.
The track itself
I set out to compose a minimal house track, Since I wasn’t a huge fan of the preloaded drum samples, I loaded some 808 and 909 drum samples to build the percussive spine of the track. For the bass and melodies, I used the preloaded synths. It was really easy to compose, to be honest, a lot easier than I thought it would be.
Conclusions
The challenge however is that there’s a limited buffer size, so I couldn’t complete the whole track, seeing as my file just ran into a character limit. To extend the track beyond its 2:30 minute run, I’ll have to program the rest of the track on a separate file. Either that, or use live_loops, which appear to be way more economical in terms of characters used. I use functions and not live_loops, because my composition process is not driven by live performance. Compositionally, changing my thinking from what it is now to a performance-based approach will likely make ‘my sound’ evolve in a way that might be interesting.
Next step: continuing work on this track as a series of loops. It’s also, on a side note, how I suspect this thing was intended to be used, hence the focus on ‘live coding’.
The code
Here’s the code I used to make this with the pathnames to my drum samples knocked off.
use_bpm 120 chord_amp = 0.6 pulse_amp = 0.2 pulse_attack = 0 pulse_release = 0.2 hihat_cutoff = 120 closed_hihat_amp = 0.66 open_hihat_amp = 0.33 fade_out = (line 1,0, steps: 2, inclusive: true) master = (ramp *range(0, 1, 0.01)) kick_cutoffs = range(60, 80, 0.5).mirror define :intro_bd_thump do 132.times do if (spread 1, 4).tick then sample "/~", amp: master.look, cutoff: kick_cutoffs.look end sleep 0.25 end end define :basic_bd_thump do 8.times do sample "/~", cutoff: 60 sleep 1 end end define :basic_hihat do 2.times do sleep 0.5 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 0.25 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 0.75 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 1 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 1 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 0.5 end end define :open_and_shut_hihat do 2.times do sleep 0.5 sample "/~", amp: open_hihat_amp, cutoff: hihat_cutoff sleep 0.25 sample "/~", amp: closed_hihat_amp, cutoff: hihat_cutoff sleep 0.75 sample "/~", amp: open_hihat_amp, cutoff: hihat_cutoff sleep 1 sample "/~", amp: open_hihat_amp, cutoff: hihat_cutoff sleep 1 sample "/~", amp: open_hihat_amp, cutoff: hihat_cutoff sleep 0.5 end end define :basic_snare do 4.times do sleep 1 sample "/~" sleep 1 end end define :full_intro do in_thread do basic_bd_thump end basic_snare end define :first_beat do in_thread do basic_bd_thump end in_thread do basic_hihat end basic_snare end define :second_beat do in_thread do basic_bd_thump end in_thread do open_and_shut_hihat end basic_snare end define :basic_melody_line do use_synth :fm play :c3 sleep 0.25 play :ds3 sleep 0.5 play :c3 sleep 0.75 play :as3 sleep 1 play :as3 sleep 0.5 play :gs3 sleep 0.5 play :g3 sleep 4.5 end define :minimised_melody_line do use_synth :fm play :c3 sleep 8 end define :simple_melody_line do use_synth :fm play :c3, release: 12, amp: 0.75 sleep 4 play :ds3, release: 12, amp: 0.75 sleep 4 play :f3, release: 12, amp: 0.75 sleep 8 end define :basic_melo_intro do in_thread do full_intro end basic_melody_line end define :ibiza_verse_1 do use_synth :beep play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 1 play chord(:as4, :major), sustain: 1, amp: chord_amp sleep 0.75 play chord(:as4, :major), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 1 play chord(:f4, :major), sustain: 1, amp: chord_amp sleep 0.75 play chord(:f4, :major), sustain: 1, amp: chord_amp sleep 0.75 end define :ibiza_verse_1_part_2 do use_synth :beep play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:c4, :minor), sustain: 1, amp: chord_amp sleep 1 play chord(:as4, :major), sustain: 1, amp: chord_amp sleep 0.75 play chord(:as4, :major), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 1 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 play chord(:g4, :minor), sustain: 1, amp: chord_amp sleep 0.75 end define :hihatless_ibiza_verse do in_thread do ibiza_verse_1 end in_thread do full_intro end basic_melody_line end define :drumless_ibiza_verse do in_thread do ibiza_verse_1 end basic_melody_line end define :first_hihat_ibiza_verse do in_thread do ibiza_verse_1 end in_thread do first_beat end minimised_melody_line end define :pulse do use_synth :dpulse 128. times do play :c4, attack: pulse_attack, release: pulse_release, cutoff: 85, amp: pulse_amp sleep 0.25 end end define :shaker do 16.times do with_fx :slicer, mix: 1, phase: 0.25, pulse_width: rrand(0.1,0.2) do with_fx :hpf, cutoff: 130 do with_synth :noise do play :c1, decay: 1 end end end sleep 1 end end define :bassline do use_synth :fm play :c3 sleep 1.75 play :c3 sleep 0.5 play :ds3 sleep 0.25 play :c3 sleep 0.5 play :c3 sleep 0.5 play :c4 sleep 0.5 end define :wah do with_fx :ixi_techno, phase: 0.25, res: 0.1, amp: 0.6, mix: 0.8 do use_synth :fm play chord(:c4, :minor), release: 12 sleep 4 play chord(:ds4, :major), release: 12 sleep 4 play chord(:f4, :minor), release: 12 sleep 4 play chord(:cs4, :major), release: 12 sleep 4 end end define :first_pulse_hihat_ibiza_verse do in_thread do 4.times do ibiza_verse_1 end end in_thread do 4.times do first_beat end end in_thread do pulse end 2.times do 3.times do bassline end sleep 4 end end define :first_pulse_hihat_shaker_ibiza_verse do in_thread do 2.times do shaker end end in_thread do 4.times do ibiza_verse_1_part_2 end end in_thread do 4.times do first_beat end end in_thread do pulse end 2.times do 3.times do bassline end sleep 4 end end define :first_pulse_open_and_shut_hihat_shaker_ibiza_verse do in_thread do 2.times do shaker end end in_thread do 4.times do ibiza_verse_1_part_2 end end in_thread do 4.times do second_beat end end in_thread do pulse end 2.times do 3.times do bassline end sleep 4 end end define :first_pulse_open_and_shut_hihat_shaker_wah_ibiza_verse do in_thread do 2.times do shaker end end in_thread do 4.times do with_fx :level, amp: fade_out.tick do ibiza_verse_1_part_2 end end end in_thread do 4.times do second_beat end end in_thread do pulse end in_thread do 2.times do wah end end 2.times do simple_melody_line end end define :first_pulse_open_and_shut_hihat_shaker_wah_verse do in_thread do 2.times do shaker end end in_thread do 4.times do second_beat end end in_thread do pulse end in_thread do 2.times do wah end end 2.times do simple_melody_line end end define :first_pulse_shaker_wah_verse do in_thread do 2.times do shaker end end in_thread do 4.times do full_intro end end in_thread do pulse end in_thread do 2.times do wah end end 2.times do simple_melody_line end end define :bd_snare_wah_verse do in_thread do 4.times do full_intro end end 2.times do wah end end #-------track arrangement---------- with_fx :reverb do intro_bd_thump 3.times do hihatless_ibiza_verse end drumless_ibiza_verse 3.times do first_hihat_ibiza_verse end drumless_ibiza_verse first_pulse_hihat_shaker_ibiza_verse first_pulse_open_and_shut_hihat_shaker_ibiza_verse first_pulse_open_and_shut_hihat_shaker_wah_ibiza_verse first_pulse_open_and_shut_hihat_shaker_wah_verse first_pulse_shaker_wah_verse wah wah end
Home is a ghost of our own creation: the cave – its lowly ancestor – recreated from some lost memory. Our predators are now nebulous, our prey has come to be served on china. Is it any surprise that our idea of home has become just as nebulous? Is it any wonder that home is no longer just somewhere to lay down our weapons, lick our wounds, share a quiet dinner with family?