KURZWORLDResources for K2700 and compatible keyboards
Real-time wavetable editor · Mac · for the Kurzweil K2700

WAVEKRAFT

A wavetable oscillator the K2700 never had, built from its own layers.

A real-time wavetable editor for the K2700, K2088, K2061 and PC4: tables of waves from the ROM and from a pack of our own, a position that a wheel, an envelope, an LFO or a score can move, and every sound an ordinary program, played by your keyboard over USB as you edit.

A wavetable is a row of single-cycle waves and a position that moves along it. The K2700 has no such oscillator. WAVEKRAFT writes one out of VAST: one layer per wave, cross-faded in a cascade, with ramps in the FUNs that leave only the two neighbouring waves sounding, wherever the position is.

Pick one of 79 tables: 17 built from the K2700's own ROM and 62 from a pack of 740 waves made from formulas. Move the position with the mod wheel, pressure, the bender, a slider, an envelope, an LFO, the velocity, the key, a 16-step score or at random: slow tides for a pad, a bright strike that falls away for a piano, one still wave for a bell. Everything the panel sets is a K2700 program, and a stored program moves by itself with no computer attached.

This page is also a complete tutorial. It starts from what a wavetable is, goes through how tables are built and how motion makes them musical, and ends with every step of building one on a Kurzweil by hand, down to the numbers in each FUN.

79tables: 17 on the K2700's ROM, 62 on our own waves
740waves of our own in one .K27, each with eight roots
2 to 16waves a table, one K2700 layer each
410programs in three banks, from slow tides to one still wave
Inside

What it does

Real-time on your K2700

Every turn of a knob compiles the program again, and the LINK sends only what changed into the K2700's edit buffer while you play.

79 tables

17 on the K2700's ROM keymaps, 12 own tables with woven harmonics and 50 families of whole waves: bells, glass, formants, FM, organs, filters, sync. Each one plays in 2 to 16 frames, and the display says what polyphony that leaves.

SMOOTH, STEP, PPG, SHAPE

SMOOTH blends the two neighbouring waves, STEP jumps at the half-way points, PPG crosses each passage in 8 levels. SHAPE works a sine, saw or triangle through the K2700's own shapers.

Three banks, 410 programs

100 on the ROM that move once and settle, 100 on the ROM with tides, drifts and breathing, and 210 simple sounds on the pack's waves. Load the .K27 files and edit any of them.

Two oscillators

OSC B is a second table with its own frames, interval, detune, level and pan. It follows A with an offset, stays where you put it, or sweeps on its own envelope.

Every way to move it

LIVE on the wheel, pressure, the bender or CC 20; ENV with a release; LFO, in tempo if you want; SCORE, 16 steps; RANDOM per note; key and velocity.

A filter with character

LP, LP 24, HP and BP, POS ENV to open the filter with the position, GRAIN for stepped sweeps at 24 Hz, DIGITAL down to 1.6 bits, voice by voice.

LINK, SCAN, READ, STORE

At LINK on it finds the effect chain and the waves by name, scans your USER programs and lists every WAVEKRAFT program it finds. STORE writes one back, and reads it to check.

In your browser too

Open it in Chrome or Edge with your K2700 on USB: the same panel, the same LINK, nothing to install. Your K2700 plays and keeps every program.

The complete tutorial

Wavetable synthesis, from the first idea to a program on your Kurzweil

Read it in order, or jump to the part you need. Part one is the theory, for any instrument. Part two is about motion, where most of the sound is. Part three is the editor. Part four builds a wavetable oscillator on a Kurzweil, step by step.

Part one

Wavetable synthesis

What a wavetable is, what goes into one, and how it differs from every other way of changing a sound.

Wavetable synthesis

A row of waves and a place on it

A wavetable oscillator stores many single-cycle waves in a row and plays one place on that row. Change the place and the note keeps playing while its wave changes. That place is called the position, and moving it is the whole technique.

A single cycle is one period of a waveform kept as a list of numbers, 128 of them in the waves on this page. Read the list round and round and you hear a note; read it twice as fast and the note goes up an octave. The list says nothing about pitch, only about shape, and shape is timbre: any cycle is a sum of harmonics, and the harmonics are what you hear.

A table is a set of such cycles chosen so that neighbours are related: a sine that grows into a saw, a pulse getting narrower, one vowel turning into another. The classic hardware held 64 of them to a table, software often 256. Each cycle in a table is called a frame.

ONE CYCLE128 numbers, read round and roundone period = one note
ITS HARMONICSthe same thing as a list of partials0 dB-12-24-36-48132harmonic
A TABLEmany cycles in a row, and a place on it
One cycle from the FILTER table of WAVEKRAFT's pack, its harmonics, and the whole table with a position in it. A cycle and its harmonics are one thing described two ways.

The position is a single number. At one end you hear the first frame, at the other the last. In between, the oscillator has to decide what to play, and that decision is the difference between the modes further down. Try it: pick one of the pack's tables, drag the position, and watch the wave and its harmonics change.

Table
Frames
Between
Motion
The wave
Its harmonics, 1 to 32

frame 3 › 4 · 8 frames are 8 voices a note, 32 notes of 256

Six of the pack's tables as WAVEKRAFT draws them. SMOOTH, STEP and PPG are the panel's three ways between frames, with the arithmetic of its compiler; FRAMES picks evenly spaced waves, as the panel does. There is no sound on this page: only your K2700 plays WAVEKRAFT.
Why it is worth having

One note that travels

A filter makes a sound darker or brighter by taking harmonics away. A table can go anywhere its frames go: from a sine to a spectrum of narrow peaks, from one vowel to another. The note changes what it is, and it changes while you hold it.

Timbres a filter cannot make

Frames can add harmonics that were not there, move formants or open a gap in the spectrum, in either direction.

One envelope, two jobs

An envelope can move the position and open the filter together, so timbre and brightness arrive as a single gesture.

Movement under the hand

On a wheel, pressure or a slider, the position becomes a playing control, like the pressure of a bow.

A wave per key or per strike

Key and velocity can choose the place in the table: softer notes on a duller frame, higher keys on another.

Bells and glass

Frames with sparse partials are bells on their own, with no modulation at all: the classic digital bell is a still position.

Two tables against each other

Two oscillators on two tables, or on the same table at different places, make a sound that neither has alone.

What goes in a table

A table is a path through timbre

A table can hold any waves at all, but the ones that work follow one idea from end to end. Draw a table as a picture, with the waves from left to right and the harmonics from bottom to top, and the idea is there to see.

SINE TO SAWharmonics arrive from the bottom up132first wavelast
A FILTER, OPENINGa sweep frozen into waves132first wavelast
PULSE WIDTHgaps that move through the spectrum132first wavelast
HARD SYNCa peak that climbs132first wavelast
FM, INDEX RISINGsidebands spread from the carrier132first wavelast
VOWELSformants that jump to new places132first wavelast
Six tables of WAVEKRAFT's pack. Each column is one wave of the table and each row one harmonic, 1 at the bottom and 32 at the top. The brighter the square, the louder that harmonic.
Kind of tableHow it is madeWhat you hear as it movesGood for
Harmonic riseharmonics added one by one, the sine firstbrightness with no filter in itpads, organs, soft leads
Filter sweepone wave through a filter that opens wave by wavea filter sweep frozen into waves; with resonance, a peak that climbsbasses, brass, plucks
Pulse widtha pulse getting narrowerharmonics that drop out and come backstrings, hollow leads
Hard synca wave restarted ever later in its cyclea tearing, vocal peak that climbsleads
FMa sine modulated with a rising indexsidebands spreading out from the carrierelectric pianos, bells, metal
Formantspeaks at fixed frequencies that change from wave to waveone voice changing vowelchoirs, talking pads
Sparse partialsa few narrow peaks far apartstruck metal or glass: held still, it is already a bellbells, glass, mallets
Registerssums of a few harmonics, like drawbarsstops being drawnorgans
Cycles of a soundcycles taken at points along a sound that changes by itselfthat sound's own evolution, at any speed you likeimitative and hybrid sounds
Making one

Six rules for a table that moves well

A table is only as good as the steps from one wave to the next. These six rules apply on any instrument, and all of WAVEKRAFT's tables follow them.

One idea from end to end

A table is a single gesture. Mix two ideas and a sweep sounds like a change of program half way through.

Darkest first

With the waves in order of brightness, a larger position is always brighter, so an envelope, the velocity or the key mean what you expect.

Neighbours that agree

The same fundamental phase and the same harmonic signs, so that a blend keeps what two waves share. Next section.

One level

Every wave at the same RMS, or the position will move the volume as well as the timbre. WAVEKRAFT's 640 whole waves sit within 0.1 dB of each other.

A version for every octave

High notes have no room for high harmonics. A wave needs fewer of them as it goes up the keyboard: see the section on aliasing.

As many waves as the journey needs

Two waves are a morph, four to eight are a path, sixteen a long road. On a Kurzweil each one costs a voice per note.

A table is also a library. It does not have to be swept. A wave with sparse partials is a bell with no modulation at all, and a good table is a set of related single cycles to choose from. Of WAVEKRAFT's 640 whole waves, 453 are more than 3 dB away from every other, and the rest are the gentle steps that make a passage continuous.

Between two waves

