Not touched on that at all yet Hellfire. Any tips?
I take it that it's not as simple as working at a higher sample-rate and downsampling during mixing?
Proper anti-aliasing is essential for a synth, otherwise it will just sound like crap when playing higher notes.
There are several possible approaches, each has its pro and cons.
Probably the easiest way is a global oversampling factor with a lowpass filter.
Since the harmonics of your source-waveforms are falling off rather slowly (and you want to keep most of the audible spectrum), you'd need quite a large oversampling factor to cover the worst cases.
But other parts of your signal route might need no oversampling at all.
So another option is to oversample each generator as much as it requires.
If you're generating a sawtooth at 50hz, at 20khz it's fallen to 1/400 and you don't have to care much.
With the low-pass included into the oscilator you have an additional option to control its' timbre.
On the other hand you will usually put some kind of lowpass after the oscilator section anyway.
But all the oversampling is just trying to compensate errors which are already present.
So it makes perfectly sense to generate wave-forms which don't contain frequency beyond the audible range in the first place.
It's computationally a little bit heavy to run hundreds of sine oscilators to generate a saw, though.
So you'd need a bit of precalc, eg generate a wavetable for every note and interpolate for the frequencies in between.
This solves some problems but involves new ones, for example syncing oscilators or changing pitch quickly (frequency modulation).
Of course that can be solved, too. Since the band-limited and non-limited waveforms only differ significantly at level-jumps, you can just store the difference between the two wave-forms (commonly called minbleps) and mix that piece of sound into your non-bandlimited waveform.
Although this sounds nice and simple it's quite some trouble to fade the blep before the next phase-jump happens.
So after all there's no approach which works particularly well in all scenarios.