Winamp Flashbacks, In A Window
· by Kjell
This one was pure fun. For weeks I had been staring at the player thinking it could do with the kind of full-screen visual distraction I remember from late-night Winamp sessions twenty years ago. This weekend I finally stopped thinking about it and built it.
Zenteek now has a Milkdrop Visualizer, powered by projectM-4 - the open-source descendant of the original Milkdrop engine. It reads the same .milk preset files people have been trading online since forever, and Zenteek just hands it a stream of audio samples and a window to draw into.
You open it from Window -> Visualizer, or with the old-school shortcut if your fingers still remember those.
There is a slim status bar at the bottom with previous/next arrows and a preset picker. Click the name and you get a scrollable list of everything available, with the currently active preset highlighted in the accent color. Arrow keys cycle too, once the window has focus.
The bundled set is small and opinionated - a cream-of-the-crop selection from the projectM project. If you want more, drop your own .milk files into your MilkdropPresets folder in Application Support and they show up the next time you open the picker. No restart, no rescan button. You can even override bundled presets by name if you have your own flavor of the same file.
Two details I am quietly pleased with.
- First: the audio tap sits before the DSP chain and the volume knob, so bass hits stay bass hits regardless of how quiet you are listening. The visuals never go flat just because you turned the music down.
- Second: when the visualizer window is hidden or fully occluded, the audio tap shuts off and rendering pauses. No GPU cycles burned on a picture nobody is looking at.
Not everything went smoothly. Some of the fancier presets out there reference bitmap textures - random noise, fractal patterns - that are not embedded in the preset itself. If projectM cannot find one, the render loop crashes. The fix was belt-and-suspenders: the offending preset gets quarantined automatically on the next launch and disappears from the picker, so you never end up stuck in a crash loop. If you want to run the texture-heavy ones properly, there is a MilkdropTextures folder you can populate.
It was the kind of weekend project where half the work was boring plumbing and the other half was me sitting there watching squiggles for an hour and calling it research.