Jump or blend

Two neighbouring frames are two different lists of numbers. When the position lies between them, the oscillator can play one or the other, or a mixture of both.

Jumping is the oldest answer. The position is rounded and one frame plays at a time. With few frames the jumps are heard, and the result sounds more like a sequence of waves than a sweep. Blending crossfades the two neighbours, point by point: the sound moves smoothly, at the cost of a multiplication per sample and per oscillator. In-betweens are what the first commercial wavetable instruments did: the blends were worked out once, when a table was loaded, and kept as extra frames. Playing was jumping again, in steps small enough to read as a sweep. Spectral morphing is the modern answer: it blends harmonics instead of samples, level by level and phase by phase, and needs an oscillator built for it.

JUMPone wave at a timewave 1wave 2wave 3wave 4
BLENDa crossfade, recalculated all the timewave 1wave 2wave 3wave 4
IN-BETWEENSblends worked out once, then jumpswave 1wave 2wave 3wave 4
Four waves across the position, three ways. Each colour is how much of one wave sounds. The last picture has 8 levels a passage. WAVEKRAFT has all three on the panel: STEP, SMOOTH and PPG.
Phase

A blend is only as good as its phases

A blend adds two waves sample by sample. Whatever the two have in common adds up if it is in phase. A harmonic in opposite phase in the two frames cancels half way, and the sound dips or turns hollow for the length of the passage. So tables are normally built with neighbours that agree: the same fundamental phase, the harmonics with the same signs.

in phase0.0 dB
60° apart−1.2 dB
120° apart−6.0 dB
oppositesilence
One harmonic, half way through a crossfade. Blue is its part from one wave, light blue from the other; the dashed amber line is what you hear. In phase nothing is lost, at 120° it is 6 dB down, in opposite phase it is gone.
Bands and aliasing

Why a table needs more than one copy of each wave

A digital oscillator cannot produce frequencies above half its sample rate. Whatever a wave asks for above that limit comes back, mirrored, at a frequency that has nothing to do with the note.

At 48 kHz the limit is 24 kHz. A wave of 24 harmonics is fine at C3 and at C5; at D7 only its first ten fit, and the others fold back down as inharmonic tones. The usual cure is to keep several versions of each frame, with fewer harmonics for higher notes, and to choose by pitch.

THE PACK: EIGHT ROOTS, ONE AN OCTAVEeach holds what still fits at the top of its range020406063F#063F#163F#263F#337F#418F#59F#64F#7the root, and the highest harmonic it holds
A WAVE OF 24 HARMONICS PLAYED AT D7what is above 24 kHz comes back, at the wrong frequency04812162024kHzharmonics in tunefolded back
Right: a 24-harmonic wave at D7, what stays in tune and what folds back. Left: how the pack's 640 whole waves deal with it: eight roots, one an octave from F#0 to F#7. Up to F#3 each holds 63 harmonics; above that, what stays below 20 kHz half an octave over the root.

On the K2700 this comes with the sample player: a sample at 48 kHz can be played at most one octave above its root, so a keymap needs a root in every octave anyway. WAVEKRAFT's waves use that. The ROM tables inherit the roots of the K2700's own factory keymaps.

RootSamples a cycleStored asFrequencyHarmonics (WK waves)
F#02048128 words × 1623.4 Hz63
F#11024128 words × 846.9 Hz63
F#2512128 words × 493.8 Hz63
F#3256128 words × 2187.5 Hz63
F#4128128 words375 Hz37
F#564a shorter cycle750 Hz18
F#632a shorter cycle1.5 kHz9
F#716a shorter cycle3 kHz4
Resolution

The sound of the first machines

The first wavetable instruments read cycles of 128 words at 8 bits. That low resolution is a flavour to reach for when you want it, and not part of the definition: a wavetable can be as clean as the waves in it.

The staircase. A wave read without interpolation holds each word until the next. That adds images of every harmonic: harmonic n gets copies at 128m ± n, at n / (128m ± n) of its level. Harmonic 30 has one at harmonic 98, 10.3 dB down. At C2 that is 6.4 kHz and clearly there; at C4 it is 25.6 kHz and gone. This is why such waves sound grainier low on the keyboard.

The bits. At 8 bits one step of a word is 48 dB below full scale. The wave is the same in every cycle, so the rounding error is too, and it lands on exact harmonics. It belongs to the waveform, and nothing hisses.

The modulation. On those instruments the control voltages of the filter and amplifier were refreshed every 38.4 ms or so, about 26 times a second, which gives a sweep a fine grain of its own.

A SINE IN 128 WORDS OF 8 BITSthe first twenty words: each is held until the nextgrey: the curve · blue: what is stored
HARMONIC 30 AND ITS IMAGES128m ± n, n / (128m ± n) of its level0−6−12−18−240 dB30−10.398−14.4158−17.5226−19.6286harmonic number
Left: the first twenty words of a sine in 128 words of 8 bits, against the curve. Right: harmonic 30 and the images the staircase adds to it, with their levels.

WAVEKRAFT's own waves carry the first two in their data: 128 words of 8 bits, with each word held for 16, 8, 4 or 2 samples at the low roots, so the staircase and the rounding are really there in the samples. The third is the GRAIN button, and the K2700's own resolution is taken down by DIGITAL. Both are further down.

Neighbours

Wavetable, wave sequence, vector, filter

Several techniques change a sound by moving through waves. They are easy to confuse, and they do not sound alike.

WAVE SEQUENCEa list of waves, each held for its own time02468 s
WAVETABLEone journey, every moment a blend02468 s
The same four waves for eight seconds. In the sequence each wave is an event with its own length. In the table there are no events: every moment is a blend on the way somewhere.
TechniqueWhat movesWhat you hear
Wavetablea place along a row of related single cyclesone tone whose harmonics change continuously
Wave sequencinga list of waves or samples, each held for its own timea pattern of timbres, in rhythm
Vectorthe balance of four sounds, by a joystick or envelopesfour fixed sounds in changing proportion
Filter sweepa cutoff over a fixed waveharmonics leaving from the top down, in order
Additiveeach harmonic on its own envelopeanything, at the price of a great many controls
FMthe depth of one oscillator on anotherharmonics that appear and vanish in a pattern set by the ratio

The line between the first two is speed and blend. Take a table with few waves, jump between them quickly, and it stops being a sweep and becomes a row of separate events. Slow it down and blend, and the waves dissolve into one moving colour. Most of what makes a wavetable sound right is on that side of the line, and Part two is about staying there.

History

Where it comes from

  1. 1958

    MUSIC II

    At Bell Labs, Max Mathews computes sound by reading a stored wave in a loop: the table-lookup oscillator, on a mainframe.

  2. 1978–79

    PPG Wavecomputer 360

    Wolfgang Palm's instrument plays through tables of single-cycle waves, with a position moving along them. It has no filters.

  3. 1981

    PPG Wave 2

    Digital oscillators and an analog filter on every voice. The 2.2 of 1982 has two oscillators a voice and the 2.3 of 1984 has 12-bit converters and eight parts.

  4. 1986

    Prophet VS

    Four waves mixed by a joystick: vector synthesis, a close neighbour of the wavetable.

  5. 1989

    Waldorf Microwave

    Digital wavetable oscillators with analog filters: the sound goes on after the PPG.

  6. 1990

    Korg Wavestation

    Wave sequencing: lists of waves, each with its own time, one after another.

  7. 2000s

    Software

    Hundreds of frames blended in real time, spectral morphing, and tables the user draws or imports.

  8. 2026

    WAVEKRAFT on the K2700

    Wavetable synthesis on keyboards that have none: tables of waves written as ordinary Kurzweil programs.

A PPG table holds 64 waves of 128 eight-bit words, but only a few key waves are stored. The rest are worked out once, when the table is loaded, and while a note plays the machine jumps from one wave in memory to the next, in the middle of a cycle. Software later made the same idea much bigger: hundreds of frames, blended in real time, and tables the user can make. WAVEKRAFT has a mode for each way of thinking about it, the blend and the jump in small steps, and the K2700's own synthesis does the rest.

Part two

Motion

A table is a map and the motion is the journey. What to move, how fast, where to stop, and what each kind of sound wants.

Why motion matters

The table is the map. The motion is the sound.

The same table can be a pad that never settles, a piano that opens at the strike or a bell that does not move at all. What makes the difference is how the position travels.

Slow travel

Pads, textures, voices. The position wanders for as long as the note is held, in journeys of 8 to 20 seconds, so a held chord keeps changing colour.

A gesture at the strike

Pianos, strings, plucks, brass, basses. The timbre moves once, in the first moments, and then rests on one wave: bright at the strike and darker after, as real instruments are.

Held still

Bells, glass, organs, simple pads. One wave, or two side by side. The choice of wave is the sound, and the table is a very good library of single cycles.

Try them. Each curve below belongs to a real program in WAVEKRAFT's banks, and PLAY runs the note at its real speed. The amber line is the present moment, and the pictures under it are the wave at that moment.

The wave
Its harmonics, 1 to 32
Motion
Table
Note

ENV looping both ways: up in 2 s, back in 4 s, and round again. TIDAL GLASS, HARMONIC RISE, waves 3 to 7.

