A shapeshifting, wavetable synthesis voice


Terrorform is a shapeshifting, voltage controlled, wavetable synthesis voice that focuses on the efficient exploration and discovery of new timbres. It is a derivative of the core oscillator code from the Dexter module, but with many enhancements that allow it to be its own, independent module. Terrorform is not solely an oscillator, as with the addition of the lowpass gate (LPG) it can become a basic synth voice or percussive source.

A bit of trivia

The name Terrorform is a reference to two things.

First, it is a play on the word terraforming, which is a hypothetical process of modifying the landscape, oceans, and atmosphere of a planet in order to make it habitable for life. This is essentially what you are doing in Terrorform: sculpting and shaping the sound from a base wave to create something new.

Second, it is a reference to the British sci-fi sitcom "Red Dwarf", and is named after the episode "Terrorform". In the episode, the "beloved" hologram Rimmer is taken prisoner by manifestations of his own mind on a shapeshifting psy-moon.

To quote the episode:

Kryten : "I remember Mr Rimmer screaming. I have an image of his face, twisted with fear, pain, anguish, dread. Absolutely mortified."

The Cat : "Did someone suggest that he pick up the tab for lunch?"




In normal operation, the tuning of Terrorform is set using the blue pitch controls at the very top, and is offset using the sum of the two VOct inputs. The read phasor shaping is set using the Shape Type and Shape Depth knobs, and the output waveform is further enhanced by the Enhancer. The mode and depth of the Enhancer is set by the Enhancer Type and Enhancer Depth knobs.


As name of the module implies, the sound is terraformed using wavetable synthesis. Wavetable synthesis is a tone generation method that is used to generate more complex waveforms than the typical Sine, Triangle, Sawtooth and Pulse waveforms found on most synthesizers. In this method, a tone is generated by reading back the contents of a pre-generated table of complex waveforms using a rising ramp wave, or phasor. This is the beating heart of the module. To create evolving tones and add movement to the sound, the table is continuously scanned or, essentially, cross-faded between adjacent waves in the table. In Terrorform, there are 64 built-in wavetable banks, each with their own timbral characteristics. These are set by the Bank and Wave knobs, where Bank selects which wavetable bank to accessed, and Wave scans through the wavetable itself.

Phasor Shaper

To add more flavour and variation to the waveform, the wavetable read phasor can be shaped in many different ways. The shaping type is set by Shape Type, and the depth is set by Shape Depth. The following table lists and describes each mode of the phasor shaper:

Mode Description
Bend The phasor is dragged to one side from the middle so that the 1st half of the table is read faster than the last half
Tilt The phasor reads the table faster and then waits at the end until a new cycle begins
Lean The phasor follows a curve, so the table is initial read slowly then gradually faster towards the end of the cycle
Twist Twists the middle third of the phasor around the centre, making read the table forwards, backwards, then forwards again
Wrap The end of the phasor is wrapped back to the beginning several times, creating an effect similar to classic hard sync
Sine Wrap Like Mirror, but the phasor is passed through a sine function, thus giving a gentler sound
Mirror Both ends of the phasor are mirrored when either reaches the start or end
Harmonics Like Sine Wrap, but with cross-fading between fixed sine harmonics
Warble The phasor is randomly wobbled backwards and forwards, giving a warbling effect
Reflect At a given point, the phasor is switched from an rising ramp to a falling ramp
Pulse The phasor is switched off an on at several positions, giving a type of PWM effect
Step 4 Blends the phasor into a 4-step staircase, creating a very lo-fi, bit crushed sound
Step 8 Blends the phasor into an 8-step staircase, creating a very lo-fi, bit crushed sound
Step 16 Blends the phasor into a 16-step staircase, creating a very lo-fi, bit crushed sound
Var Step Gradually makes the phasor increasingly stepped until it disappears completely
Buzz The phasor is cloned from within itself from the middle, resulting in a buzzy texture
Buzz X2 Like previous but the phasor is cloned twice
Buzz X4 Like previous but cloned four times
Wrinkle A derivative of Buzz, but with a sine function applied, resulting in a bell like tone
Wrinkle X2 Like previous but the phasor is cloned twice
Wrinkle X4 Like previous but the phasor is cloned four times
Sine Up A derivative of Wrinkle, but with a fade down function applied, resulting in a vocal / nasal like tone which is dependent on the wavetable
Sine Up X2 Like previous but the phasor is cloned twice
Sine Up X4 Like previous but the phasor is cloned four times
Sine Down A derivative of Wrinkle, but with a fade up function applied, resulting in a vocal / nasal like tone which is dependent on the wavetable
Sine Down X2 Like previous but the phasor is cloned twice
Sine Down X4 Like previous but the phasor is cloned four times


