Here are five tricks I reach for when making music with Sonic Pi.
:sync to a metronome
Keep your live loops in sync by creating a metronome:
live_loop :click do sleep 1 end
:sync to keep all your loops together with the
live_loop :kick, sync: :click do stop sample :bd_808 sleep 1 end
2. move things along with
Increment the default tick by 1 and return value. Successive calls to tick will continue to increment the default tick.
.tick is a handy shorthand for playing melodies. Essentially, it can be used to "tick" through an array of values, moving to the next item in the array on the next repeat.
Let's say you have a simple melody consisting of four notes:
[:c3, :a2, :c3, :e3]
You can play these notes in order using
play [:c3, :a2, :c3, :e3].tick
I also like to use this to set
sleep values for varied but predictable rhythms:
sleep [0.5, 0.75, 0.25, 0.25, 0.5].tick
3. make the computer
.choose for you
IMO, randomization is probably the most important aspects of creating algorithmically generated music.
.choose is a simple way to get the computer to "choose" something for you. It will randomly pick a value from the provided array. Here is an example of a bassline I created with this method:
live_loop :earth, sync: :met do with_fx :echo do use_synth :beep play [:c3, :a2].choose, attack: 2, decay: 3, release: 2 sleep 6 end end
You'll never know if this is going to play a C or an A until it actually happens -- it really helps add a mysterious, unpredictable, and constantly evolving vibe.
dice things up
Throws a dice with the specified num_sides (defaults to 6) and returns the score as a number between 1 and num_sides.
More randomization! Instead of choosing from a set of pre-specified values, this function literally acts like a throw of a die.
I like to use this to trigger random percussion samples to add some ear candy or variation to the beat.
live_loop :perc do if dice == 1 with_fx :ping_pong do sample :perc_snap, amp: 0.5 end end sleep 1 end
5. Get Euclidian with
Creates a new ring of boolean values which space a given number of accents as evenly as possible throughout a bar.
Ok this one is sick AF. This will create Euclidian rhythms based on the parameters provided. Essentially, this is a fancy way of saying that
x number of notes will be spread as evenly as possible across
y number of beats. This concept is named after the ancient homie Euclid, who described the mathematical relationship performed here.
This is a super easy way to generate interesting polyrhythms:
live_loop :bd do sample :bd_808 if (spread 2, 5).tick sleep 0.25 end
This will perform two kicks across the space of 5 sixteenth notes. There are so many cool possibilities to find here by rearranging these numbers. Just go play around with this one and make some IDM. Have fun!