It's not yet mentioned in the Butterchrun readme, but we recently built compiler that compiles the visualizer preset code to Webassembly in your browser and got a 73% improvement in rendering performance. Blog post here: https://jordaneldredge.com/blog/speeding-up-winamps-music-vi...
This was a fun trip down memory lane, lots of nostalgic good-feels.
I wasn't aware of either effort and this brought back the sense of an era of computing I once loved. It reminds me how transparent (perhaps moving towards ubiquitous computing) certain applications are becoming. I couldn't tell you how many times when listening to background music and working, I'd occasionally switchover to appreciate my current Winamp skin and even take a small break staring off into Milkdrop and then shift back to work. Now, I rarely take time to even look at my music application, it's just a means to an end--really a different era of computing where modern software just doesn't seem to give the same sense of personalization or character.
The audio sample data is pretty low bandwidth, CD audio is ~150 kB/s. Latency is fine for real time too, but even if it wasn't, this is streaming media playback which tolerates relatively big delays in the pipeline as long as you keep a/v sync.
The article talks about using WebAssembly.Global to avoid message passing overheads / delays.
One could almost certainly use SharedArrayBuffer to do a very similar shared mutable memory overhead-lowering optimization with webworkers or iframes, and see the same outcome.
I haven't looked in a while but SharedArrayBuffer used to be a core way to communicate with wasm, albeit it seemed super gnarly: if I remember you have to load your wasm program into a SharedArrayBuffer, then run that SharedArrayBuffer to do anything. I still have some hope that some day, some year, some decade, wasm workers might be able to have more than a single Memory at a time, such that we could work with SharedArrayBuffers far more elegantly/slickly, but please no one hold your breath.
And of course, Safari doesn't support SharedArrayBuffer nor SharedWebWorker nor like 50% of the other awesome little platform capabilities that just seem so technically excellent. Makes me very very sad they make such great devices so technically maimed.
To be fair, the spectre/meltdown global freak out ~3 years ago did cause a huge amount of slamming on the breaks & rapidly withdrawing really good standards. SharedArrayBuffer is only just making it back[1]. Would that we ever have a chance of having high resolution time again too, but that's basically never going to happen.
Does anyone know of any other music visualizers that are on the level of Milkdrop? I've never seen anything nearly as enchanting as Milkdrop, and with such a range of visual styles in the presets. As I mentioned in the current Webamp thread [0], I've spent many a good hour with Milkdrop and some good music.
Been a long time since I tried out projectM, looking to get that Milkdrop goodness back (and not on Windows). And just saw they have a VR mode.....that could be very very cool (and disorienting, in a good way?), can't wait to try that!
Milkdrop was amazing for its time. I used it to do visuals at concerts and music festivals in the mid-00's. It was especially awesome because you could drive it with a microphone input so you could jam and get real time visualizations that synced with what you were playing.
Didn’t work on safari mobile, unfortunately. I see a message about lack of WebGL 2 or WebAudio support. I’m being directed to a legacy version [1], which currently seems missing.
It's not yet mentioned in the Butterchrun readme, but we recently built compiler that compiles the visualizer preset code to Webassembly in your browser and got a 73% improvement in rendering performance. Blog post here: https://jordaneldredge.com/blog/speeding-up-winamps-music-vi...