Basic Synthesis: Wavetable



One of the most ancient and venerable of all digital synthesis techniques, we hit the theory of wavetable synthesis and then showed how it was implemented in both Max/MSP and RTcmix.


Links

Be wary when you search the web for information on "wavetable synthesis". The music industry uses the term in a slightly different fashion to mean the general playback of a stored sound sample in general (this was to help market commercial synthesizers that featured New! Improved! WAVETABLE Synthesis! [yeah, right]). We use it in class to mean the storage of a single cycle of a waveform for an oscillator.

Here are some links to tutorials using that concept:

And about that RTcmix "makegen" command, Luke Dubois wrote a nice tutorial ages ago. I think most of the information is still accurate:

Applications and Examples

Here are the wavetable examples shown in class:


The key thing to realize about wavetable synthesis is that you pre-create one copy of a waveform that gets repeated over and over again to make the total sound waveform. By changing the way we copy (multiplying the sample values to get amplitude changes, interpolating between sample values to get different 'rates' of copying to get frequency changes), we can gain control over parameters that allow us to build the sounds of our dreams.

Although we have almost infinite capability to specify how the initial wavetable gets constructed (see the RTcmix makegen documentation for a range of possible wavetable-constructors), we are limited by that initial waveform. It is somewhat difficult to achieve dynamic timbral change using just a single wavetable oscillator (you have to modify the wavetable dynamically, see the wave1 example patch in week3b).

A note about the number of points you set aside for the wavetable: the max/msp [cycle~] object uses a fixed 512-point table. RTcmix allows you to specify the number of points as the third parameter to the makegen score command (I usually just use "1000" because it is easy to type). Anything above 512 is generally ok for work at a sampling rate of 44.1k. If you get much smaller than that for the wavetable size, you will start hearing quantization errors because of under-representation of the waveform. Going much higher than 1000 or 2000 is probably overkill, and will eventually run a bit slower than you might want.