The journeys of nine programs, over any of six tables of the pack. Cyan is the position, violet is OSC B when it has its own. There is no sound on this page: only your K2700 plays WAVEKRAFT.
The vocabulary

Nine ways for a note to travel

Every motion in the banks is one of these. Each picture is 24 seconds of one note, with the place in the table from the first wave at the bottom to the last at the top.

ONCEGLASS DAWN: 12 s up, 16 s backnote starts24 s
TIDETIDAL GLASS: a cycle of 12 snote starts24 s
DRIFTWARM CURRENT: an LFO at 0.12 Hznote starts24 s
BREATHANALOG SECTION: 0.15 Hz, one passagenote starts24 s
BLOOMANALOG SWELL: rises, rests on a wavenote starts24 s
FADEDIGITAL PIANO: bright, falling in 2.5 snote starts24 s
TWINTWIN SPECTRA: B follows in its own tablenote starts24 s
SCOREWANDERING PAD: 16 steps of 1 snote starts24 s
RANDOMRANDOM CHIMES: a new place each notenote starts24 s
Nine programs from the banks.
GestureOn the panelHow it goesBest onProgram
ONCEENV, loop offup in 8 to 20 s, then part of the way backpads, texturesGLASS DAWN
TIDEENV, loop BIDa cycle of 8 to 20 s, uneven, back and forth for as long as the note lastspads, strings, texturesTIDAL GLASS
DRIFTLFO0.06 to 0.12 Hz, over 2 to 9 wavespadsWARM CURRENT
BREATHLFO0.1 to 0.2 Hz, over one passagestrings, voices, organs, winds, leadsANALOG SECTION
BLOOMENVup in 1 to 5 s, then resting on a waveswells, brass, leadsANALOG SWELL
FADEENVbright at the strike, falling from bright to dark over 1 to 5 skeys, bells, plucksDIGITAL PIANO
TWINOSC B, FOLLOW Atwo tables travelling together, each at its own placepads, keysTWIN SPECTRA
SCORESCORE, smoothed16 steps of 1/4 to one bar, gliding from one to the nextslow sequences, padsWANDERING PAD
RANDOMRANDOMa new place on every note, heldplucks, bells, bassesRANDOM CHIMES

Two more belong to the player. LIVE gives the position to the mod wheel, pressure, the bender or a slider on CC 20, and the hand is the envelope. VEL → POS and KEY → POS choose a place per note: a harder strike on a brighter wave, a higher key on a thinner one. The place then stays where it was chosen.

In the manual: the motion

Rates

Slow, but not too slow

Timbre moves well when it moves slowly. But every note starts its own envelope and its own LFO, so a motion has to happen within the time a chord is held, or nobody hears it.

a chord held for 3 s0½10123456 s0.03 Hz0.05 Hz0.08 Hz0.12 Hz0.20 Hz
An LFO as a note starts it: half way up and rising. At 0.03 Hz a chord of 3 seconds hears under a tenth of a cycle. At 0.12 Hz it hears more than a third.

Not too slow. A cycle of 33 seconds is lovely on a chord that lasts a minute, and on a chord of three seconds it is a sound that hardly moves. WAVEKRAFT's first bank uses LFOs of 25 to 50 seconds and envelopes of 8 to 20 seconds, for long notes. The second brings the pads to 0.08 to 0.12 Hz and tides of 10 to 14 seconds, and you hear them from the first moments of a chord.

Not too fast. Past about 0.2 Hz a change of timbre stops being a colour and starts being an effect, or a sequence. None of the slow motions in the banks goes faster. The gestures at the strike are another matter: they are over in a second or two, and you hear them as part of the attack.

The rules

Six rules for a musical journey

End on a wave

A motion that stops comes to rest on a frame, never half way between two. The envelope's sustain level is chosen so that it lands there.

Slow only where it blends

A slow passage exposes any cancellation between two waves, and a quick one hides it. Long journeys stay on passages that cross cleanly. An attack can go through anything.

Uneven is alive

A tide that rises in 2 seconds and falls in 4 does not repeat like a sine. Up, back part of the way, up again: no machine going round.

Set the colour, then hold it

Classic sounds change at the strike and then stop. A piano that keeps wandering is no longer a piano.

Give it something to move against

OSC B held on one wave, an octave up or a few cents away, is a fixed point that makes the motion of A easier to hear.

Effects that leave room

A slow chorus, and a reverb that depends on the sound: about 3.5 s for pads and choirs, 2.3 s for strings and bells, 1.7 s for plucks and brass, 1.1 s for organs and basses.

Sound by sound

What each kind of sound wants

These are the ranges used in the two banks that move: a starting point for any sound you build, on WAVEKRAFT or by hand.

SoundTablesPositionFilter and ampPrograms
PadsHARMONIC RISE, DRAWBARS, ADDITIVEENV up in 1.5 to 16 s and back in 3 to 20 s, or LFO 0.02 to 0.12 HzLP up to 9 kHz; attack 0.8 to 3 s; release 2.5 to 4 sGLASS DAWN, TIDAL GLASS
StringsSAW BRIGHTEN, ANALOGENV up in as much as 3 s and back in up to 6 s, or LFO 0.05 to 0.18 HzLP 2.5 to 7 kHz; attack up to 1.8 s; OSC B 4 to 8 cents awaySTRING ENSEMBLE, ANALOG SECTION
Choirs, voicesVOWELS, CHOIR + PADENV up in 1.5 to 8 s, or LFO 0.04 to 0.12 HzLP 6 to 8 kHz; attack 0.5 to 2 s; release 1.5 to 3 sOOH CHOIR, VOWEL MORPH
Electric pianos, keysKEYS, HARMONIC RISEa bright strike and a fall of 0.24 to 5 s, or VEL → POSLP up to 12 kHz; no attack; decay 1 to 6 s; velocity 10 to 20 dBDIGITAL EP, EVOLVING EP
Bells, malletsBELLS + GLASS, HARMONIC RISEa fall of 0.3 to 4 s, RANDOM, or a slow LFOLP 8 to 12 kHz; velocity 10 to 16 dBMARIMBA, RANDOM CHIMES
PlucksKEYS, HARMONIC RISE, ANALOGa fall of 0.24 to 1.5 sno attack; decay 1 to 3 s; no sustain; velocity 14 to 16 dBKOTO, HARP GLOW
OrgansDRAWBARS, ORGAN WAVESVEL → POS chooses the registration, or LFO 0.1 to 0.15 Hzattack from 5 ms; full sustain; velocity 0 to 4 dBDRAWBAR ORGAN, CHURCH BLOOM
BrassSAW BRIGHTEN, ANALOGENV up in 0.04 to 2 s and back in 0.5 to 3 sLP 2.5 to 6 kHz; attack 0.04 to 1.2 s; OSC B 5 or 6 cents awaySYNTH BRASS, BRASS BLOOM
WindsHOLLOW ODD, ADDITIVEENV up in 0.04 to 0.1 s, or LFO 0.12 to 0.18 HzLP 4 to 7 kHz; attack 20 to 80 msCLARINET, REED MORPH
BassesANALOG, VS DIGITAL, HOLLOW ODDa quick fall of 0.2 to 1 s, or VEL → POSno attack; release 0.1 to 0.2 s; full sustainDIGITAL BASS, TOUCH BASS
LeadsSAW BRIGHTEN, VOWELS, HOLLOW ODDENV up in 0.02 to 1.5 s, or CC 20LP 5 to 9 kHz; attack 10 to 20 msWAVE LEAD, SINGING LEAD
SequencesHARMONIC RISE, DRAWBARS, KEYSSCORE, 16 stepsLP 6 to 9 kHz; attack up to 0.3 sRHYTHM PAD, SLOW STEPS
TexturesHARMONIC RISE, METAL FXENV up in 4 to 20 s and back in 6 to 25 s, or LFO 0.02 to 0.08 Hzattack 2 to 3 s; release 4 to 6 sMETAL WIND, METAL TIDE
Held still

Simple sounds: one wave, two at most

The 210 programs of WAVEKRAFT WAVES are the other half of the art: 172 of them rest on one wave an oscillator, and the slider on CC 20 moves it if you want. OSC A takes a wave and OSC B takes its neighbour a few cents away and 5 dB down, or another family one or two octaves up and 10 to 16 dB down. Two to six voices a note, so chords are never short of polyphony.

SoundRecipePrograms
BellsImmediate attack, no sustain, a long tail. The filter opens and closes with the note, and the reverb is large.24
GlassThin brightness from high harmonics, with high-pass and band-pass filters.14
MalletsShort and round. Velocity opens the filter or changes the wave, and the reverb is small.14
Digital keysDigital electric pianos: a falling sustain, medium chorus, very responsive to velocity.20
Soft padsSlow attack, A and B detuned and spread across the stereo, a low filter, plenty of chorus and reverb.26
Digital stringsA soft saw or a phased one, medium attack, wide chorus, a low-pass with a slow envelope.14
VoicesFixed formants. The wheel or a slow envelope changes the vowel, in a wide chorus.14
OrgansNo filter envelope, short attack, a steady tone, a flanger or chorus for movement.12
Brass and reedsThe filter opens at the attack like a breath, with soft attacks.12
FlutesAlmost a sine. Breath by velocity and pressure, in a room.8
BassesCentred, few effects, a filter with a short envelope.16
Soft leadsMonophonic in spirit, the wheel or pressure on the wave, a discreet delay.12
PlucksA dry attack and a filter closing fast. The delay gives the space.14
AtmospheresSlow motion, always between two waves.10
Part three

