4 ms·
Back when the Web Audio API's were still very fresh I had similar goals and ideas. I wasn't overly impressed at the usability of the web audio API's, especiall
by FLT8 4y ago
Back when the Web Audio API's were still very fresh I had similar goals and ideas. I wasn't overly impressed at the usability of the web audio API's, especially for things like beat-accurate triggering for music playback, so I wrote my own multi-channel mixer/sampled synth library, and a MOD/S3M player on top of it. [0] (It's since been basically abandoned). It was both a proof of concept as well as a journey back through time for me, and at the time I remember being amazed at how unreasonably well it all worked. It felt wrong that an interpreted language like JS could be fast enough to real-time mix multiple audio streams.
As an aside, the MOD format is one of those things that's surprisingly easy to describe, but surprisingly difficult to get all of the edge cases to behave the same as the original trackers, and I quite enjoyed the process of critically listening to things and going back and fixing issues as they came up.
I had also written a MOD player much earlier in my life, targeting my first PC, an old 10MHz 286 with a sound blaster card. At the time I had to hand optimise things in assembler to get to the point where I could play 8-channel MOD's reliably. And that was pushing it. Nowadays an interpreted language running in a browser on a low-spec PC is more than enough to do a ton more channels without even breaking a sweat. Progress is amazing.
Kudos to the authors of this tool. It looks amazing!
[0] https://github.com/gundy/jssynth https://github.com/gundy/jssynth
- badsectoracula 4y ago> Nowadays an interpreted language running in a browser on a low-spec PC is more than enough to do a ton more channels without even breaking a sweat. Progress is amazing. Well, technically modern JS engines do compile JavaScript to native code and they tend to be among the most advanced on the topic, so it does kinda make sense - it isn't like, e.g. QBasic that -IIRC- had such a simple interpreter that assigning commonly accessed variables at the top of the program would make it run faster :-P.