← Work

Clockworks

Polyrhythms are easier to watch line up than to count.

RoleSole designer and engineer Date2026 PlatformiOS — React Native with a native audio engine LinksApp Store

Each ring is a clock running its own subdivision against one shared tempo. Put notes on a ring and they sound as the hand reaches them, so a 5-against-4 is a thing you can see arrive. Patterns export as MIDI and share straight into a DAW.

  • Rendering is GPU-accelerated through Skia, with the clock hands driven by Reanimated shared values on the UI thread so the animation never stutters when JavaScript is busy.
  • Audio runs on the native thread through a Web Audio implementation, with a 24-voice pool and hard voice stealing. Deferred disconnects crash the native graph, so evicted voices are stopped and disconnected immediately.
  • Hybrid timbres: sampled instruments across six octaves plus synthesized ones rendered into buffers at startup, batched asynchronously so the JS thread stays responsive while the app loads.
  • Patterns write out as standard MIDI files and share straight into a DAW.