The editor

Everything above on one panel, in real time on your K2700.

What the editor does

One panel, and the K2700 does the playing

WAVEKRAFT is an editor for the K2700. It has no oscillator and no sound of its own: it writes K2700 programs and sends them over USB while you play them on the K2700.

The panel: OSC A and OSC B, the display, the FRAMES strip, ENGINE · PLAY · FX, MOTION · POSITION and FILTER · AMP. Top right: PROGRAM, SCAN, READ, STORE and LINK.
SectionWhat is there
OSC ATABLE, FRAMES 2, 4, 8 or 16, SMOOTH, STEP or PPG, POSITION, KEY → POS, VEL → POS, LEVEL, TUNE, FINE, PAN
OSC BON, TABLE, FRAMES 2, 4 or 8, FOLLOW A, OWN or ENV, POSITION, INTERVAL, DETUNE, LEVEL, PAN; with ENV, ATTACK, DECAY and DEPTH
The display3D VIEW, WAVE, MOTION, TABLES, WAVES and K2700, plus the FX and programs pages; VALUE and FRAME beside it
FRAMESthe frames of the selected oscillator: WAVE, FRAME LVL, ◀ MOVE, MOVE ▶, AUTO LEVEL, and a light that says when they are all of one family
ENGINE · PLAY · FXMORPH, SCAN or SHAPE; PLAY, HOLD, VELOCITY and KEY; ◄ FX, FX ►, ON, BYPASS, and three knobs for the selected effect
MOTION · POSITIONLIVE, ENV, LFO, SCORE or RANDOM, AMOUNT and each one's own controls, and a line that says what that costs in voices
FILTER · AMPLP, LP 24, HP, BP or OFF, POS ENV, GRAIN; CUTOFF, RESO, FLT ENV, KEY TRK, DIGITAL; ATTACK, DECAY, SUSTAIN, RELEASE, VEL
The top rowLEVEL, REVERB, TIME, FX; PROGRAM ◀ ▶; SCAN, READ, STORE, LINK

In the manual: the panel at a glance

The tables

79 tables from three places

The TABLE knob goes through all of them, and the display says where each one comes from: ROM, OWN or WK. Whichever you pick, it plays the same way: each frame is one K2700 layer on one keymap.

17 on the K2700's ROM

Factory keymaps that hold a single cycle at every root. Every K2700 has them, so they take no sample memory. 89 frames over 66 different keymaps, each measured on the K2700 for level.

12 own tables (WKX)

96 waves whose neighbours share no harmonic, so the K2700's cascade cannot comb them: vowels, FM, FILTER, PWM, SYNC, ORGAN, BELLS, CHIP, COMB. The fundamental plays in a layer of its own.

50 WK families

640 whole waves, fundamental included, in 30 families of 16 and 20 of 8. A wave can play alone, so a simple sound takes 1 to 3 of them.

The TABLES page. A table's waves in the pack show NOT LOADED if the pack is not on the K2700.

Chosen on the instrument. A crossfade between two ROM cycles is smooth only if their shared harmonics are in phase, and factory keymaps are not made for that. Each ROM table was played on the K2700, held still on every wave and half way through every passage, at C2, C3 and C5, and cut down wave by wave to what crosses well, in order from dark to bright.

METAL FX is inharmonic and made for textures. HIGH PARTIALS is for playing held still.

ROM tableWavesWhere it travels cleanly
HARMONIC RISE10all (one slight at C5)
ADDITIVE5all (one slight at C5)
DRAWBARS4all
HOLLOW ODD4all, slight at C5
EVEN SPECTRUM4from wave 2 to 4
HIGH PARTIALS4none: held still
ANALOG81 to 2, and 6 to 8
SAW BRIGHTEN52 to 4
PULSE WIDTH42 to 3, slight
OB WAVES41 to 2
ORGAN WAVES41 to 2
VOWELS54 to 5
CHOIR + PAD43 to 4, slight
BELLS + GLASS52 to 5
KEYS7all
VS DIGITAL5slight in all
METAL FX7inharmonic, for textures
WK familiesWhat they are
RESO LO, RESO HI, SOFT LP, NO FUND, FILTERfilters and resonance
SIN>SQR, SIN>SAW, PWM, PHASE SW, SYNCfrom the sine to the classic shapes
VIBES, BELLS, BELL A, BELL B, GLASS, TINE, MALLET, CELESTE, HI PEAKS, HI COMB, HI FORCE, HI STRONGbells and metal
VOWEL M, VOWEL F, FORM LOW, FORM HIGH, FORM HI2, FORM MIR, CHOIRformants and voices
FM 1-1, FM 1-2, FM 1-3, FM 1-5, FM 1-7, EP DIGFM spectra
ORGANS, REEDS, STRINGS, BRASSorgans, reeds, strings
RINGMID, RINGMID2, WILD, FUND+HI, ALT HI LO, ECHOES, ECHO COL, DREAM, COMB, CHIPeffects
SOFTsoft waves

In the manual: the tables

FRAMES

The frames

FRAMES says how many waves of the table are played: 2, 4, 8 or 16 on OSC A, 2, 4 or 8 on OSC B. They are spread evenly over the table, and the strip shows them, each with its level.

WAVE swaps the selected frame for any other wave of the same origin, ◀ MOVE ▶ changes its place, FRAME LVL trims it by ±12 dB, and AUTO LEVEL brings every frame to the table's mean level, from the levels measured on the K2700.

FRAMES 2 is a morph between two waves, at two voices a note. It starts on the table's cleanest neighbouring pair; on HIGH PARTIALS and CHOIR + PAD the panel says NO CLEAN PAIR. An own table in 4 plays waves 1, 4, 5 and 8, so that neighbours still share no harmonic.

The FRAMES strip of OSC A.

In the manual: the frames

Between frames

SMOOTH, STEP, PPG, and SHAPE

Three buttons on OSC A say what happens between two frames, in the MORPH engine. SHAPE is another engine: no table at all, one layer and the K2700's own shapers.

SMOOTHa ramp the width of a passage0501000.000.320.640.96positionXFade %, one line a layer
STEPa ramp 0.02 wide, at the half-way point0501000.000.320.640.96positionXFade %, one line a layer
PPGthe same ramp, in 8 levels0501000.000.320.640.96positionXFade %, one line a layer
As the compiler writes them for 4 frames, 0.32 apart: the XFade of each layer against the position. In SMOOTH each layer takes the whole of its passage, in STEP a ramp 0.02 wide at the half-way point, in PPG the same ramp as SMOOTH in 8 levels.
Between two framesPositions, 8 framesWhat it needs
SMOOTHa straight crossfade of the two neighbourscontinuous3 FUNs a layer
STEPa jump at the half-way point, 0.02 of the position wide83 FUNs a layer
PPG8 levels across each passage: small jumps, not a blend50 (10 frames: 64)4 FUNs a layer, so one direct source only
SHAPEnot a table: a factory sine, saw or triangle through SHAPER or WRAP, its amount on the positioncontinuous1 voice, no ramps
OSC A, with VOWEL F in 8 frames.

PPG is the mode for the jump in small steps. With 8 frames it gives 50 places, each one a jump, with no extra voice. A jump on the K2700 takes 10 to 13 ms, where the original instrument's was immediate. The price is the FUN it spends, so it only takes a single direct source: RANDOM or a negative AMOUNT would need a fifth FUN, and the panel falls back to STEP. A SCORE in PPG plays its steps with no smoothing.

SHAPE drives a SHAPER (sine and triangle, 0.1 to 2.5 ×) or a WRAP (saw, −12 to +12 dB) with the position. One voice a note, so it is the cheapest way to move timbre, and it leaves all the polyphony for chords.

In the manual: engines and modes

MOTION · POSITION

Every way to move the position

POSITION says where a sound sits in its table, and the motion moves it from there, by AMOUNT, up or down. Each source on the panel is a real K2700 control source, written into every layer.

MOTION, here on ENV. The curve is the position against time, and the last line says what it costs in voices.
On the panelOn the K2700
LIVE · MOD WHEELMWheel
LIVE · SLIDER (CC 20)MIDI20, with the label WT Positionthe display follows a K2700 control on CC 20
LIVE · PRESSUREPress
LIVE · BENDERAbsPwleither way counts as up
ENVENV2ATTACK, DECAY, SUSTAIN, LOOP OFF, FWD or BID, and RELEASE
LFOLFO1RATE 0.02 to 8 Hz or SYNC to the tempo; +TRIANGLE, +SINE, +SAW, +SQUARE or RANDOM
SCOREthe CC sequencer on MIDI2016 steps of 1/16 to 1 BAR, SMOOTH by a lowpass FUN
RANDOMGRand2 held at the note's starta new place on every note
VEL → POS, KEY → POSAttVel, KeyNumwith the motion's AMOUNT at 0

LIVE writes no envelope and no LFO: the position simply is the control. On CC 20 the program also carries the PARAMS label WT Position, because a K2700 program only hears a CC it has a label for; without it, the slider does nothing in a stored program.

