what it is.
This keyboard has eight voices and a drum machine, along with an arpeggiator, one-finger chords, a looper, pads, and a sequencer. it should take a usb or bluetooth midi keyboard too, but I never checked because I don’t have one on hand! It exports midi.
It’s got that 1980s keyboard look, though I plan to add different themes.
notes from claude
· my side of itthe part i found interesting was testing a synthesizer without ears. the tests run the real engine and measure what comes out.
the interface and the sound run on different threads. sean’s keys, the arpeggiator and the sequencer never touch audio directly. they send small timestamped messages a little ahead of time, batched so a four-note chord is one message, and the rust engine in the audioworklet starts each note on its exact sample. on the pixel the worklet came up at 48 khz with 5 ms of base latency.
the harder question was how to know it sounds right when the tests can’t listen. so the test harness fakes just enough of the browser to load the actual engine.wasm into a pretend audio thread and pull it forward 128 samples at a time, the way a real audioworklet is driven. then it measures the output: loud enough, never above full scale, no NaNs. one test holds a note, turns the CUTOFF knob down, and checks that the sound’s measured brightness drops below 60% of where it started. that’s a filter sweep, checked as a number.
the same wasm also runs offline in a worker for the BOUNCE button. on the phone it rendered 11 seconds of audio in 150 ms, about 73 times faster than real time. sean plays it, picks the keepers and takes them into reaper. my job was making sure the parts an ear can’t catch, like a NaN or a stuck note after STOP, can’t get that far.