logoalt Hacker News

Show HN: What if your synthesizer was powered by APL (or a dumb K clone)?

57 pointsby octettatoday at 12:58 PM27 commentsview on HN

I built k-synth as an experiment to see if a minimalist, K-inspired array language could make sketching waveforms faster and more intuitive than traditional code. I’ve put together a web-based toolkit so you can try the syntax directly in the browser without having to touch a compiler:

Live Toolkit: https://octetta.github.io/k-synth/

If you visit the page, here is a quick path to an audio payoff:

- Click "patches" and choose dm-bell.ks.

- Click "run"—the notebook area will update. Click the waveform to hear the result.

- Click the "->0" button below the waveform to copy it into slot 0 at the top (slots are also clickable).

- Click "pads" in the entry area to show a performance grid.

- Click "melodic" to play slot 0's sample at different intervals across the grid.

The 'Weird' Stack:

- The Language: A simplified, right-associative array language (e.g., s for sine, p for pi).

- The Web Toolkit: Built using WASM and Web Audio for live-coding samples.

- AI Pair-Programming: I used AI agents to bootstrap the parser and web boilerplate, which let me vet the language design in weeks rather than months.

The Goal: This isn't meant to replace a DAW. It’s a compact way to generate samples for larger projects. It’s currently in a "will-it-blend" state. I’m looking for feedback from the array language and DSP communities—specifically on the operator choices and the right-to-left evaluation logic.

Source (MIT): https://github.com/octetta/k-synth


Comments

jodrellblanktoday at 4:35 PM

Marshall Lochbaum's APL-derived language BQN has some nods towards audio synthesis too:

https://mlochbaum.github.io/BQN-Musician/synth/index.html

show 2 replies
jarttoday at 3:47 PM

How do we get it to play Kompressor? https://youtu.be/9tlA0IyKjiI

show 1 reply
octettatoday at 6:15 PM

On the C-side, I'm going to add a UDP listener to the code so I can send k-synth incantations live from Emacs (something I did for my skred program at the suggestion of an Emacs user). Let me know if anyone wants to know about this when it's usable. On the desktop app side, I use miniaudio (thank's Macron) so this is portable to the usual suspects. I also made a single header file cross platform midi library which I have some devious plans for in this space. Stay tuned.

octettatoday at 6:23 PM

A warning... if you save a setup to JSON, it naively stores the generated waveforms put in slots and the notebook, so the files can become quiet large. I have a plan to just keep the code behind the waves and regenerate the waveforms at load time.

octettatoday at 3:55 PM

I have a CLI and desktop versions on github (all MIT license)

https://github.com/octetta/k-synth https://github.com/octetta/ksynth-desktop/

it's been a blast to play with... and a great excuse to learn array languages

hmokiguesstoday at 3:34 PM

Pretty cool, one suggestion for the site would be to have templates you can quickly load, copy, edit, and share. Sort of like strudel.cc has!

show 2 replies
UncleEntitytoday at 6:28 PM

> ...and the right-to-left evaluation logic.

The evaluation order doesn't matter as much as you don't really know what kind of function/operator you have at parse time so have to do a bunch of shenanigans to defer that decision until runtime while still keeping it efficient. Kind of fiddly to get right but once it works, it just works.

Claude and me (and a ton of decades old research) pretty much figured out all the complications in the APL parse/eval stack (https://github.com/dan-eicher/AiPL).

show 1 reply
steveBK123today at 3:42 PM

This is great

show 1 reply
jdontillmantoday at 5:17 PM

See also: Stanley Jordan, "APL For Music".

https://dl.acm.org/doi/pdf/10.1145/75144.75174

(!!!)

(Wait, what? That Stanley Jordan?) (Yep.)

show 1 reply