ENV can loop, forward or back and forth, for the slow tides of a pad. On the K2700 the release segment of ENV2 does not run, so RELEASE is built another way (see below). POS ENV in the filter uses this same ENV2 to open the cutoff, so timbre and brightness are one gesture.

SCORE runs on the K2700's own CC sequencer, but only in a stored program: the edit buffer does not carry a sequence. While you are linked, WAVEKRAFT plays the same 16 steps as CCs in time.

AMOUNT at 0 means no motion at all: the position sits where POSITION puts it, as constant XFades that use no FUN.

In the manual: the motion

The second oscillator

OSC B follows, stays or goes its own way

OSC B is a whole second chain of layers after A's, with its own table, frames and level. It adds its frames to the voices of every note, and the panel says how many.

FOLLOW A moves B with A's position plus an offset: two tables travelling together. OWN parks it at its own POSITION, as constant XFades with no FUN at all. ENV gives it a sweep of its own: ASR1 in Norm mode, up in ATTACK and back in DECAY, once a note, by DEPTH, which can be negative.

INTERVAL (±24 semitones), DETUNE (±50 cents), LEVEL and PAN are on the panel. Each chain has its own filter and level, but one filter section sets both.

Measured on the K2700: with A on ENV2 up in 2 s and B on ASR1, up in 0.5 s and back in 1 s, each did its own thing: B was already home when A was at 71 %.

TWO CHAINS, TWO SWEEPS, ONE NOTEeach position as measured on the K270000.510 s1 s2 s3 sOSC A: ENV2, up in 2 sOSC B: ASR1,up 0.5 s, back 1 s
OSC A on ENV2 and OSC B on ASR1, one note, each chain measured on its own waves.
OSC B, on OWN, a fifth above.

In the manual: OSC B

FILTER · AMP

A filter with character, and an amplifier

The filter sits after the cascade, on the sum of the waves. LP is two poles in the last layer; LP 24 takes a layer of its own. Two more controls take the sound towards the instruments that started all this.

FILTER · AMP.
ControlRangeOn the K2700
LP, HP, BPtwo poles2POLE LOWPASS, 2POLE HIPASS, BANDPASS, in the last layer
LP 24four poles4POLE MOGUE LP in a layer of its own, ALG 105
CUTOFF40 Hz to 18 kHzon the K2700's semitone grid, following KEY TRK
RESO0 to 24 dBon LP 24 mapped to −6 to +12 dB; on BP it narrows the band
FLT ENV±48 semitonesENV3 as Src1; or ENV2 with POS ENV
GRAIN24 Hzthe envelope in steps: Sample B on A clocked by LFO2
DIGITAL0 to 100 %QUANTIZE in every voice, before the filter
AMPattack to 10 s, decay to 30 s, release to 20 sAMPENV, User, every layer the same
VEL0 to 48 dBthe AMP's velocity tracking

GRAIN turns the filter's envelope into steps, as the slow control updates of the first instruments did. DIGITAL takes bits away, about one for every 12 %, in each voice on its own, so that notes of a chord do not cross. The numbers are in the section on filter layers below.

In the manual: the filter

In the manual: the amp

Effects

One insert chain and a hall

The insert is WAVEKRAFT FX, a USER chain that the pack carries. The reverb is a factory chain. Each part is switched and set by a CC that is one of the K2700's own controls, and the program stores where each one starts.

INSERT · WAVEKRAFT FX, A USER CHAIN5-BAND EQbass, mid, treble ±12 dBBUTTON 1 · onKNOBS 1, 2, 4 · gainsKNOB 3 · mid freqPRESENCEa 2-band enhancerBUTTON 2 · onDUAL CHORUS0.03 to 0.93 Hz, wet to 100 %BUTTON 7 · onSLIDER 7 · amountKNOB 7 · rateFLANGERa period of 12 to 1 beatsBUTTON 6 · onSLIDER 6 · amountKNOB 6 · periodPING-PONG DELAYright, then left, in timeBUTTON 8 · onSLIDER 8 · amountKNOB 8 · timePAD 1 · feedbackINSERT · WAVEKRAFT FX5-BAND EQbass, mid, treble ±12 dBBUTTON 1 · onKNOBS 1, 2, 4 · gainsKNOB 3 · mid freqPRESENCEa 2-band enhancerBUTTON 2 · onDUAL CHORUS0.03 to 0.93 Hz, wet to 100 %BUTTON 7 · onSLIDER 7 · amountKNOB 7 · rateFLANGERa period of 12 to 1 beatsBUTTON 6 · onSLIDER 6 · amountKNOB 6 · periodPING-PONG DELAYright, then left, in timeBUTTON 8 · onSLIDER 8 · amountKNOB 8 · timePAD 1 · feedback
WAVEKRAFT FX, each part with the K2700 controls that move it. The program stores them all as entry values, so a program opens as you left it, and you can play them live.
0 s10 s20 s30 s40 s50 s020406084RecitalHallAux (2627) on aux 2○ each point measured on the K270015 s at CC 66CC 9, the TIME knob's controller
The reverb's decay time against CC 9, measured on the K2700. WAVEKRAFT's TIME knob works in seconds and sends the CC that gives them.

WAVEKRAFT FX starts from a factory chain, with two changes. The Wet/Dry of the chorus reaches 100 % on CC 26, where the factory chain stops at 50 %. And its two LFOs are 8 and 6.5 cents deep, not 20 and 15: so deep and so wet, every held note beat against its own dry sound.

On by default: the chorus at 80 % wet and 0.10 Hz.

The reverb is RecitalHallAux on aux 2. As in the factory's programs, slider 9 sets how much, button 9 switches it, and knob 9 sets the time: the send is 100 % scaled by the mod Sld9&Sw9, the amount being the entry value of CC 28, labelled Reverb Amount. The panel's REVERB knob is that CC, in real time.

The FX page. ◄ FX and FX ► pick the part, E1 to E3 set it, and the bottom line names the K2700 control.

In the manual: the effects

410 programs

Three banks, three ways of using a table

WAVEKRAFT keeps no presets of its own: the programs live on your K2700. They come as .K27 files, you load them with FILE > LOAD, and SCAN finds them.

WAVEKRAFT

100 programs on the K2700's ROM alone, with no samples to load. Pads that move once or very slowly over clean passages, and classic sounds that set their timbre at the strike and hold it.

WAVEKRAFT 2

100 more on the ROM, with more motion: tides, drifts, breathing, twin tables and slow scores that you hear from the first seconds of a chord.

WAVEKRAFT WAVES

210 simple sounds on the pack's 740 waves: bells, glass, mallets, digital keys, soft pads, voices, organs. Slow chorus and moderate reverb on all of them.

  • WAVEKRAFT100 programs721113
  • WAVEKRAFT 2100 programs4537754
  • WAVEKRAFT WAVES210 programs9915172
EnvelopeLFOScoreRandomVelocityWheel, pressure, sliderHeld on a wave
What moves the position, program by program, in each bank.
CategoryWAVEKRAFTWAVEKRAFT 2WAVEKRAFT WAVES
Pads182226
Strings10814
Choirs, voices6614
Electric pianos, keys121020
Bells, mallets8838
Glass14
Plucks6814
Organs8612
Brass, reeds6612
Winds, flutes448
Basses10816
Leads6612
Sequences34
Textures, atmospheres3410

In the manual: programs

Part four

Building it on a Kurzweil

VAST has no wavetable oscillator. Here is how to make one from what it has, step by step, down to the numbers in every FUN: the same program WAVEKRAFT writes, explained well enough to write it by hand.

The plan

What a wavetable needs, and what VAST gives you

A wavetable oscillator needs frames, a continuous position, a coherent blend between neighbours and something to move it. VAST has no such block, but it has layers that can be chained, and wiring algorithms that crossfade a layer's own keymap with the layer before it.

