wasm loading

    
skode>

administrivia

Before we make noise, the browser needs one click.

Click boot once. Browsers require a user gesture before audio starts.

Hack point: open DevTools and call skode("v0 w0 f220 a0 l1").

Tokyo ADC 2026

BEEPS and PORTS

How to annoy everyone in your house while building an audio synthesizer.

skred octopus illustration

background

Small machines. Immediate sound.

Octetta logo
octetta.com

the itch

I wanted command-line immediacy for sound.

TRS-80 computer Atari 800 computer Commodore 64 computer

why terse text?

Small symbols become tools.

Hgchemistry
math
music
lsshell
v0 w10SKODE

the stack

Text -> engine -> speakers

SKODE ASCII control skred runtime REPL PULP audio engine Air speakers move

stack block 1

SKODE

ASCII shorthand for changing state without much syntax (ANDS parser).

Hand waving a conductor baton toward sound waves

stack block 2

skred

The REPL where terse text becomes engine state.

skred logo
github.com/octetta/skred

stack block 3

PULP: one voice is a signal path. Many voices.

wave table freq filter envelope pan/out FM filt mod ADSR phase AM

stack block 4

Air (AKA speakers)

miniaudio logo
miniaud.io

PORTS: isolation and safety

Small parts are easier to restart.

Shell skred audio deck + controls runtime process speakers restart one part the rest stays put small separate recoverable

enough excuses

Make sound. Change sound. Stop sound.

tiny protocol

Short commands change live state.

v0 w0 f440 a0 v1 m1 f6 v0 F1,40

k-synth

Arrays can become sound.

k-synth logo
github.com/octetta/k-synth

sk/dw8k-01.ks -> W10

The first DW-8000 wave is seven lines of text.

/ DW-8000 Wave 01: strings / Perfect 1/h sawtooth. All 32 harmonics. P: ~4096 H: !32 H: H+1 A: 1%H W: w P $ A
Joe with Korg synthesizer
the Korg obsession, made textual

808 ghosts in text files

Tiny patches make drum sounds.

sk/drums-kick.ks 141->50Hz pitch sweep
300ms envelope
W: w (E*S)+(Q*C*.1)
15 lines
sk/drums-snare.ks 170Hz + 183Hz body
noise tail and snap
W: w (S*.7)+(U*.4)+(V*K*.2)
20 lines
sk/drums-cowbell.ks 735Hz + 850Hz cluster
square-ish harmonics
W: w E*M
17 lines

deferred execution

SKODE can schedule its own future.

~1 v12l1 ~1 v12l1 ~1 v12l1 v10l2 +.5 v11l2

patterns

Patterns make timed chunks reusable.

y0 [v10l2 +.5 v10l1] x0 [v11l1] x1 Z1

909.sk

One file can build a groove.

/w24,303 [sk/drums-snare.ks]/ks wait 250 k>d d>r /r300 [sk/drums-kick.ks]/ks wait 250 k>d d>r /r301 [sk/drums-chh.ks]/ks wait 250 k>d d>r /r302 y2 %4 [kick] yt [+.5 v4 l1 +.25 v4l.5] x0

friends

External programs → SKODE.

Drum pad application talking to skred
drum pad
MIDI to SKODE translator
MIDI -> SKODE
Multi-slider GUI controlling skred
multi-slider GUI
Looping application controlling skred
looper

friends

skred can run in the browser.

WASM build of skred running in a browser
skred WASM
learn-skred page using browser skred
learn-skred
This presentation using the skred WASM module
this deck

what exists now?

The protocol is the instrument.

acknowledgements

Thanks for the long and lovely journey...

Audio Developer Conference logo
Audio Developer Conference
AMY project logo
AMY project
Casio logo
Casio
Korg logo
Korg
Moog logo
Moog
Roland logo
Roland
Sequential Circuits logo
Sequential Circuits

links

FIND ME, clone it, crash it, make it louder.

bonus: k-synth web app

Array playground, drum pad, and drum machine.

QR code for the k-synth web app
octetta.github.io/k-synth
Screenshot of the k-synth web app
browser playground

bonus: minimidio

Easy MIDI (1.0)

QR code for the minimidio project
github.com/octetta/minimidio
Screenshot of the minimidio project
minimidio