I don't thing a PWM from a µC will cut it, the Arduino mega wont go over 62kHz PWM, probably a DUE would be more suitable. I couldn't find as easily that info as for the MEGA.
http://forum.arduino.cc/index.php?topic=72092.0
For a PWM modulator to be clean it needs to run few times faster than the bandwidth. Then add filtering or you will have aliasing. We do want to conserve our precious 20kHz intact, we could go for 25kHz filter, which needs to attenuate 48dB at 31kHz. I say that number because it's an 8bit PWM on the MEGA, and that could give a decent range for usability, but not great.
In any case going up in the PWM freq is expensive (you need a much faster µC, to do 1024 things in one PWM cycle for a 10bit control) There are some high frequency PWM generators or controllers, maybe controlling one of those would do the trick. Second choice is as the running it's own PWM generator as the Pye which gives a ton of flexibility. It would take just one oscillator for the whole thing and one comparator for each independent controlled gain. Then you can feed the reference of the comparators with any sluggish as your attack time requirements let's you do it. Good thing about building your own PWM generator, you could use a logarithmic converter after the ramp/sawtooth oscillator and get dB/bit relationship, instead of %PWM, giving a much better use for each bit on your DAC. And as it's only one oscillator to feed a bunch of channels, once you start to increment the channel count that complex thing get's lost in the mess, as long as you can route that high freq signal to all the comparators.
I also give this a thought some time ago as you see, it went way to complex for the specs and price range we were aiming for. For many channels the filter price start to have weight, but if you want a simpler filter without compromising the signal you need a higher PWM frequency, which gets trickier to work with.
JS