What a wavetable needsWhat it is on the K2700The limit
Framesone layer per frame, on a keymap with a stored cycle at each root2 to 16; a voice a note each
A blend between neighboursthe XFADE block in ALG 103 and ALG 123: the chain so far on input A, the layer's own keymap on Blinear, as measured
A positionany control source, read by ramps made of FUNs in each layer4 FUNs a layer
Frames for every pitcha keymap with a root in each octavea root rises one octave at most
Motionthe layer's own ENV2, LFO1 and ASRs, the CC sequencer, wheel, pressure, benderthe same in every layer
THE POSITIONONE LAYER PER FRAME, IN A CASCADEAFTER THE CHAINSOURCELIVE: wheel, pressure,bender or CC 20ENV: ENV2LFO: LFO1SCORE: CC sequencerRANDOM: per noteor the key, the velocityLAYER 1 · ALG 1frame 1AMP −96 dBonly feeds the nextlayer: not heardLAYER 2 · ALG 103F1 GAIN: its trimF2 XFADE: chain, frame 2Alt Input: layer 1AMP −96 dBLAYER 3 · ALG 103F1 GAIN: its trimF2 XFADE: chain, frame 3Alt Input: layer 2AMP −96 dBLAST LAYER · ALG 123F1 GAIN, F2 XFADE: frame NF3–F4: the filterAMP: the level, velocityAMPENV and pan…AltAltFUNSmin(s, t+w) · diode(x−t)b/(1−a): the rampFUNSmin(s, t+w) · diode(x−t)b/(1−a): the rampFUNSmin(s, t+w) · diode(x−t)b/(1−a): the rampWAVEKRAFT FXthe insert: EQ, presence,chorus, flanger, delayREVERBaux 2 · 2627K2700 OUTOSC Bthe same chain again after A's: 2, 4 or 8frames, its own level and filterLP 24one more layer a chain, ALG 105: a 4POLEMOGUE LPOWN WAVES (WKX)one more layer a chain, ALG 6 or 5: thefundamental, beside the cascadeTHE POSITIONwheel, pressure, bender, CC 20ENV2, LFO1, CC sequencerrandom per note, key, velocityLAYER 1 · ALG 1frame 1, AMP −96 dB: not heardAlt InputLAYER 2 · ALG 103XFADE (chain, frame 2)ramp: 3 FUNs, AMP −96 dBAlt InputLAYER 3 · ALG 103XFADE (chain, frame 3)ramp: 3 FUNs, AMP −96 dB… layer by layerLAST LAYER · ALG 123XFADE (chain, frame N)ramp, filter, AMP, AMPENV, panWAVEKRAFT FXEQ, presence, chorus, flanger, delayREVERB · aux 2 · 2627OSC Bthe same chain again after A'sLP 24one more layer a chain, ALG 105OWN WAVESa layer for the fundamental, ALG 6 or 5
The program WAVEKRAFT writes. Blue: where the position comes from, and the ramps. Each layer's XFADE takes the chain so far and its own frame; only the last layer is heard. Dashed: what can be added, and what it costs.

Only the last layer is heard

Every layer before it has its AMP at −96 dB and feeds the next through Alt Input. The last one has the AMP, the AMPENV and the pan for the whole chain.

Every layer reads the same

ENV2, ENV3, LFO1 and ASR2 are written the same way into every layer, and they all start with the note, so the ramps all read one position.

A program like any other

It opens, plays and can be edited on the K2700's own panel like a factory program. The editor builds it and sends it; from then on the K2700 does all of it, with no computer attached.

Step 1

Find the waves

A frame is a layer playing a keymap in which every root is one cycle of the same wave. The ROM has many, and you can load your own.

In the ROM. Look for keymaps that hold a single cycle at every root: Sine Wave, Partials 1 2 3, Sawtooth Wave, Square Wave and their families. Inside a family the roots change on the same keys, so two keymaps stay in step across the keyboard. A long loop that evolves by itself is not a single cycle and will not blend.

Try every passage. Set up a morph between two candidates, hold it half way and play C2, C3 and C5. If a strong harmonic falls more than 9 dB below a clean crossfade, or the level falls more than 3.5 dB, the passage will hollow out when crossed slowly: keep it for attacks, or pick another wave. That is how WAVEKRAFT's 17 ROM tables came out of 110 candidate waves.

Or make your own. One cycle per root and a root in every octave, since a sample plays at most one octave above its root. Eight roots from F#0 to F#7 cover the keyboard, as in the table under aliasing. Keep all the waves at one RMS level and load them as keymaps in a .K27, which is what WAVEKRAFT's pack is.

Level them. Each frame's level is set where it enters the chain, in F1 GAIN of its own layer, as the difference from the frame before.

Step 2

Each layer crossfades everything before it with its own wave

Two frames at most sound at any position. That follows from one block, the XFADE, and from where each layer's ramp starts and stops.

The XFADE, as measured on the K2700: 100 % plays input A, the chain; 0 % plays input B, the layer's own keymap; 50 % plays both, each at −6 dB; it is linear in between, and a value pushed below 0 holds at B. Its Pad is set to 0 in every layer.

A ramp to each layer. A layer's XFade rests at 100 %, the chain passes through, until the position reaches that layer's threshold. It then falls to 0 over one passage, when only its own frame is left. By then the next layer's ramp is starting. Move the position below and see each layer take over.

