This month we’re going to take a deep dive into one of Sonic Pi’s most powerful and flexible audio FX - the :slicer
. By the end of this article you will have learned how to manipulate the overall volume of parts of our live coded sound in powerful new ways. This will allow you to create new rhythmic and timbral structures and broaden your sonic possibilities.
:prophet
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
Now, let’s pipe it through the :slicer
FX:
with_fx :slicer do
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
Hear how the slicer acts like it’s muting and unmuting the audio with a regular beat. Also, notice how the :slicer
affects all the audio generated between the do
/end
blocks. You can control the speed at which it turns the audio on and off with the phase:
opt which is short for phase duration. Its default value is 0.25
which means 4 times a second at the default BPM of 60. Let’s make it faster:
with_fx :slicer, phase: 0.125 do
synth :prophet, note: :e1, release: 8, cutoff: 70
synth :prophet, note: :e1 + 4, release: 8, cutoff: 80
end
:dsaw
Duración
Phase duration is the length of time for one on/off cycle. Therefore smaller values will make the FX switch on and off much faster than larger values. Good values to start playing with are 0.125
, 0.25
, 0.5
and 1
.
By default, the :slicer
FX uses a square wave to manipulate the amplitude through time. This is why we hear the amplitude on for a period, then immediately off for a period, then back on again. It turns out that the square wave is just one of 4 different control waves that are supported by :slicer
. The others are saw, triangle and (co)sine. Take a look at the diagram below to see what these look like. We can also hear what they sound like. For example, the following code uses (co)sine as the control wave. Hear how the sound doesn’t turn on and off abruptly but instead smoothly fades in and out:
with_fx :slicer, phase: 0.5, wave: 3 do
synth :dsaw, note: :e3, release: 8, cutoff: 120
synth :dsaw, note: :e2, release: 8, cutoff: 100
end
Have a play with the different wave forms by changing the wave:
opt to 0
for saw, 1
for square, 2
for triangle and 3
for sine. See how different waves sound with different phase:
opts too.
Each of these waves can be inverted with the invert_wave:
opt which flips it on the y axis. For example, in a single phase the saw wave typically starts high, and slowly goes down before jumping back to the top. With invert_wave: 1
it will start low and slowly go up before jumping back down again. Additionally, the control wave can be started at different points with the phase_offset:
opt which should be a value between 0
and 1
. By playing around with phase:
, wave:
, invert_wave:
and phase_offset
opts you can dramatically change how the amplitude is modified through time.
Duración
By default, :slicer
switches between amplitude values 1
(fully loud) and 0
(silent). This can be changed with the amp_min:
and amp_max:
opts. You can use this alongside the sine wave setting to create a simple tremolo effect:
with_fx :slicer, amp_min: 0.25, amp_max: 0.75, wave: 3, phase: 0.25 do
synth :saw, release: 8
end
This is just like grabbing the volume knob on your hi-fi and moving it up and down just a little so the sound ‘wobbles’ in and out.
Elegir (choose)
with_fx :slicer, phase: 0.125, probability: 0.6 do
synth :tb303, note: :e1, cutoff_attack: 8, release: 8
synth :tb303, note: :e2, cutoff_attack: 4, release: 8
synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
Hear how we now have an interesting rhythm of pulses. Try changing the probability:
opt to a different value between 0
and 1
. Values closer to 0
will have more space between each sound due to the likelihood of the sound being triggered being much lower.
rand
Finally, you can change the ‘resting’ position of the control wave when the probability test fails from 0
to any other position with the prob_pos:
opt:
with_fx :slicer, phase: 0.125, probability: 0.6, prob_pos: 1 do
synth :tb303, note: :e1, cutoff_attack: 8, release: 8
synth :tb303, note: :e2, cutoff_attack: 4, release: 8
synth :tb303, note: :e3, cutoff_attack: 2, release: 8
end
One really fun thing to do is to use :slicer
to chop a drum beat in and out:
with_fx :slicer, phase: 0.125 do
sample :loop_mika
end
This allows us to take any sample and create new rhythmical possibilites which is a lot of fun. However, one thing to be careful about is to make sure that the tempo of the sample matches the current BPM in Sonic Pi otherwise the slicing will sound totally off. For example, try swapping :loop_mika
with the loop_amen
sample to hear how bad this can sound when the tempos don’t align.
As we have already seen, changing the default BPM with use_bpm
will make all the sleep times and synth envelope durations grow or shrink to match the beat. The :slicer
FX honours this too, as the phase:
opt is actually measured in beats not seconds. We can therefore fix the issue with loop_amen
above by changing the BPM to match the sample:
sample :loop_amen
Let’s apply all these ideas into a final example that only uses the :slicer
FX to create an interesting combination. Go ahead, start changing it and make it into your own piece!
sample :guit_em9, rate: 0.5