Wavetable Synthesis

Wavetable Synthesis

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.

Wavetable

Visual representation of a wavetable with several different waves stored in it. Table is from the Circle soft synth by Future Audio Workshop.

 

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.

 

Did you find this article useful, interesting or informative? Why not share it?

 

7 Responses to “Wavetable Synthesis”

  1. Steve Homolya says:

    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.

  2. DP says:

    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?

    • Scott Rise says:

      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?

Leave a Reply to Scott Rise