Once the wavetable has been read, the generated a waveform can be even further enhanced. The enhancer is essentially a waveshaper. This is different from phasor shaping which affects how the wavetable is read, but instead this shapes the resulting output waveform after the table has been read. The following table lists and describes each mode of the enhancer:

Mode Description Param
Bitcrush Downsamples the wave to achieve a lo-fi, crunchy timbre Sets the down-sampling frequency
Quantize Creates steps in the wave, creating a dusty, old-school texture Controls the distance between steps
AND Int Integer AND's the bits of the wave with the bits of the read phasor Mixes between the clean and ANDed signal
XOR Int Integer XOR's the bits of the wave with the bits of the read phasor Mixes between the clean and XORed signal
AND Float Floating-point AND's the bits of the wave with the bits of the read phasor Mixes between the clean and ANDed signal
Overdrive Adds some harmonic content to the wave by passing it through a hyperbolic tangent function Controls the amount of overdrive
Ring Mod Multiplies the wave with a carrier sine wave derived from the read phasor Sets the carrier sine wave frequency
Sharpen Multiplies the wave against itself to sharpen the peaks in the wave Degree of sharpness
Sine Passes the wave through a sine function, much like a Chebyshev waveshaper, creating an FM-like timbre Amount of waveshaping
Fold Classic wavefolding that folds the wave back upon itself when it reaches a limit Degree of folding
Mirror Like wavefolding except the waveform reappears at from the opposite voltage rail. Crossfading is applied to soften this effect as it can otherwise sound too aggressive Degree of mirroring

When the LPG is enabled, in its default state the signal chain is Wavetable Reader > Enhancer > Lowpass Gate. However, by enabling the "Swap EH & LPG" button, the order can be switched to Wavetable Reader > Lowpass Gate > Enhancer.

Lowpass Gate

The LPG is enabled / disabled by holding down the "LPG" button for more than 0.5 seconds. There are three modes for the LPG: VCA, Filter, and Filter + VCA. These are cycled through by clicking the LPG button. Each mode is indicated by a colour:

Button Colour Mode
Green Filter
Blue VCA + Filter

The LPG is controlled by an envelope that can be gated by gate signals received at the "Gate" inputs. Like your traditional A/D envelope, the envelope goes into the attack phase when the gate is high (> 0v), and then decay phase when low (<= 0v). If whilst the envelope is in its attack phase and the gate goes low, the envelope immediately enters the decay phase.

If your gates are short, e.g. are 1ms long trigger signals, and you have a slow attack, then the envelope amplitude will be too weak for the signal to be audible. The solution for this is to toggle the "Trig" button, which puts the envelope into a re-triggerable, one-shot mode. In this mode, the envelope will complete one cycle when it receives a trigger signal at the "Gate" inputs, regardless of the length of the signal. However, because this mode is re-triggerable, the envelope will immediately restart its attack phase when receiving subsequent trigger signals, regardless of what phase or the progress of the envelope.

The attack and decay of the envelope is set by the respective "Attack" and "Decay" knobs that flank the LPG button. Toggling the "Long" button extends the attack / decay time range. Velocity sensitivity is enabled by toggling the "Velo." button. The sum of the voltages at the gate inputs determines the overall amplitude of the envelope, thus either affecting the loudness or the brightness of the LPG. This is useful for adding dynamics when creating percussive sounds with Terrorform.


