Most of the synthesis methods we’ve talked about so far produce periodic waves, meaning at some point the repeat. Simple waves may go up, then down, then back up again. More complex waves might go up and down a few times, but somewhere there is a repeating pattern.
Wavetable synthesis takes advantage of this fact by isolating one period (loop) of a wave and storing a digital representation of it in a table. In fact, it takes all the waves you are likely to ever want to produce (at least that a particular synth is capable of) and stores them in different tables. Then when you want to reproduce a certain sound, the synth loads the wave for that sound and plays it over and over again.
Why would you want to generate sounds this way?
- Less memory. Especially when digital synthesizers first came out, memory was small and expensive. You can store many waves at full resolution without taking up too much precious memory because you only need to store one period of the wave.
- Less processor power. Fast computers were big and expensive, and calculating what two waves would do when added together or how a filter would affect a wave is computationally intensive. With wavetable synthesis, all the different waves are precalculated and stored in the tables.
Let’s say you are playing a triangle wave and you want to add a little low-pass filter. The wavetable synthesizer will start by playing a perfect triangle over and over. Then, as you turn the cutoff frequency of the filter down, the synth crossfades between the perfect triangle and a triangle with some of the highs cut off. It doesn’t need to figure out what the newly-filtered wave should look like because that was already calculated when the synth was designed. As you add or modify voices and change various settings, the synth knows which wave to play and where to locate it.
You don’t need a separate wave for each pitch, either. Frequency of the waves can be changed by skipping some of the samples in the wave during playback. The number of samples skipped is called the sampling increment. If you want to go up an octave, that’s double the frequency, so the synth just plays every other sample (sampling increment = 2). To get a drop in pitch, you need a sampling increment less than 1. This means that some samples get used twice. For example, a sampling increment of .5 would play each sample twice, halving the frequency of the wave, thus dropping it 1 octave. To avoid distortion, the synth might interpolate between two samples instead of just repeating them.
Waves from oscillators employing wavetable synthesis can be used in combination with other techniques, such as additive or FM synthesis, to make more complex waveforms in real time.
There is an error in this article, where it talks about using a filter on a perfect sine wave:
“Then, as you turn the cutoff frequency of the filter down, the synth crossfades between the perfect sine and a sine with some of the highs cut off.”
But a perfect sine wave, by definition, does not have any highs that could be cut off.
Ha, good catch! I think I just wrote the first wave shape that popped into my head. It should be fixed now. Thanks!
He didn’t say a perfect sine wave, he said a perfect Triangle wave. Which does have upper harmonics
Oh my bad that comment was made before tge correction!
The part about the sampling increment lost me. Why does playing every other sample double the frequency? To me, it seems that it would lower the frequency, since the rate at which the sample is being played over time is lowering, which means the pitch should be lowering. That’s how I am understanding it anyway, which is why I am confused. Could you expound upon this?
Sure. I think the part you may be missing is that whichever samples are played get played at the same rate.
Let’s say you have a synth that plays 100,000 samples per second, and that synth has a triangle wave that has 1,000 samples per complete wave (these are totally made up numbers). It would take 1/100 of a second to play the entire wave, so it could play 100 times a second (100,000/1000). The resulting frequency is 100Hz.
Now let’s say you want to play that triangle wave an octave higher, which would be 200Hz. Since you’re stuck playing samples at a rate of 100,000 per second, you need your triangle wave to complete every 500 samples instead of every 1000(100,000/500 = 200Hz). The easiest way to do that is to only play every other sample. Half as many samples being played at the same rate gives you twice the frequency.
It’s like if you’re walking up a staircase at a rate of 1 step per second; if you skip every other step you’re going to get to the top faster!
Did that help?
It did help – great explanation and article(s). Cheers!