A DDS is a pretty straight forward approach, but you need 32 of them. You could probably share some resources, for example you could use a single sine look up table (LUT) for all 32 channels. It's not totally clear, but are you expecting to generate constant frequency signals? That would make things easier. There are two approaches you could use:
1) you have a counter that generates the address for the sine LUT. You use a second counter that is loaded with a value such that every time the counter hits the terminal count the address counter is incremented. This will give you the best sine wave resolution, as it will step through the sine table by 1, but it will limit your maximum frequency.
2) you increment the address counter by some fixed value every step. This way, when your increment value is larger you jump over more values in the LUT to get higher frequencies. Not as good resolution as (1), but you can generate higher frequencies this way.
Basically, you need to determine what your maximum clock rate is, what your minimum and maximum desired frequencies are, size of your LUT, etc. It might help to look at some actual DDS chips (Analog Devices) and see what their architecture is.