Show HN: Wafxr – dynamic sound FX via WebAudio
andyhall.github.io
andyhall.github.io
They range from unfinished toys to epic environments. Also my project AudioMasher is supposed to be the latter. This seems to do one thing well (FM synthesis for effects) which is probably a much better idea!
So if you twiddle the GUI and find a sound you like, you can then copy the code at the bottom to play that sound in whatever other web project. And since it's just code you can add whatever amount of variation to the sound effects without any extra file size.
Thanks for having a look!
I think the word you're looking for is synthesis.
Very cool stuff by the way, congrats for shipping.
I don't Js, but I am thinking of a fork that has a log of generated sounds. It is fun to mash the button 10 times to see what the sound space is. Or, could let it run and then hit pause when it finds something you like.
On a hardware side, I am thinking an ESP32 based device with midi and TTL in that can run the SFX, be able to update the FX over a rest call.
Then use those generated FX as the population for a GA, or train a GAN to generate FX.
I could see these SFX being something like a font or palette, similar points in a design space.
I realized you are the same person behind the Noa [1] Voxel Engine.
So for something like a web game, one can use this project to make a sound effect, then copy/paste the code at the bottom of the page to play that sound in the game. (And since the sounds aren't pre-rendered, one can also twiddle the parameters at runtime to add variation to the sound each time it plays.)
It is possible to write stuff in these languages that cannot be rendered in realtime by any current computer, but these days you have to work pretty hard to do that. Even on a phone, you'd have a lot of possibilities.
This project is a GUI for creating WebAudio node graphs. It does not parse or interpret a programming language; it's not functionally or structurally similar to things like chuck or supercollider.
// import Gen from 'wasgen'
// var gen = new Gen()
gen.play([
{type:"n0", gain:{a:0.027,h:0,d:0.013,s:0.45,r:0.054}},
{type:"bandpass", freq:{t:2,p:0.4,q:0.01},Q:0.8},
], 999, 1, gen.now(), gen.now() + 0.084)
This is structurally extremely isomorphic to SC or Chuck etc., and could become more powerful if it was SC with a WebAudio backend for output.I know what the differences are - I've worked in this field for 20 years. I was just trying to give you a gentle smiley faced nudge to jump in on a "better" version of what you've already done in order to Make The World A Better Place.
Really :)
Negatory. A sound program in wasgen (i.e. the thing you pass to the "play" function) is a static object; comparable programs in SC/Chuck are code. They are as different as JSON and JS. As such, porting SC/Chuck to the browser would mean building a compiler/transpiler/VM/etc.
> I was just trying to give you a gentle smiley faced nudge ...to Make The World A Better Place.
By saying my project reinvents a wheel that's already been reinvented over and over and over so I should "just" write a port of a different project instead? Fair enough.