What happens then if you set softvolume lower than wheel position?
Dropping log 25% when you just touch the wheel would scare me, a lot.
If I turn the wheel down to position 0, I want everything to be muted, always.
In my opinion, the ideal daemon should work like this:
* Normally, the hardware wheel is enabled and changes the software master volume.
* If the software master volume is changed, it should disable the hardware wheel.
* To reenable the hardware wheel, you need to move it to the current software setting and then it picks it up and takes over again.
* On shutdown, the daemon saves whether the hardware wheel was currently enabled and disabled and should behave accordingly on startup.
This is the best solution of both worlds.
If you never touch the software controls, the wheel works exactly the same as before.
If you touch the software controls, moving the hardware wheel won't make a sudden volume change.
User sets software volume to 100%, thinking this the wheel is a regular one, so that position of wheel : % of softvol is the level.
Instead the software knows best, and gets really loud. User turns wheel to correct, but wheel doesn't work.
How about two software levels, one is volume, the other is sensitivity.
If you don't want to use the potentiometer, you leave it at 100% and just deal with the sensitivity, which effectively becomes the volume-control, working in the same way as gain would. It would adjust the increments of the volume, so you have solved this puzzle, by setting sensitivity once and then forgetting, but you need to use the wheel to do so.
Drawback, using the software volume is not possible.
Or,
A rotary encoder that has no stop and endpoint.
Drawback, you can't feel that you are at zero and 100%, which at least for me is comforting to know.
Which could be alleviated by setting a master volume max %.
If pulseaudio, I understand that each program only has access to its own program-level. Then there are no accidental 100% situations.