Synchronisation, or sync for short, is a method of forcing an oscillator to reset so that match its pitch to another oscillator. This is usually achieved by sending a pulse or other zero-crossing signal from source oscillator into the 'Sync' input on the target oscillator. When a new pulse is detected, known as a sync event, the target oscillator resets. This usually results in buzzy overtones depending on the type of synchronisation (the reset method described is known as hard sync). Terrorform features 16 synchronisation types.

The following table describes what happens to the read phasor upon detection of a sync event:

Sync Mode Description
Hard Classic hard sync effect where the phasor restarts from the beginning
5th Reads the table at 1.5x speed until another sync event occurs, where it will return to 1x
+1 Oct Reads the table at 2x speed until another sync event occurs, where it will return to 1x
-1 Oct Reads the table at 0.5x speed until another sync event occurs, where it will return to 1x
Rise 1 A value of 0.5 is added to the read speed until it reaches 2x, where it after it will return to 1x
Rise 2 A value of 0.5 is added to the read speed until it reaches 4x, where it after it will return to 1x
Fall 1 Same as Rise 1 but in reverse
Fall 2 Same as Rise 2 but in reverse
Pull 1 Is pulled back by 1/2 a cycle
Pull 2 Is pulled back by 1/4 a cycle
Pull 2 Is pushed back by 1/4 a cycle
Pull 2 Is pushed back by 1/2 a cycle
Hold Is held at its current value until the next sync signal is received
One Shot When it receives a sync event, phasor starts from the beginning and performs one cycle before waiting for another event
Lock Shot Same as above, however, the oscillator rejects any sync events whilst performing a cycle. This creates a harmonic locking effect
Reverse Reverse the direction the phasor will travel

LFO Mode

Zero Frequency

"Zero Frequency? What is the purpose of that?!" I hear you say

The eagle eyed amongst you may have noticed one of the benefits of including the DX style phase mod flavour of FM. Remember, in phase modulation, the phase of the of the read phasor is shifted, regardless of frequency. Therefore, if the frequency is zero and you shift the phase of the read phasor, you will still read the contents of the wavetable but with an external source. When this feature is enabled, the read phasor is "parked" at the beginning of the wavetable so that no hidden phase offset is introduced. The following two sub-sections discuss example uses for this feature.

Example 1: Leader-Follower

Zero frequency allows you to drive a "follower" Terrorform module in "phase mod" mode with a "leader" Terrorform. First, put the "follower" Terrorform into "Zero Frequency" mode by pressing the "Zero" button, and ensure that the "True FM" button is off (i.e DX Style Phase Mod mode). Then, connect the "Phasor Output" from the leader Terrorform (not in Zero Frequency mode) into an FM input of the "follower" and turn up the FM input's attenuator (see following screenshot). You will begin to hear a sound as before, but the pitch is now controlled by the "leader" module. In the "follower", you will still have the shaping and wave enhancement features, but also have perfect pitch and phase matched signals between both modules. You can drive as many Terrorform modules as you want using one or more leaders and their phasor outputs connected to the followers FM inputs.

Example 2: Complex Waveshaper

Zero frequency is not limited to letting you drive other Terrorforms with a single Terrorform. As long as any signal, either AC or DC, is connected to the FM input whilst in DX Style Phase Mod mode, the wavetable reading then controlled by this external signal. This turns Terrorform into a complex waveshaper, where the result is controlled by the wave, shaper, and enhancement parameters.

User Wavetable Manager

Got bored of the built-in tables? Want to load in your own? Terrorform lets you load up to 64 wavetable banks as .WAV files, where each bank can contain up to 64 waves that are 256 samples per cycle in length. This particular specification was chosen so that wavetables generated in the free "WaveEdit" tool from Synthesis Technology (no affiliation) could be used directly in Terrorform with no compatibility issues. However, wavetables that use longer cycle lengths, e.g. those generated using the Serum software synthesizer, can also be loaded, although these are then resampled on load in order to fit into memory allocated for Terrorform.

Not only can you load in wavetables banks, but the banks are saved into your patch file. This means that you do not have to load in your banks each time you re-load your patch, and it allows your patch to be portable and easily shared.

