Overview
Phase Plant is a modular software synth from Kilohearts. Sounds start in a generator area that holds up to 32 modules, drawn from five kinds of generator: analog oscillator, noise, granular, sample player and wavetable oscillator. You add them one at a time and route them through filters, distortion and effects.
The wavetable oscillator plays a table of 256 frames, each 2048 samples long. Its Frame parameter selects the frame, and modulating Frame moves through the table. A Bandlimit control applies a very sharp internal low-pass filter, which Kilohearts suggests for taming a table under heavy phase modulation, since the filter comes before the modulation. The oscillator supports unison as well.
Kilohearts includes a wavetable editor that opens from a pen button next to the table selector. It can draw frames, morph between keyframes, filter the whole table and convert a sample into a table. The same tables are used elsewhere in Kilohearts’ plugins, such as the LFO Table modulator and the Filter Table and Shaper Table effects.
Wavetables on the Phase Plant
Phase Plant’s rule for importing is short and strict. Kilohearts’ documentation says it loads wavetables from WAV and FLAC files “provided they have the right length”, which is 256 × 2048 = 524,288 samples. There’s no frame-size tag to read and no flexibility in the count: a 64-frame table, or a 256-frame table at 1024 samples, doesn’t load as a wavetable as it is. Kilohearts doesn’t say whether it reads a Serum clm chunk, and it doesn’t need one, since the length alone defines the table. WaveStack writes WAV for this target; FLAC is accepted too, but there’s nothing to gain from it for a file this size.
That excludes a lot of tables made for other synths, because most of them have fewer than 256 frames. Phase Plant’s own wavetable editor can convert a sample into a table, but bringing in a finished table from elsewhere means getting it to exactly 256 frames first.
WaveStack’s Phase Plant target does that. It writes a mono WAV with 2048-sample frames and resamples every table to exactly 256 frames: shorter tables are stretched and longer ones squeezed, so the sweep keeps its shape from start to end. Tables at other frame sizes are resampled to 2048, and a 2D grid or 3D volume is flattened to one row, with a warning in Export. Stretching a short table means neighboring frames repeat or blend, so a 16-frame table won’t gain detail, but it will load and sweep as expected.
Kilohearts’ documentation doesn’t give a fixed user wavetable folder. Instead, the wavetable browser lets you add your own folders to the library, so link a folder in WaveStack’s Export and add the same folder in Phase Plant.
Specifications
| Samples per frame | 2048 |
|---|---|
| Frames | Exactly 256 |
| Total length | 524,288 samples |
| File types | WAV, FLAC |
| Frame size detection | None: the file length must match |
| User wavetable folder | Any folder added to the library in the wavetable browser |
From WaveStack to the Phase Plant
- Build or open a table in WaveStack, with any number of frames.
- Press ⌘E and choose Phase Plant as what the table is for.
- Under Save to, link a folder for your Phase Plant tables.
- Export. WaveStack resamples the table to exactly 256 frames of 2048 samples and writes a mono WAV.
- In Phase Plant, add a wavetable oscillator, click the table name to open the browser, and add your folder to the library.
- Pick the table, then modulate Frame to sweep through it.
Frequently asked questions
How do I import custom wavetables into Phase Plant?
Click the wavetable name on a wavetable oscillator to open the browser, add the folder holding your tables as a user folder in the library, and pick the file. The file has to be a WAV or FLAC of exactly 524,288 samples: 256 frames of 2048 samples each. WaveStack’s Phase Plant target resamples any table to that length, so link the same folder in WaveStack’s Export and every export loads.
Why won’t my wavetable load in Phase Plant?
Almost always the length. Phase Plant only loads a WAV or FLAC as a wavetable when it’s exactly 256 frames of 2048 samples, 524,288 samples in total. Many tables made for Serum, Vital or hardware have fewer frames, such as 64 or 128, and some use 1024 or 256 samples per frame. None of those match. Open the table in WaveStack and export with the Phase Plant target, which resamples it to exactly 256 frames at 2048.
Can I use Serum wavetables in Phase Plant?
Only if the Serum table already has all 256 frames. Serum uses the same 2048-sample frames, but its tables can have anywhere from one to 256 frames, and Phase Plant needs exactly 256. A shorter Serum table has to be stretched first. WaveStack imports Serum-style WAVs and its Phase Plant target resamples them to 256 frames, so a 32-frame Serum table becomes a 256-frame Phase Plant table with the same sweep.
What frame size and frame count does Phase Plant use?
2048 samples per frame and exactly 256 frames, so 524,288 samples in total. Kilohearts’ documentation describes every wavetable in the oscillator this way, and imported files must match. That’s the same frame size as Serum, Vital and Pigments, but those accept fewer frames, while Phase Plant doesn’t. The format can be WAV or FLAC. WaveStack’s Phase Plant target writes exactly that length every time, whatever the source table’s size.
Can Phase Plant load 2D wavetables?
No. The wavetable oscillator has one Frame parameter that moves along a line of 256 frames. Phase Plant’s modular layout does let you stack two wavetable oscillators and crossfade between them, which gets you part of a second axis. WaveStack flattens a 2D grid to one row for the Phase Plant target and warns you in Export. A WaveStack & Strata export keeps the grid shape in a wt3d chunk for later.