Design Goals

This project began with fanciful dreams of an RX controller+receiver set (see: reactive programming) that parses an audio stream for data, transforms the dataset, runs tests against the transformed data to determine callback parameters, and then emits a message to the WS281x API.

This sort of RX design would allow humans (or machines) to drop in rules about musical data patterns, like using a pre-defined RGB palette in a certain key or modifying a hue transition scaler when the data steam is above a threshold in the time domain (e.g. BPM > 90).

v1 Spec

First, I’ll need to build a working hardware environment and a controller+receiver pattern.

Base Case (high level summary)

  • A strip of LEDs mapped to Raspberry Pi GPIO
  • A controller application that emits web socket messages
  • A high level wrapper around the WS281x spec + Raspberry Pi PWM
  • A receiver application that subscribes to web socket messages, whose callbacks are using WS281x API

A very basic example might allow the client/controller to set RGB values via CLI, which will push an event to a WSGI wrapper around the ws281x API.

Hardware

Libraries & APIs

Research, inspiration, references