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:
- week3a-examples.sit
-- StuffIt archive with the class max/msp and rtcmix patches
individual patches as text files (for Windows users)
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.