
I've written a module to interface with the command-line utility "amixer". It tries to be relatively smart about dealing with devices with lots of different controls, and has a fallback interface for when smart is wrong. It includes a full parser for amixer's output, as well, though currently it only reports two aggregate statistics: total volume among all channels and mute-ness. This is probably something of a controversial patch: it adds two dependencies. I don't think the "parsec" dependency is a big deal, since that comes with GHC, and we can therefore expect most users to have it already. The other dependency is the "split" package. Let me know if you want me to just pull in the definition of the particular splitting function I'm using. Cheers! ~d