Hm, now that I think about it... IIRC, all available volume controls are being defined by using ALSA setup scripts. Their syntax is a PITA, but it shouldn't be hard to get a custom setup script that only defines what's needed. Most GUI programs ignore most volume controls and only use what they recognize, anyway. That would be the tricky part. That's something I never really understood, it shouldn't be hard to add this feature to ALSA - imagine a simple softvol passthrough plugin that communicates with a central volume daemon to get its volume value. One could probably hack something similar together to get the dynamic switching to work. The issue with ALSA is that AFAIK pretty much everything is being done by the program, it has no central process. When a program is started and it initializes libasound, it processes the whole config and creates a static setup based on that. Everything dynamic requires a plugin that has all possibilities already defined and does some inter-process communication stuff to act within those limited possibilities.