2023 TOPLAP Solstice Live Set
I did a 15-minute improvised set from a nearly blank screen for the TOPLAP Solstice Stream 2023. Here’s what I started with:
do
jm1 4 $ silence
jm2 4 $ silence
jm3 4 $ silence
jm4 4 $ silence
jm5 4 $ silence
jm1 2 $ (|* gain 0.7) $
drumM "rolandtr909" [
s "bd" # n 1
]
jm2 2 $ (|* gain 0.7) $
drumM "rolandtr808" [
s "perc"
]
jm3 2 $ (|* gain 0.7) $
n "0" # s "plaits" # engine 2 # morph 0.5 # timbre 0.5 # harm 0.5
# level 0.9 # lpg 0.5 0.5 # mode 0 # octave 3
jm4 2 $ (|* gain 0.7) $
n "5" # s "supergong" # voice 0.5 # decay 0.2 # accelerate 0 # octave 2
# verbwet 0.1 # verbtime 0.1 # verbdamp 0.2 # verbhp 0.2 # verbfreeze 0 # verbdiff 1
|* gain 0.7
-- samples
jm5 2 $ (|* gain 0.7) $
n "0" # s "rave"
do
jm1 4 $ silence
jm2 4 $ silence
jm3 4 $ silence
jm4 4 $ silence
jm5 4 $ silence
and here’s what I finished with:
-- bd cp sd hh/oh
jm1 2 $ (|* gain 0.4) $
drumM "rolandtr909" [
every 4 (silent) $ fast 2 $ s "bd(<3 5 3 5>,8)" # n 1,
juxBy (slow 4 sine) rev $ every 6 (silent) $ every 4 (# waveloss "<25 50 75>") $
ghost $ fast 2 $ s "cp(<5 3>, 8, 2)" # n 1 # (speed $ slow 4 $ range 0.8 1.2 sine),
s "hh oh hh hh . hh hh hh hh . oh hh oh hh . hh!4" # cut 2
]
# verbgain 1.0 # verbwet 0.1 # verbtime 0.2 # verbdamp 0.2 # verbhp 0.2
# verbfreeze 0 # verbdiff 0.1
-- perc, cb
jm2 2 $ silent $ (|* gain 0.7) $
slow 4 $ drumM "rolandtr808" [
echo 3 0.75 0.5 $ fast 2 $ s "perc(5,8)" # n (irand 8)
]
hush
jm3 2 $ (|* gain 0.6) $
ghost $
every 3 (off 0.25 (+ n (-7))) $
every 4 (off 0.5 (+ n 5)) $
fast 2 $ n (scale "<lydian phrygian>" (segment 8 $ irand 10))
# s "plaits" # engine 2 # morph (slow 6 saw) # timbre 0.5 # harm (slow 8 sine)
# level 0.9 # lpg 0.5 0.5 # mode 0 # octave 3
jm4 2 $ (|* gain 0.5) $ silent $
ghost $ n "3@6 _ 4@5" # s "supergong" # voice 1 # decay 0.6 # accelerate 0 # octave 2
jm5 2 $ (|* gain 0.7) $ every 4 (# waveloss 20) $
timeLoop 8 $ rotL 16 $ ghost $ fast 4 $ randslice 4 $ n "1 2 3 4" # s "rave" # cut 1
jm1 2 $ silence
jm2 2 $ silence
jm3 2 $ silence
jm4 2 $ silence
jm5 2 $ silence
For this set I was happy to have some preselected samples, instruments and effects and see where it went from there so blank-screening (which I do appreciate) wasn’t worth it as I would waste time typing out boilerplate.
There isn’t much custom code on top of vanilla tidal here apart from jm1
and friends which are convenient aliases for jumpMod n
. I’m also using tidal-drum-machines for drum samples and drumM
and mi-Ugens for verb
and plaits
.
There are some nice performance tricks used here that I found while preparing this set:
- Using
ghost
withcut
orlegato
gets you some really nice rhythmic effects. I usecut
here but it does (and did) end up with a lot of clicks if you’re not careful - combininglegato
andfadeTime
is safer and more amenable to patterning. - Use
timeLoop
androtL
in combination with a random pattern to deterministically play a subset of it. You can shift it around by varying the parameter passed torotL
and change the length of the loop by varying the parameter passed totimeLoop
. - Apply transformations at different integer loop intervals with multiple uses of
every
to build up patterns on longer timescales. I find this works very nicely withsilence
! (3,8)
and(5,8)
rhythms always sound great sped up.- Set a low default top-level gain on the channel with
* gain x
at the top so you don’t redline instantly when stacking effects. Arithmetic operators use sensible defaults if a value isn’t present in the pattern their combining with so if you do* gain x
on a pattern without gain it’ll be as if the pattern without gain had gain 1.
Most importantly, you need to know the functions and parameters you want to use by heart so you can concentrate on expression during the performance. I also routed each channel out an audio track in Ableton so I could keep an eye on levels and set up a Launch Control XL to control a gain and EQ on each channel.
A few things went wrong:
- The percs on track 2 and the gong on track 4 didn’t really gel how I wanted them to, so after a bit of experimentation I silenced the tracks.
- I tried to start recording in OBS as well as streaming half way through which caused some horrible glitches.
This was my first live-streamed performance - overall I really enjoyed it and I highly recommend the experience to anyone learning Tidal. Here’s the recording of the performance: