For my composition project, ‘BeachMind’, I wanted to recreate Abu Dhabi spring, beaches, sun and all in a bouncy sonic experience. I wanted to keep the track minimal, bringing in and dropping out elements based on the progression of the song. The visuals are surpposed to evoke a 90s SEGA-esque ocean with flittering lights. The song itself builds on sunny house music chords. I added some embellishments in the form of a sharp laser beam sample and hoot that adds to the atmospheric track.
The structure I followed is a twist on a very basic (ABACAB) formula of A -> B -> B’ -> AB -> AB’-> C: here I tried to bring in elements from other sections and join them together in ways to make it feel like the track was always active and alive. There was even a moment in my performance where I felt like re-editing the outro to drop out some of the percussion was something that the track needed. I think this was the most enjoyable part of the experience for me; to fully dissolve into the world of this track and listen to what it feels like and respond to it live rather than having a set structure in mind.
Tidal code:
setcps (130/60/4)
d1 $ s "bd*4"
let intro = do
xfadeIn 1 4 $ stack [
s "bd*4",
s "~ cp ~ cp",
s "[~ ho]*4"
]
xfadeIn 2 8 $ jux (rev . (|+ n 12))
$ every 4 (struct "t(5,8)")
$ struct "~ t ~ t t ~ ~ t"
$ n "<c'maj7 g'maj7 c'maj7 c'maj7>"
# s "superpiano"
# velocity (range 0.4 0.6 $ slow 2 sine)
# sustain 2
# lpf (range 800 4000 $ slow 4 sine)
# room 0.85 # sz 0.85
# delay 0.4 # delayt (3/16) # delayfb 0.5
# orbit 1
d3 $ s "<~ [~ [rave:7 rave:7]]>"
# speed 1.2
# gain (range 0.2 0.6 $ slow 8 sine)
# orbit 2
xfadeIn 4 4 $ struct "t ~ ~ t ~ t ~ ~"
$ n "<c2 g1 f1 c2>"
# s "superfm"
# sustain 0.6
# lpf (range 200 600 $ slow 4 sine)
# lpq 0.1
# shape 0.15
# orbit 2
d6 $ stack [
ccv "<10 20 30 40>",
ccv "<10 15 20 25>" # ccn 2
] # s "midi"
let rise = do
d2 $ stack [
every 3 (fast 2) $ struct "~ t ~ t t ~ ~ t"
$ n "<c'maj7 g'maj7 c'maj7 <a'maj7 a'maj7 a'maj7 c'maj7>>"
# s "superpiano"
# velocity (range 0.4 0.6 $ slow 2 sine)
# sustain 2
# lpf (range 800 4000 $ slow 4 sine)
# room 0.85 # sz 0.85
# delay 0.4 # delayt (3/16) # delayfb 0.5,
n "<c'maj7 g'maj7 c'maj7 <a'maj7 a'maj7 a'maj7 c'maj7>>"
# s "superfm"
# sustain 0.25
# lpf (range 1500 8000 $ slow 4 sine)
# lpq 0.2
# gain 0.5
# room 0.7 # sz 0.8
] # orbit 1
d5 $ s "<[~ ~ hit:2 hit:2]>"
# speed 1
# gain 0.5
# room 0.4 # sz 0.5
# orbit 3
d6 $ stack [
ccv "<40 60 80 100 110 120 125 127>",
ccv "<30 50 70 90 100 110 115 120>" # ccn 2
] # s "midi"
let drop = do
d1 $ s "<bd*4 [bd*4, sn*4] [sn*8] [sn*16] [bd:3, crash] ~ ~ ~>"
# orbit 2
d2 $ jux (rev . (|+ n 12))
$ struct "<[~ t ~ t t ~ ~ t] [~ ~ t ~ t t ~ t] [t ~ ~ t ~ t ~ t] [~ t t ~ ~ [t t] ~ ~]>"
$ n "<c'maj7 a'min7 f'maj7 g'dom7>"
# s "superpiano"
# velocity (range 0.5 0.9 $ slow 4 saw)
# sustain 0.4
# lpf (range 300 8000 $ slow 4 saw)
# room 0.5 # sz 0.6
# delay 0.3 # delayt (3/16) # delayfb 0.4
# orbit 1
d3 $ s "<~ ~ hit*8 hit*16 ~ ~ ~ ~>"
# n 2
# speed (range 1 4 $ slow 4 saw)
# gain (range 0 0.8 $ slow 4 saw)
# pan (fast 2 $ range 0 1 saw)
# orbit 1
d4 silence
d5 silence
d6 $ stack [
ccv "<40 70 100 127 0 0 0 0>",
ccv "<40 70 100 127 0 0 0 0>" # ccn 2,
ccv "<0 0 0 0 127 0 0 0>" # ccn 3
] # s "midi"
let backintro = do
d1 $ stack [
s "bd*4",
s "~ cp ~ cp",
s "[~ ho]*4"
]
d2 $ jux (rev . (|+ n 12))
$ struct "<[~ t ~ t t ~ ~ t] [~ ~ t ~ t t ~ t] [t ~ ~ t ~ t ~ t] [~ t t ~ ~ [t t] ~ ~]>"
$ n "<c'maj7 a'min7 f'maj7 g'dom7>"
# s "superpiano"
# velocity (range 0.5 0.9 $ slow 4 saw)
# sustain 0.4
# lpf (range 300 8000 $ slow 4 saw)
# room 0.5 # sz 0.6
# delay 0.3 # delayt (3/16) # delayfb 0.4
# orbit 1
d3 $ s "<~ [~ [rave:7 rave:7]]>"
# speed 1.2
# gain (range 0.2 0.6 $ slow 8 sine)
# orbit 2
d4 $ struct "t ~ ~ t ~ t ~ ~"
$ n "<c2 g1 f1 c2>"
# s "superfm"
# sustain 0.6
# lpf (range 200 600 $ slow 4 sine)
# lpq 0.1
# shape 0.15
# orbit 2
d6 $ stack [
ccv "80 40 100 60" # ccn 2
] # s "midi"
let outro = do
d1 $ s "bd*4"
# orbit 1
d3 silence
d4 silence
d6 $ stack [
ccv "<40 30 20 10>",
ccv "<30 20 10 0>" # ccn 2
] # s "midi"
d1 silence
d3 silence
intro
rise
drop
backintro
outro
hush
Last CallA live audiovisual performance — TidalCycles + Hydra
Concept
The piece is built around a single, mundane Friday night, the kind that becomes something else entirely once you’re inside it. You’re outside a club at 11 pm. The line moves. You get in. What follows is less a narrative than a physiological arc: the disorientation of the crowd, the moment the music takes over your body before your brain consents, the peak where individual people stop being people and become just movement and light, and then the long slow return to yourself at the bar.
The theme is about losing and finding your own interiority in a public space. Clubs are interesting because they’re designed to dissolve the self and most people go willingly. The piece tries to make that process felt rather than described. The visuals fragment the webcam feed in parallel with that arc: the face starts legible and gradually becomes unrecognizable, kaleidoscoped and consumed by feedback, before reassembling into something quieter at the end. The music does the same thing rhythmically by stacking complexity until the breakbeats hit and the tempo feels almost hostile, then unwinding back to the same four chords it started on.
The ending is deliberately small. After everything, someone just asks for water. That felt true.
Structure
The audio is built around a four-chord progression in F♯ minor (F♯min7 → Dmaj7 → Amaj7 → Emaj7) that runs through the whole piece. Tempo climbs across three breakpoints — 135, 145, then 175 bpm — using a custom interpolation function (ct_) that ramps the clock gradually rather than cutting hard. Percussion layers stack progressively via xfadeIn, so the density of the mix builds in parallel with the narrative.
The visuals use the live webcam feed (s0) as their spine throughout. It gets thresholded, kaleidoscoped, color-shifted, and eventually fed back into itself depending on the scene. The core Hydra technique is a self-referencing feedback buffer: src(o0) reads the previous frame back into the pipeline, scaled fractionally below 1 and modulated by noise, so the image accumulates history rather than refreshing clean. At the peak scenes, this creates a sensation of the visuals consuming themselves.
MIDI CC signals bridge the two environments. TidalCycles sends continuous controller values via p “housemidi” and p “breakmidi”, which Hydra reads as cc[] arrays — so in several scenes, musical parameters are directly steering visual ones (camera zoom, threshold cutoff, blend amounts).
Biggest hurdle: Recording
The hardest part of the process had nothing to do with the code. We were recording across four machines and spent a significant amount of time trying to sync the video outputs with the webcam feeds in post. We tried manual timecode alignment, clap-sync markers, and various export-timing approaches — nothing held reliably. Frame rates drifted, audio latency was inconsistent across machines, and the camera feeds introduced their own additional delay. We eventually abandoned the sync attempt and submitted without it. The live performance is the real artifact; the recording is a best-effort document of it.
Roles:
Ahmed and Linus – Tidal-side, recording and concept
Technoshamanism as a concept reminds me heavily of the concept of divine technology and attributing other-worldly or spiritual aspects to tech. In this text Shanken brings the perspective that the artist themselves are the driving, shamanistic forces behind this phenomenon. He also explains that he sees artists specifically in the new media arts (NMA) circles to be more perceptive to this novel idea which makes sense to me as NMA has always existed on the fringe of conventional understanding of the world.
Overall, the call to harness the complete power of technology and art while respecting ancient knowledge of shamanism reminds me of esoteric philosophical enquiries of Land and Fisher early in their career. There seems to be a mystical, almost Lovecraftian reverence attributed to technology which requires shamanistic practices to be ‘understood’ and harnessed.
Throughout the reading, although thought-provoking and enjoyable, I kept wanting to see examples of indigenous artists approaching technoshamanism through their own lived heritage rather than outsiders who had attempted to reinterpret and appreciate indigenous practices in their own ways. There is a mention of Korean artist Kim Jeong Han whose BirdMan is built on traditional Korean and Buddhist idea of the ‘self’ and the ‘other’ being similar. However, these are still mainstream understandings of the many thousands of indigenous spiritual philosophies. In fact, Shanken briefly mentions; “Technoshamanism names the messiness of cultural hybridity and the commodification of shamanic traditions”. So there is already a discourse around this part of the movement which makes it even more confusing for me that he chooses not to touch on shaman artists who may provide pushback to this phenomenon later in the text. Maybe he ran out of space.
To me the most interesting part of the text was the assertion that live coding is a more traditionally inclined musical performance mode than EDM/DJ-ing. I agree with the assessment that watching an artist write out lines of code on the screen is similar to watching a guitarists fingers glide on the fretboard or a pianists hands flourishing over the keys. A counter could be raised that the act of coding music is not as intuitively recognized as using traditional instruments. However, one must consider that novel instruments are always enigmatic when they’re introduced. In fact even instruments with long legacies like accordions, oboes, even pianos have mechanisms that are not understood by the lay person. So in a similar line of argument, one must treat the live coding GUI with similar grace. However, the author’s comparison of live coding to Derek Bailey’s improvisation on a physical instrument is a little misleading. Even though Live Coding environments are traditionally very experimental and pliable, it’s difficult to achieve true ‘freedom’ of expression. For example, Derek Bailey can very well start punching his guitar strings or cut them with a wire cutter to add unorthodox elements to his performance. But for in a live coding environment, there are still rules that have to be followed, functionality that is allowed and syntax that needs to be respected. In fact at one point the author says “live coding is, in other respects, not the “free” improvisation” referring to live coders “respecting the beat” or in other words following musical conventions. Still, I really enjoyed how the author takes the reader on this thoughtful investigation on how to exactly categorize live coding in the larger musical world and how big name artists fit into the world of live coding.