[HN Gopher] Show HN: What if your synthesizer was powered by APL...
___________________________________________________________________
Show HN: What if your synthesizer was powered by APL (or a dumb K
clone)?
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
Author : octetta
Score : 73 points
Date : 2026-03-15 12:58 UTC (10 hours ago)
(HTM) web link (octetta.github.io)
(TXT) w3m dump (octetta.github.io)
| hmokiguess wrote:
| 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!
| octetta wrote:
| i wimped out and just have the patches being loaded from my
| github repo. good suggestion though.
| xrd wrote:
| Did you know you can embed strudel?
|
| https://strudel.cc/technical-manual/project-start/
| hmokiguess wrote:
| I don't think this is relevant to my analogy there, what
| were you thinking here?
| xrd wrote:
| You are right but I wondered if octetta had considered
| combining his ui with strudel. I am fascinated by it and
| have been attempting to riff off it and create new
| creative interfaces.
| octetta wrote:
| I'll take a look... it's probably not obvious, but the
| language engine is actually written in C and emscripten-
| ed to WASM, so I've already crossed several bridges to
| get this done. Absolutely riff off this interface...
| would love to see what you can make. My stuff is MIT
| licensed, so tear it up! On a side note, I was able to
| meet Sam Aaron of SonicPi / Tau5 at Goarmire back in
| September which was cool... he teased us with Super
| Collider in JS then and since, he's crossed the finish
| line on that stuff. We live in amazing times! Have fun!!!
| xrd wrote:
| That's a great story. It's beautiful you are building on
| the shoulders of giants and putting it out there for
| others to build upon. Very exciting times, indeed!
| octetta wrote:
| Strudel (and PureData, and ChucK, and SuperCollider, and
| AMY) are all great projects, but they weren't scratching my
| itch, so after I got laid off from a FAANG role, I
| rage/anxiety started writing code for stuff fun-ner than
| writing code for radios and routers and satellites... this
| is where my cortisol / dopamine lead me. No disrespect to
| those other projects... all have been inspirational and are
| a heck of a lot more "respectable" than my playground code.
| octetta wrote:
| At any rate, in case it's hard to see, definitely try loading
| the dm-bell.ks patch, putting it in slot one so the melodic pad
| can play it... it's quick and dirty to see what's capable in a
| few keystrokes... although I'm sure the PD and ChucK and SC and
| ... wizards could put me to shame in a showdown, LOL.
| steveBK123 wrote:
| This is great
| octetta wrote:
| thanks!
| jart wrote:
| How do we get it to play Kompressor? https://youtu.be/9tlA0IyKjiI
| octetta wrote:
| Wowie... Jart commented! I'm on it my friend. Certainly
| sequencing is a good thing to add.
| octetta wrote:
| 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
| jodrellblank wrote:
| Marshall Lochbaum's APL-derived language BQN has some nods
| towards audio synthesis too:
|
| https://mlochbaum.github.io/BQN-Musician/synth/index.html
| octetta wrote:
| BQN kicks-ass and I've spent hours listening to the Array Cast
| podcast while in SoCal traffic. I'll check his stuff out with
| an eye towards the audio stuff.
|
| I'm an APL newb... while I've been writing code-for-cash
| forever (C, etc.) I've had a long-time interest in APL
| languages, but I'm just messing around after working on
| waveform generation for another sound project I have in the
| works (https://github.com/octetta/skred ...
| https://youtu.be/L5-3gBpJsAo?si=JdBlntzn4doY-c3s).
|
| While I was working on this I remember the first book I saw in
| the public library on computer programming was about APL
| (probably sometime around 1976)... I didn't have access to a
| "real computer" for another year after that and no APL for
| decades, but some ideas stick around, LOL.
| bradrn wrote:
| Also Uiua:
|
| https://www.uiua.org/tour#audio
|
| https://www.uiua.org/tutorial/audio
| octetta wrote:
| Wowie! I'M NOT WORTHY! Cool stuff!
| bradrn wrote:
| It's not my language, to be clear! In fact I've never even
| tried it... my array programming experience so far has
| mostly been with J.
| octetta wrote:
| Doesn't matter. Just happy people are doing weird stuff
| like this and appreciate the share. I looked at a bunch
| of APL-ish implementations and kind of ran with the
| K-simple code (links on the repo). What background do you
| come to J from? Another programming language? How do you
| like it?
| bradrn wrote:
| > What background do you come to J from? Another
| programming language?
|
| Yes, I'm very fond of trying out different languages. My
| main language for personal projects is Haskell.
|
| > How do you like it?
|
| I haven't used J for a while, actually, but I recall
| finding it a bit confusing, especially when rank
| manipuations are involved. It has a larger vocabulary
| than most array languages, which I felt made it hard to
| learn. It was great fun though!
| octetta wrote:
| Fun. I've lost count of the languages I've learned and
| gotten paid to use over the years, but it's mostly very
| exciting to add a new one to the list.
|
| Haskell is one I haven't used yet. The closest I've come
| to that is a weekend fling with OCaml... much respect for
| the ML work though!
|
| I hear you for the complexities in J though. I've
| intentionally limited k-synth to single letter upper case
| variables and the verbs are also one character... I might
| regret this at some point.
|
| Have fun! It makes the world a better place!
| jdontillman wrote:
| See also: Stanley Jordan, "APL For Music".
|
| https://dl.acm.org/doi/pdf/10.1145/75144.75174
|
| (!!!)
|
| (Wait, what? _That_ Stanley Jordan?) (Yep.)
| octetta wrote:
| Wow! I had no idea, will look here for inspiration too. Thanks!
| octetta wrote:
| 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.
| octetta wrote:
| 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.
| UncleEntity wrote:
| > ...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).
| octetta wrote:
| I'm looking forward to checking out your stuff...
___________________________________________________________________
(page generated 2026-03-15 23:00 UTC)