Frames
Ramps
    Layer3

      The compiler's arithmetic for one program: the position as CC 20, each frame's XFade and its share of what comes out, and the FUNs of the layer you pick. THE OBVIOUS RAMP is the simple version, and the next section shows why it fails.
      LayerALGBlocksAMP
      1ALG 1none: the keymap only−96 dB
      2 to N − 1ALG 103F1 GAIN, F2 XFADE; Alt Input from the layer before−96 dB
      N, the lastALG 123F1 GAIN, F2 XFADE, then the 2-block filter or the QUANTIZE of DIGITALthe oscillator's level, velocity
      the filter, if it has a layerALG 105 or ALG 1064POLE MOGUE LP, or a 2-block filter after DIGITAL; on the last frame's keymap, which it does not playthe oscillator's level, velocity
      the own waves' fundamentalALG 6, or ALG 5 with LP 24the sine WKX SINE, with the chain's filtera line in dB over the position
      SHAPE, aloneALG 7F1 SHAPER or WRAP, the filter in F2–F3the level

      F1 GAIN carries the difference between the levels of two neighbouring frames, the panel's trims, so a frame's level is set where it enters the chain.

      00.20.40.60.812 frames0.98 apartlast at 0.984 frames0.32 apartlast at 0.968 frames0.14 apartlast at 0.9816 frames0.06 apartlast at 0.9000.20.40.60.812 frames0.98 apart · last at 0.984 frames0.32 apart · last at 0.968 frames0.14 apart · last at 0.9816 frames0.06 apart · last at 0.90
      Where the frames sit, as the compiler picks them: the widest spacing whose thresholds are all valid FUN constants on a 0.02 grid. Eight frames are 0.14 apart and end at 0.98, sixteen are 0.06 apart and end at 0.90.
      Step 3

      A FUN does not stop at 1

      The obvious ramp takes the threshold off the position in one FUN and multiplies by the slope in the next. On a K2700 it comes out as a sequence of waves in the wrong order, because of one thing FUNs do.

      b/(1−a) WITH a = 0.5, ON CC 20as a clamp would give it, and as the K2700 plays it−1−0.500.5103264961271.15 → about −0.85dashed: a clampCC 20
      b/(1−a) on the K2700: a = 0.5, CC 20 from 0 to 127. Up to CC 64 it does what it should. Past it, the output does not hold at 1: it wraps round.

      Measured on b/(1−a), the FUN that gives a ramp its slope. With 1.15 asked of it the output came back as about −0.85. Adding a min() afterwards does not help, since by then it has already wrapped.

      With the obvious ramp two things go wrong at once. Before a layer's turn, a−b goes negative and the XFade goes past 100 %, so its frame comes in early. After it, the slope passes 1, wraps, and the frame before comes back. At position 0, where only the first wave should sound, all four are heard.

      The cure is to keep every FUN inside 0 to 1. The source is capped first, the threshold is taken off with a floor at 0, and only then is the slope applied. Amount and offset are folded into the constants t and w, so they use no FUN.

      On the K2700The obvious rampThe safe ramp
      Position at 0: only the first waveall four waves: harmonic 3 at −15 dB, harmonics 5 to 11 at −21 dB, against the sineonly the sine, the rest below −120 dB
      ENV2 over 20 s, 4 wavesharmonics coming and going in jumps of 8 to 22 dBharmonics rising and falling in order, 0.1 dB every 50 ms
      1

      The first layer

      ALG 1, no XFADE: frame 1 enters the chain. AMP −96 dB, so it is only heard through the next layer.

      2

      Every layer after it

      • FUN1 = min(a,b)a = the source, b = t + w= x
      • FUN2 = diode(a−b)a = FUN1, b = t= y
      • FUN3 = b/(1−a)a = 1 − w, b = FUN2= r

      XFADE at 100 %, Src1 FUN3, depth −100 %, Pad 0.

      P

      In PPG mode

      • FUN1–3 = the same= r
      • FUN4 = Quantize B to Aa = 0.88, b = FUN3= 8 levels

      XFADE at 100 %, Src1 FUN4, depth −100 %.

      L

      The last frame

      • FUN1–3 = the sameor FUN4= r

      ALG 123: F1 GAIN, F2 XFADE, and in F3–F4 the filter, or the QUANTIZE of DIGITAL.

      Each layer's FUNs. t is where its passage begins and w is how wide it is, in the units of the source. The constants lie on a grid of 0.02, so that a READ gives them back unchanged.
      The budget

      Four FUNs a layer

      A ramp takes three of a layer's four FUNs, so one is left. It can go to the PPG mode's Quantize, or to whatever a source needs before the ramp: the lowpass of a smoothed SCORE, the held value of RANDOM, a 1−s for a negative AMOUNT, or ENV2 × ASR2 for a release after a decay. One of those, and only one. The compiler counts them, and what would need a fifth is refused with NOT ON THE K2700. Global FUNs do not help, since with Globals on a layer keeps only two of its own.

      • FUN1FUN2FUN3FUN4
      • LIVE, ENV or LFO, in SMOOTH or STEPrampramprampfree3 of 4
      • In PPG moderampramprampquant4 of 4
      • SCORE, smoothedsourceramprampramp4 of 4
      • RANDOMsourceramprampramp4 of 4
      • A negative AMOUNTsourceramprampramp4 of 4
      • RELEASE on an envelope with a decaysourceramprampramp4 of 4
      • RANDOM or a negative AMOUNT in PPGsourceramprampramp5 of 4 · NOT ON THE K2700
      The FUNs of a layer in each case. In PPG mode with RANDOM or a negative AMOUNT the panel falls back to STEP.
      Step 4

      Two waves on the K2700's own panel

      You do not need WAVEKRAFT to try this. A morph between two waves takes two layers and three FUNs, and every field is on the front panel.

      Start from any simple program in PROGRAM, then EDIT. Layer 1 plays the first wave and is never heard directly. Layer 2 plays the second and crossfades it with layer 1. CHANNEL/LAYER changes layer and the soft button NEW LYR adds one.

      LayerPageFieldValue
      1KEYMAPKeymap 1Sine Wave
      1ALGAlgorithm1
      1DSP CTLAMP Adjust−96 dB: it is heard only through layer 2
      2KEYMAPKeymap 1Partials 1 2 3
      2ALGAlgorithm123
      2ALGAlt InputLayer 1
      2ALGF2 and F3XFADE and 2POLE LOWPASS
      2DSP CTLXFade Adjust and Pad100 % and 0
      2DSP MODXFade Src1FUN3, depth −100 %
      2LFO+FUN1min(a,b), a = MIDI20, b = 0.98
      2LFO+FUN2diode(a-b), a = FUN1, b = 0.00
      2LFO+FUN3b/(1-a), a = 0.02, b = FUN2
      2DSP CTLAMP Adjust−6 dB
      allPARAMSa row for MIDI20label it WT Position: a program only hears a CC that has a label

      Move CC 20 from 0 to 127 and the sine grows into a wave of three harmonics. Put ENV2 in FUN1's a in place of MIDI20, and the same two layers are an envelope sweep.

      N frames

      More waves

      Each new frame is one more layer, each taking the layer before it as its Alt Input: ALG 103 in the middle and ALG 123 only on the last. Every ramp has the same three FUNs and only three numbers change. FUN1 b is where the ramp ends, FUN2 b is where it starts, and FUN3 a is one minus its width.

      LayerKeymapALGFUN1 bFUN2 bFUN3 a
      1Sine Wave1
      2Partials 1 2 31030.320.000.68
      3Partials 2 3 41030.640.320.68
      4Partials 3 41230.960.640.68

      FUN constants come on a grid: steps of 0.01 up to 0.10, of 0.02 up to 0.90, and of 0.01 up to 0.99. That is why eight frames are 0.14 apart and end at 0.98.

      Part of a table. A motion rarely crosses the whole table. To let the source reach only from place s to place s + A, divide: a ramp that starts at t and is w wide becomes (t − s) / A and w / A. With four waves, s = 0.16 and A = 0.48, layer 2 has FUN1 b = 0.32, FUN2 b = −0.34 and FUN3 a = 0.34, and layer 3 has 0.98, 0.32 and 0.34. Layer 4 is out of reach, so its XFade stays at 100 % and it uses no FUN at all.

      Step 5

      Plug in the motion

      The position is one field: the a of FUN1. Write the same thing in every layer. Each layer starts with the note, so they all read one position.

      GestureWhat goes inWhere it is set
      Wheel, pressure, bender, sliderMWheel, Press, AbsPwl, MIDI20the source itself; a CC also needs its PARAMS label
      ONCE, BLOOM, FADEENV2ENV2 page: Attack and Decay, with the level that lands on a wave, Loop Off
      TIDEENV2the same, with Loop Seg1Bid
      DRIFT, BREATHLFO1LFO+ page: +Sine or +Triangle, at the Rate
      Velocity, keyAttVel, KeyNumthe source itself
      RANDOMFUN1 = Sample B on A, a = Note St, b = GRand2the ramp moves up to FUN2, FUN3 and FUN4
      SCOREFUN1 = lowpass(f=a,b), a = 0.14, b = MIDI20CC SEQ page: a lane on MIDI20 with 16 User steps; the ramp moves up to FUN2, FUN3 and FUN4
      TWINthe same source in a second chain of layersthe second chain has its own t and w

      The ramp takes three of the four FUNs of a layer, so a source can use only one more. Envelopes and LFOs are written the same way in every layer, because each layer's ENV2 and LFO1 are its own.

      Step 6

      Bringing the position back when the key goes up

      In a program of this kind the K2700 does not run the release of ENV2: the position would stay where the key-up found it. WAVEKRAFT's RELEASE knob uses an ASR instead.

      When the position's envelope only rises, it is written as ASR2 in Hold mode on Note St: the ASR's attack is the envelope's and its release is the knob's, with no FUN at all. With a decay or a loop it is ENV2 × ASR2 in FUN1, and the filter can follow it. That FUN is the spare one, so PPG mode does not combine with it.

      Measured on the K2700: with an ASR release of 1 s the position was still at 90 % after 0.18 s and down to 10 % after 0.98 s; it starts to answer 0.1 to 0.2 s after the key goes up. In PPG mode it goes back down through its steps.

      Step 7

      The layers of a cascade do not arrive together

      Measured on the K2700: the layers of a XFADE cascade reach each other a few samples apart, 7 to 37 at 48 kHz, in steps of about 7.5, and the figure changes from note to note. It happens with ROM waves and with samples alike, and no fixed offset can correct it.

      Played alone, a wave does not show it. Half way through a passage, anything the two waves share goes through a comb filter: a harmonic can fall by 8 to 10 dB on one note and not on the next. More frames do not help: the more alike two neighbours are, the more they have in common, and the deeper the comb.

      The answer is to have them share nothing the comb can reach. Above about 450 Hz one wave holds harmonics 1, 2, 5, 6, 9, 10… and the next 3, 4, 7, 8, 11, 12…; each harmonic is in only one of the two, and a delay has nothing to cancel. Those that leave are given back in level, × √2. The fundamental would cancel high on the keyboard, where it is nearly everything, so it plays in a layer of its own beside the cascade (WKX SINE): one voice more a note, and its level follows the position as a line in dB fitted to the waves.

      Waves
      Note

      Two layers a few samples apart, in the middle of a passage. Each bar is a harmonic against its level alone. The arithmetic of the comb and of the weave.
      WAVE 4WAVE 5OWN LAYER14812162024harmonic (above about 450 Hz)WAVE 4WAVE 5OWN LAYER14812162024harmonic (above about 450 Hz)
      How the own waves (WKX) are woven: two neighbours and the layer of the fundamental. An illustration: the real heights are each wave's own.
      On the K2700NoteWorst holeLevel drop
      VOWEL M, wave 4 to 5C31.0 dB1.0 dB
      FM 1-1, wave 6 to 7C30.9 dB1.7 dB
      FILTER, wave 3 to 4C30.6 dB1.3 dB
      VOWEL M, wave 4 to 5C50.9 dB0.9 dB
      FM 1-1, wave 6 to 7C51.0 dB1.8 dB
      VOWEL M, wave 4 to 5C60.9 dB0.3 dB

      Each row is 5 notes half way through a passage, every one within the limits used here: no hole above 9 dB on a strong harmonic and no level drop above 3 dB.

      Two kinds of wave for two jobs. Woven waves (WKX) are made for travelling: neighbours alternate in weight, every note costs one voice more, and no passage hollows out. The 640 WK waves are whole, fundamental included, and made to be held still or crossed quickly: each plays alone and sounds like itself, which is why the pack's programs rest on them.

      Step 8

      The last layer sets a gain on the whole chain

      A four-pole filter takes four blocks and the XFADE takes one of the same layer's, so LP 24 goes in a layer of its own after the last frame. That layer has to be put on the right keymap, for a reason that applies to any cascade.

      LP 24 is a 4POLE MOGUE LP in ALG 105. The panel's RESO (0 to 24 dB) is mapped to this filter's own range, −6 to +12 dB. Compared on the K2700 with a W/SEP four-pole, MOGUE keeps a more gradual knee from the cutoff, like a ladder, where W/SEP is flat to the cutoff and falls abruptly. So MOGUE it is.

      On the K2700, saw in C2, cutoff 523 HzSlope above the cutoffDown 6 dB atPeak over the passband
      2 poles−12.4 dB/octave785 Hz+0.9 dB
      MOGUE, RESO 0 (−6 dB)−20.9 dB/octave523 Hznone
      W/SEP, 0 dB−23.1 dB/octave654 Hz+1.2 dB
      MOGUE, RESO 16 (+6 dB)−21.7 dB/octave719 Hz+6.5 dB at 458 Hz
      W/SEP, +12 dB−23.0 dB/octave719 Hz+12.0 dB at 523 Hz

      A fact about any cascade on the K2700. With the filter layer on the keymap Silence, its level against the 2 poles came out different from one table to the next: it did not depend on the cutoff or on the number of waves, only on which wave came last. The last layer of a cascade applies to the whole chain a gain that goes with its keymap, whether it plays it or not. So the filter's layer now sits on the last frame's keymap, which it never plays, and no compensating gain is written anywhere.

      Filter in its own layer, on the last frame's keymap, against the 2 polesDifference
      Saw and triangle, 2 waves, LP 240.0 dB
      ROM ANALOG, 2, 4 and 8 waves, LP 240.0 dB
      ROM ANALOG, 4 waves, 2 poles after DIGITAL0.0 dB
      Own waves, 2, 4 and 8 waves, LP 240.0 dB
      Own waves, 8 waves, 2 poles after DIGITAL0.0 dB
      As measured

      GRAIN and DIGITAL

      THE CUTOFF, UP 5 OCTAVES IN 1 S, THREE WAYSan illustration from the measured steps: 42 ms and 100 ms0123450 s0.25 s0.5 s0.75 s1 sGRAIN 24 HzGRAIN 10 Hzno grain
      DIGITAL AGAINST BITSa sine in C3, measured on the K2700024681010254055708510097.76.55.242.51.6DIGITAL, %
      Left: the filter's sweep with no grain and with GRAIN, drawn from the measured steps. Right: DIGITAL against the bits it leaves, as measured on a sine in C3.

      GRAIN catches the filter's envelope with a FUN Sample B on A, clocked by LFO2 as a +Square at 24 Hz, the fastest a K2700 LFO goes and close to the 26 Hz of the original control updates. Measured: a step every 42 ms, each softened by about 20 ms, which is the K2700's own smoothing. At 10 Hz the steps are sharp; at 24 Hz the cutoff is moving for half the time, so the grain is softer. It needs a free FUN: with LP 24 there is always one, and with two poles in PPG mode there is none, so the panel asks for LP 24.

      DIGITAL is the QUANTIZE block, voice by voice, after the waves and before the filter, as the original's converters came before its filter. It costs the filter's place, so a 2-block filter moves to a layer of its own, ALG 106, one voice more a chain. Measured on a sine: 9 bits at 10 %, 7.7 at 25 %, 1.6 at 100 %; the level barely moves, 0 dB up to 55 %. Two notes a tritone apart at 70 % give cross-products 18 to 36 dB under their own harmonics, so a chord does not turn to mush, which is what a bit-reduction in the effects would do.

      Step 9

      N voices a note leaves 256 ÷ N notes

      Every layer plays one voice for every note, even the layers you do not hear. A K2700 has 256 voices, so the number of frames is a choice between richness and polyphony.

      • 2 frames2 voices128 notes
      • 4 frames4 voices64 notes
      • 8 frames8 voices32 notes
      • 16 frames16 voices16 notes
      • 8 + OSC B on 412 voices21 notes
      • 8 with LP 249 voices28 notes
      • 8 + OSC B on 4, LP 2414 voices18 notes
      • 8 own waves (WKX)9 voices28 notes
      • 4 + 4 own waves, LP 2412 voices21 notes
      • 2 + 2 frames, typical of the pack4 voices64 notes
      • SHAPE1 voice256 notes
      Voices a note and the notes they leave of 256, in typical patches. The bar is on a scale of octaves. Long releases keep their voices, so a pad plays fewer notes than the figure.

      The display shows this all the time, in the line under the position: 8 VOICES/NOTE · 32 NOTES. Most of the programs in the pack use two waves an oscillator, which is why they stay playable as chords.

      In the manual: voices and notes

      A variation

      Another way to travel: eight levels across a passage

      The PPG mode is the SMOOTH ramp with a fourth FUN after it. Quantize B to A with a = 0.88 turns the ramp from 0 to 1 into eight levels, so N frames give 7 × (N − 1) + 1 places.

      ONE PASSAGE, THROUGH QUANTIZE B TO Aa = 0.88: 8 levels, each measured on the K270000.1430.2860.4290.5720.7140.8571the ramp, 0 to 1
      A passage through the Quantize. The levels on the left are the ones measured on the K2700.

      Measured with a full layer and 3 waves: 15 places, always rising, with no wrapping and no wave coming back. The steps are nearly equal; the top level arrives a little early, so each key wave lasts about one and a half times as long as a step in between.

      A jump is not instantaneous. It takes 10 to 13 ms on the K2700, in 3 ticks of about 6 ms. When the jump is made by an LFO edge the times are 4.8 ms one way and 21 ms the other.

      On the original instrument the jump happens from one sample to the next. Here each is a small mix of two neighbouring levels: very short, and very close to each other, since each step is 1/7 of a passage.

      Frames24581016
      Places822295064106
      Voices a note24581016
      WAVEKRAFT WAVES.K27

      One file, and everything is found by name

      The waves, the programs and the effect chain are in one .K27. Loading a file onto the K2700 gives every object an ID the K2700 chooses, so WAVEKRAFT cannot rely on IDs. It looks for everything by name.

      740 waves

      640 whole WK waves in 50 families and 100 woven WKX waves: 12 tables of 8 and four classic shapes. Every wave has eight roots.

      210 programs and a chain

      210 programs in 14 categories and the chain WAVEKRAFT FX. About 24 MB in all.

      Made here

      Every wave is computed from a formula. No wave is taken from another instrument.

      How the waves are made. Every wave is a sum of sines, odd about its middle, rounded to 8 bits and held k samples a word at the low roots. Most families are fixed in harmonic number, like a stored wave; vowels and FILTER are redrawn at every root, so formants stay put in Hz across the keyboard. Classic shapes have positive signs, and the others a fixed sign pattern that lowers the peak, the same for a whole family, so neighbours do not oppose each other. All have the same RMS, −13.1 to −13.2 dBFS, so swapping a wave does not jump in level. 453 of the 640 are more than 3 dB (rms over harmonics 1 to 63) from every wave before them; the rest are the gentle steps within a family that make a passage continuous.

      1. LOAD

        The .K27 goes on with FILE > LOAD, FILL. Each object takes the first free USER ID, and references between them are kept.

      2. The chain

        At LINK on WAVEKRAFT looks for WAVEKRAFT FX by name: first at 5100, then in the USER chains from 4096 up until it is found or 512 IDs in a row are empty. If it is missing it asks before writing it, never over another object.

      3. The waves

        It goes through the USER keymaps and takes every one whose name starts with WK or WKX. A WK wave it does not know becomes a table of its own, named after it.

      4. The programs

        SCAN finds WAVEKRAFT's by the tag WKRAFT1 in their Info. Inside the app everything has fixed numbers; what goes to the K2700 carries the K2700's IDs, and READ maps them back.

      Renaming a wave on the K2700 makes WAVEKRAFT lose it. Without the pack on the K2700, the tables that need it show NOT LOADED and cannot be picked.

      In the manual: why the K2700 chooses the IDs

      What goes to the K2700

      One program holds all of it

      Everything WAVEKRAFT does ends up in one K2700 program, which the LINK sends and STORE writes.

      PartWhat WAVEKRAFT writes
      Programthe name (16 characters), category Synth, keyword wavekraft, bend ±2 semitones, poly; the panel's LEVEL as the program's Out Gain, −30 to +24 dB
      Layersas in the table above, across the whole keyboard, C0 to G9
      MotionENV2, ENV3, LFO1, ASR2 in every layer, ASR1 on OSC B's; SCORE: the CC sequencer and the program's tempo
      Effectsthe insert WAVEKRAFT FX; the reverb, factory chain 2627 on aux 2, send 100 %, mod Sld9&Sw9
      Entry valuesthe 18 controls of the insert, the reverb's time on CC 9, its amount on CC 28, its switch on CC 90, and CC 20 with LIVE or SCORE
      PARAMS labelsWT Position (LIVE and SCORE on CC 20), Reverb Amount, Reverb Enable
      InfoWKRAFT1 and the table's name: how SCAN knows it
      The K2700 page of the display: what the program will be, in the K2700's terms.

      Every patch the panel can make goes through one compiler, and READ brings it back the same, so what you see on the panel is what the K2700 holds.

      A patch that would not fit, with more than 32 layers or more than 4 FUNs in a layer, is refused on the display before anything is sent.

      The whole family

      One editor for the K2700, K2088, K2061 and PC4

      WAVEKRAFT's LINK recognises your keyboard by itself and shows its name. The programs, the waves and the effect chain are compatible with all four, and everything in Part four applies to them: the same layers, the same FUNs, the same ROM waves.

      K2700K2088, K2061PC4
      The LINK: every knob in real time, SCAN, READ and STOREyesyesyes
      The programs of the three banksyesyesyes
      The waves and the chain in the .K27 filesyesyesyes
      ALGs 1, 5, 6, 7, 103, 105, 106, 123yesyesyes
      The 111 ROM waves the panel offersyesyesyes
      Reverb chain 2627, and the chain WAVEKRAFT FX starts fromyesyesyes

      On a PC4, STORE writes each program in that keyboard's own format, and READ and SCAN bring it back, so the panel works the same on all four.

      Details

      What you need

      Platform
      A native macOS app; a web version runs free on this site (see Web).
      Keyboard
      A K2700, K2088, K2061 or PC4 on USB, for the LINK, SCAN, READ and STORE. The programs, the waves and the effect chain are compatible with all four. WAVEKRAFT makes no sound of its own: your keyboard plays and keeps every program.
      Waves
      17 tables need only the keyboard's ROM. The other 62 need the pack WAVEKRAFT WAVES.K27 loaded on it, about 24 MB of samples.
      Polyphony
      256 ÷ the voices a note: 2 frames, 128 notes; 8 frames, 32; 16 frames, 16. The panel always shows it.
      Web
      Chrome or Edge on a computer, your keyboard on USB (Web MIDI). No sound of its own. Safari and the iPad have no Web MIDI.
      Coming soon

      WAVEKRAFT

      Available soon.