_(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
   |
   |
{}-|
   |
 _(_)_
(_)@(_)
  (_)
   |
   |-{}
   |
   |
  ---
        

notes on a tracker

2026-10-18

this is just a quick one, just want to note some of the thoughts going through my head as i build my little toy tracker.

i'm writing this on the eurostar from amsterdam back to london, after attending a great set of workshops with the critical infra lab, but those notes belong somewhere else.

i've been trying to use trackers like renoise to make music for a few years now, but i always bounce off of the UI. i think the fact that it looks so much like text throws me off, due to my brainworms i find it basically impossible to navigate text without vim keybindings, and there don't seem to be any good vim keybindings for renoise.

in preparation for a semi-monastic/demisemi-monastic/hemidemisemi-monastic retreat in the lake district with my friends mat and river, i needed a little programming project to work on, and i thought a tracker with vim keybindings would fit nicely.

as i reflected on this idea, however, implications of this tool kept nagging at me:

  • vim already exists, why should i try and develop a poor recreation of it?
  • aren't i quite explicitly imposing my own views on how to navigate/manipulate my tool by doing this?

as part of my attempts to try and create convivial software systems, i settled on instead developing a tracker that would read and hot-reload a text file as input. this lets me leverage my existing text editor setup, as well as less explicitly imposing my own views of how to use the tool. i won't even need to use a graphical environment!

i like the idea using the text directly as an expressive medium: bending, warping, and ripping it in ways that traditional audio software tools make it difficult to express. for example, deleting/pasting a grid of 3x3 characters with marquee select.

here's a little demo of the prototype i got working on my holiday. i'll be the first admit the results are underwhelming right now, but i still think there is something interesting to uncover :)

source code here

 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---
   |
   |
   |-{}
   |
 _(_)_
(_)@(_)
  (_)
   |
{}-|
   |
   |
  ---