DSP
The synthesizer is just a set of delays,
albeit very short ones, all feeding back
into eachother, and at lengths that are
not divisible by eachother (i.e. enharmonic).
So one gong might have 6 delays, of length
500, 224, 102, 44, 38, 29. Because they
don't factor into eachother nicely, they
make dissonances associated with gongs.
It's a little bit like karplus strong or
waveguide synthesis if that means anything to you.
When you touch, the delay lines are injected
with a thump sound that I recorded by hitting
my desk, recorded into my iPhone. This thump
sound, echoes through the delay lines until
it finally decays away, which can take a while(!)
To get different tones, I just play back that
initial thump sound at a different speed
(and pitch), which ends up exciting different
delay lines more or less than others, sounding
reasonably organic.
This is all fed into a reverb effect to space
it out a bit more, then a compressor to manage
any massive accidental peaks.
The audio code was programmed in C++, then
converted to WASM using emscripten. The
UI was all in javascript though. I made
this repo
to show the workflow of making audio
dsp in C++ and convert it to a web page -
it's mostly just a reminder for me to
show how to set it all up again if I want
to do another project like this.
Visuals
Not much to say here, it's WebGL, just a fullscreen quad
getting drawn to by a glsl frag shader.