[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)