There are some libraries that make it easy to simulate instruments. E.g. tone.js https://tonejs.github.io/
It should be possible to generate unique-ish variants at runtime.
limut implements WebAudio and WebGL, and FoxDot-like patterns and samples: https://github.com/sdclibbery/limut
https://glicol.org/ runs in a browser and as a VST plugin
"Using the Web Audio API to Make a Modem" (2017) https://news.ycombinator.com/item?id=15471723
gh topics/webaudio: https://github.com/topics/webaudio
awesome-webaudio: https://github.com/notthetup/awesome-webaudio
> Currently includes the following built in exercises:
> [...]
> 7. Interval recognition - the very popular exercise almost all app has. Although I do not recommend using it as I find it inaffective in confusing, since the intervals are out-of-context.
Will probably add a "randomize instrument used per round" setting or something to really dial it in. I added a randomize velocity option but didn't test it much