Finally, you can export and load your banks as single ROM files. These are known as Valley Wave Table files and have the file extension ".vwt". These files will allow you to swap out entire groups of banks without the need to laboriously load individual .wav files when you want to change.

Having the ability to load your own wavetables expands the timbral palette of Terrorform, and allows the you to tailor the sound to your own needs.

Accessing and using the manager

The manager is accessed by right-clicking on Terrorform to access the context menu, and then selected "Open" under "Wavetable manager". The knobs will disappear to reveal the User Wavetable Manager menu system where you will be presented with six options (see previous). Here you can access the bank editor, 'defrag'ment the bank memory, export and load ROM files, or delete the entire user bank memory entirely and start again from scratch.

Loading, viewing, and deleting

Wavetable banks are loaded into the module as a single channel .WAV file. The waveforms should be arranged in the .WAV file to appear continuously, one after another in 256 sample long blocks. In other words, one cycle of a wave in your bank should be 256 samples long.

Up to 64 waves can be your .WAV file, bringing the total length of the file to 16,384 samples.

To load a file into a bank slot, starting from the Manager main menu, go to Edit, pick an empty slot from the grid, and click the "Load" button. A file explorer should open where you can then navigate to where your .WAV file is on your computer. Once opened, you will be asked to name your bank, and be shown a visualisation of it.

The name can be up to 9 characters long. You can crop the bank by selecting the start and end waves from the draggable number boxes at the top. Finally, you can scrub through the wavetable using clicking and dragging the visualiser with your mouse, and inspect the individual waves with the display at the bottom.

To complete loading, click Okay, and you will be taken back to the slot grid where you can now see your chosen slot now glowing red. You can continue adding more waves by choosing another slot and clicking on Load to begin the process again.

Cloning and moving

Whilst cloning a bank may seem pointless at first, where you may ask yourself "Why do I want two copies of the same bank?", but this feature allows you to crop the bank whilst cloning, allowing you to focus in on a certain section of the table without needing to load the original .WAV file.

To clone a bank, select it and click the "Clone" button. You will be shown a similar visualisation window as when loading a bank from a file. Here, you can view the table and select the range of waves to clone by setting the draggable, start and end wave number boxes at the top.

Moving a bank is almost the same, except the bank is moved rather than cloned to its new destination. To do this, click the "Move" button. Unlike cloning you cannot crop the waveform, so you will only be shown the destination screen. Once selected, click "Okay", and you will be taken back to the slot grid. Clicking on 'Next' will take you to the destination screen. Here you select which destination bank you want source bank to be cloned to. Once selected, click on "Okay", and then the source will be cloned to the new destination bank.


Just want to admire your wavetables? Click on the view button! You can look at each wave in the box at the bottom by dragging vertically in the 3D wave view.


If you find that after removing, cloning, or moving around your banks has left your grid looking like Swiss cheese. Much like old hard disk drives, many data operations can leave all the stored data scattered and fragmented about the disk. Unlike hard disk drives, this does not affect the performance of Terrorform, but it may not be very aesthetically pleasing to you, and you may want to tidy up your banks.

Again, like for hard disk drives, there is a defragmentation feature built into the manager that will remove the gaps between banks and bring them all next to each other. To "defragment" your banks, from the main menu when you first open the manager, click on "Defrag" and the process will instantaneously defragment your banks.

Appendix A: How it works

Terrorform generates a tone using "wavetable lookup synthesis". This is the exact same method used in each operator in Dexter. As the name suggests, the tone is generated by looking up and reading back the contents of a wavetable. The lookup process is done by a rising ramp wave, known as a read phasor, that reads the table from beginning to end at a set frequency. Different waves in a bank can be scanned through by cross fading between adjacent tables within the same bank. The read phasor can be shaped in several ways that can alter the output waveform. Terrorform offers 27 shaping modes. After being read, the resulting signal is passed through the Enhancer. This further shapes the signal in different ways such as bit-crushing, Chebyshev waveshaping, folding, and more.

Note: The Lowpass Gate and Enhancer are double in the diagram to clarify the operation of the "Swap" function. Their respective parameters are the same regardless of whether "Swap" is enabled.