I have a question regarding this formatting style:
44100 AS sample_frequency
, number AS tick
, tick / sample_frequency AS time
I see this used a lot in Haskell, nix, and sometimes other languages (first time here with SQL)
. I personally find it very odd to read
. It feels like starting a sentence with a dot, instead of ending it with one, which feels quite jarring
. What is the primary motivation for employing this style, especially in languages (like SQL) where this doesn't seem to be the norm? And especially for the languages (Haskell, nix) where this is the standard (?) coding style, wouldn't it be preferable to use a different token as the separator, one that doesn't look as odd at the beginning of a line?
Less diff noise when adding/removing lines in a commit.
If you put the comma at the end, and then you need to add a line, you either:
* Insert the new item "in the middle" of the list. This is often possible, but not always.
* Add the new item to the end of the list, in which case the the line that was at the end before will now need to be modified to add a line.
Lines that begin with the coma can be more easily moved around/resorted. With the comma at the end, if you put the "last" item in the middle, you also need to add a comma at its end (and remove the comma from the new item that is now the final one).
Personally, I like languages where you can simply leave a comma at the end of a list or enumeration without this being deemed a syntax error (for example, in Lua the table {1,2,3,} is equivalent to {1,2,3} )
Very neat! Though I got prominent clicks and artifacts in both chrome and firefox.
If anyone's interested, some years ago I made a wrapper library for things like this, to wallpaper over the famously hairy WebAudio synthesis API. Basically you pass in a static object describing the audio graph and parameters you want, and the lib creates the WebAudio nodes and then cleans them up after the sound releases (hopefully without clicks, unless you specifically want them).
clicks are challenging for web audio. your project looks great.
I have a similar work here. Hopefully it can achieve performant audio synthesis in browsers:
This is REALLY cool! I love WebAudio. Things that can be achieved with it, plus new speech recognition tech, plus other AI stuff, I think are going to be truly incredible!
Audio processing and synthesis is one of those things where you can do high quality in real time on mobile devices, and achieve delicious fast feedback loops. Creating new interactive modes of creativity! It's less possible with video because of the complexity and added cost. Right now anyway.
So exciting! I know the synth may look simple, but it's my feeling that it's really well made.
Regarding commenters mentioning click artefacts...that's troubling! I personally did not encounter it here, but I find, quite strangely I think, that: click artefacts are almost a "Random" bug. They show up sometimes, but not other times, even if everything else is seemingly the same.
That's been my experience. Maybe it's an "artefact" (pun intended) of dealing so closely with hardware. I don't know! Any experts want to weigh in on a way to avoid click crunches in WebAudio?? :)
It's an okay catch-all term for "browser technology from after 2010" I suppose, like how DHTML was a catch-all for HTML + JS and AJAX for fetching things from JS.
This is really amazing, but a part of me is really sad this reminds me of the Actionscript 3 Audio API, which I used to build something similar, more than a decade ago while in undergrad.
Looking into it, it's kind of crazy it's an ECMAScript standard, and that its spiritual successor is TypeScript.
This goes back to 1957, and as the article notes, is the parent of many of the most used synthesis languages right down to the present day (which is both good and bad).
In case anyone else convinced themselves that iOS doesn't support the Web Audio API, try turning off silent mode with the physical switch on the side of your phone.
PS. I've recently implemented an FM / additive / modular synthesizer entirely in SQL: https://github.com/ClickHouse/NoiSQL