Tiziku (2016, 2020) is a generative audio-visual work.
Orignally written in Spring 2016 as a final project for the 220b algorithmic composition class at CCRMA. It was revisted in early 2020 and refactored to generate offline video.
The word 'Tiziku' was algorithmically generated using a separate program. There is no intentional meaning behind it.
Rothko paintings (what little I knew of them at the time), and the bathroom light in my apartment.
Tiziku is made up of some rectangles, and limited color palettes. I used the term "breathing Rothko" at the time to describe what I was trying to do with Tiziku at the time. Years later, I actually got to see and experience a large-scale Rothko in person for the first time at the MFA in Boston. In retrospect, I now know referring to Tiziku as a "breathing Rothko" was a very superficial juxtaposition.
My bathroom light in my budget Stanford apartment would always need to warm up before turning on. It would flicker on and off for a few seconds before staying on. This is where I got the idea for the rectangles to occasionally "blink" and glitch out.
The color palette I believe I might have found on https://colourlovers.com. I have found that curated colors are always better than the ones I try to fabricate myself.
Not a lot of external inspiration. It was mostly business as usual.
Most of the sound is generated from a 26 line Sporth patch.
The main drone sound samples an orchestra tuning. There are two instances of Mincer scrubbing through this sample in different ways using random line generators.
There is a melodic component to this using a simple FM sound. The melodic sequence is a set of 7 notes. The rhythmic is 6 items, written using Propnotation inside of Sporth. The melody and rhythms are decoupled, so they end up phasing and creating an interesting melody.
There is a noise instrument that happens anytime the Rothko "breathes" and transforms. This instrument meant to evoke the feeling of breathing.
The spice on top everything are the "glitches". These are generated in ChucK: implulses put through the LPF ugen (resonant lowpass filter). Visually, glitches cause the individual rectangles onscreen to blink on and off. Sometimes the squares blink and stay off, creating holes of empty space.
The original 2016 codebase was very fragile. I only managed to get it running on two of my computers, only one of which I still have. At the time, I wanted to experiment with using many domain-specific languages at once. There were many moving parts:
A hacked version of ChucK (included with the codebase), designed to run in my own JACK render loop.
Sporth, run inside of ChucK via Chorth.
NanoVG for 2d grahics, run inside of the GLFW OpenGL wrapper.
A lua scripting component for the drawing routines.
Refactoring in 2020
Four years later in 2020, I decided to perform some compositional necromancy and bring this sucker back to life. This required completely rewriting the engine backend:
The ChucK components were removed entirely. The timing behavior and DSP for the glitches were re-implemented in C.
Cairo replaced NanoVG for antialiased 2d graphics.
Instead of OpenGL/GLFW for realtime graphics, offline h264 video was generated using libx264.
Sporth was replaced with... Sporth! This code was taken out of ChucK and pretty much worked without modification. I made the Sporth component run inside of a patchwerk node.
The lua code pretty much worked without any modification. I just had to rewrite the underlying wrapped C functions to use Cairo instead of NanoVG. I ended up using a local copy of lua 5.3 in ANSI C mode.
The Tiziku program when run now generates a video file and an audio file which can be stitched together into an mp4 using the FFMPEG tool. Rather than let FFMPEG encode the WAV audio, I opted to manually convert it to mp3 in LAME.
home | index