It’s a I V vi IV progression, playing the chords and partial arpeggios over them
plus a few non-chord notes from the scale of each chord.
Not a lot of randomness, mostly just overlapping different length sequences. Only uses random to decide whether or not to play certain beats and to add some ‘humanizing’ to the chord arpeggios.
whole = 4.0
double = whole*2
half = whole/2
quart = whole/4
eight = whole/8
sixth = whole/16
use_bpm 60
root = :E2
live_loop :main do
puts("counter", tick(:ctr))
set :ctr, look(:ctr)
if (get :ctr) > 60 # stop main loop
stop
end
progression = [
[root, :major, double],
[root+7, :major, double],
[root+9, :minor, double],
[root+5, :major, whole],
[root+5, :major, whole],
]
note, kind, time = progression.tick(:prog)
print(note, kind)
if look(:ctr) > 3 # start main piano chords
use_synth :piano
with_fx :gverb do
play (chord note, kind), sustain: time*2, attack: 0.5
end
end
if look(:ctr) > 6 # start overtone chords
use_synth :pretty_bell
overamp = (1+Math.sin(tick(:overamp)/5+3.14159))/8
with_fx :flanger do
with_fx :ring_mod do
play (chord note+12, kind, invert:2), sustain: time, attack: time/2, amp:overamp
end
end
end
use_synth :piano
set :bassnote, note
set :basskind, kind
play note, sustain: time, attack: 0.5
use_synth :piano
with_fx :flanger do
with_fx :panslicer, mix: 0.35 do
if look(:ctr) > 8 # start single notes
time_warp rand(0.05) do
play (chord note, kind, num_octaves: 3).tick(:arp), sustain: time/2, decay:time/2
sleep time/2
play (chord note, kind, num_octaves: 2).tick(:arp)+12, sustain: time/2, decay:time/2
end
end
if one_in(4)
sleep time/4
print('non chord')
if look(:ctr) > 12 # start extra notes
time_warp rand(0.1) do
play (scale note, kind, num_octaves: 2).choose, sustain: time/4, decay:time/4
end
end
sleep time/4
else
sleep time/2
end
end
end
end # end main loop
if (get :ctr) > 56 # stop industrial sample
stop
end
live_loop :beat do
sleep 12
with_fx :gverb, spread: 1, damp: 0.3, room: 30, amp: 0.5 do
with_fx :ring_mod, mix: 1, phase: 8 do
if one_in(2)
sample :loop_industrial, release:0.6, finish: 0.8
end
end
end
end
live_loop :beat2 do
if (get :ctr) > 54 # stop at 2.5 mins
stop
end
sleep 2
if not one_in(3)
with_fx :echo, phase:2.0/8*1.5, decay:2 do
sample :drum_heavy_kick, amp:0.4
end
end
if not one_in(4)
sleep 2
with_fx :echo, phase:2.0/8*1.5, decay:2 do
sample :drum_bass_hard, amp:0.4
end
end
end
# bass piano
live_loop :bass do
if (get :ctr) > 56 # stop bass notes
stop
end
note = (chord get(:bassnote), get(:basskind))[[2,0].look(:bassline)]-12
time_warp -1 do
use_synth :hollow
play note-12, pan:[0.8,0.7,-0.8,-0.7].look(:bassline), attack:0, release:0.75, sustain:[7,2].look(:bassline), amp:3
use_synth :piano
play note, sustain: 0.5, pan:[-0.5,-0.4,0.5,0.4].look(:bassline), attack:0, release:0.25, sustain:[7,2].look(:bassline), amp:0.7
end
with_fx :panslicer, phase:1, wave:3 do
use_synth :fm
play note-12, sustain:[7,2].look(:bassline), amp:1
end
sleep [1,7].tick(:bassline)
end
```
This is your first piece?? I am totally impressed …
Here some small hints:
- better place a blank between the parameters and the values (
sustain: 1
instead ofsustain:1
) - There is the constant
Math::PI
in case you’ll need it for your future work - the program throws an error at the first start, because the
set :ctr
comes to late for the other loops. Just a put aset :ctr
inside the head before the live_loop - If you post code, better put it inside 3 backticks ``` ; then you’ll get nice colored formatting
Thanks for sharing and I am looking forward to the pieces to come!!
EDIT: I think the statement
if (get :ctr) > 56 # stop industrial sample
stop
end
in line 77 will not have any effect. Think about the Ruby interpreter as parsing the file from top to bottom. These lines will be executed even before the live_loops start running.
Thanks so much, for the kind words and tips!
Welcome and very nicely done! It gives me Minecraft vibes. I’m personally reminded of the quiet and solitude of playing the game in single player mode, gradually building a base, with a trace of loneliness.
EDIT: had to mention upon listening to this a few more times that I really like your sound design and think it builds a wonderfully emotional vibe. Perhaps you could share some tips and considerations that went into making this piece? I know it’s your first post and all, but you obviously know something about music, even if it’s intuition.
Thanks!
The piece is structured around a I V vi IV progression, so there’s a simple, well known harmonic structure, even if it gets buried a bit.
I start with just bass notes, combining a Piano synth which plays a dominant (5th) above the tonic (root) of the current chord 1 beat before the progression changes, and the the tonic right at the change, so this gives you a leading note that helps give a sense of forward motion. Below that I use a Hollow synth to mirror the piano 1 octave lower, to add a sense of menace.
After that, the actual chords kick in, also played on a piano synth.
After a while, the chord notes come in, played in pairs in sequence over 3 and 2 octaves. For instance, the first chord is E, so the notes are E F# G#. There’s a single tick for these notes, regardless of which chord we’re in, so the sequence skips around.
After a longer while, I add the entire scale related to the chord, playing notes picked at random. This can produce some dissonance, as not all the scale notes will mesh with the scales of the other chords in the progression. For instance, the vi chord is b minor (its scale is B, C♯, D, E, F♯, G, A). If the G note is ringing, for example, and the chord progression goes back to A (which has the scale A, B, C♯, D, E, F♯, G♯) it might clash with a G# or with the A chord itself (A, C#, E).
On top of that, I repeat the chords with a pretty_bell synth, one octave up and with a ringmod with a long phase, to create a sort of high pitched whine that fades in and out, which mimics what I’d do with an electric guitar if I was recording this traditionally.
Finally, there’s some sparse drum samples triggered randomly at long intervals, just to remind you of the beat without actually defining a rhythm, including the ‘loop_industrial’ sample which to me gives it a kind of Prince vibe.
At the end, the parts start to drop out, leaving you with just the final notes on the piano reverberating.
Other than that, I just tweaked the sounds, synths and effects until I got the feeling I was looking for.
D’oh. You’re right of course.
Thanks for your thorough walkthrough and explanation!
I realise there’s no exact science of doubling/layering except in classical orchestration, so much of sound design is a matter of experimentation and experience. I like how you’ve brought your electric guitar and listening background into your music. All I see whenever I try to do instrumentation is a tabula rasa. Unable to define and differentiate roles, I end up using similar/identical synths for all my voices, which gets boring quick. That’s why I’m seeking thoughts.
So would you say there’s a need to reconcile such conflicts, and if so, how would you approach it? Because if too many conflicts happen in quick succession, I imagine a piece might fall apart. To draw from my listening with an extreme case, Schoenberg achieves coherence in his later atonal works by employing traditional rhythms, melodic phrases, and voicing.
My approach for coherence is to rely on motifs which remain constant throughout rapid modulations/chord substitutions. My work leans a bit too random and is lacking in structure however, so I’m rethinking my approach.
Another thing I have to learn from. My music is essentially a continuous stream. Any thoughts on how to approach spacing elements out? I’ve tried simply pausing every other measure, which sometimes creates a nice call and response between voices. But I don’t have much of a method to my bit of madness
I just realised that I’m getting Minecraft vibes because the drums are completely missing on every other run. I like the music with and without the drums however.
Not really. I try to keep them down to a few, and I futzed the script a little because it was ending on a jarring one, other than that I feel they add a bit of spice.
I want to try doing something bluesy with some pre-made motifs, like when you play a riff or lick on the guitar.
In this case, just setting it to be random (or periodic), and tuning it by ear until it sounds right.
It helps me to think about each voice as a traditional instrument or role. So I have the bass, the rhythm guitar or piano, the vocal melody, the background vocals, the drums, the percussion, etc.
When trying to write EDM, I usually have roles for the sub & bass, chords, lead, arps, and percussion. I find synth presets helpful as a starting point. Even with a wavetable synth as versatile as Serum however, I have difficulties creating distinct and interesting patches. I guess I just need to experiment more.
Thanks for your thoughts! It’s always nice to hear from different artists