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.
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.
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.
Wavetable synthesis
What a wavetable is, what goes into one, and how it differs from every other way of changing a sound.
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.
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.
frame 3 › 4 · 8 frames are 8 voices a note, 32 notes of 256
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.
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.
| Kind of table | How it is made | What you hear as it moves | Good for |
|---|---|---|---|
| Harmonic rise | harmonics added one by one, the sine first | brightness with no filter in it | pads, organs, soft leads |
| Filter sweep | one wave through a filter that opens wave by wave | a filter sweep frozen into waves; with resonance, a peak that climbs | basses, brass, plucks |
| Pulse width | a pulse getting narrower | harmonics that drop out and come back | strings, hollow leads |
| Hard sync | a wave restarted ever later in its cycle | a tearing, vocal peak that climbs | leads |
| FM | a sine modulated with a rising index | sidebands spreading out from the carrier | electric pianos, bells, metal |
| Formants | peaks at fixed frequencies that change from wave to wave | one voice changing vowel | choirs, talking pads |
| Sparse partials | a few narrow peaks far apart | struck metal or glass: held still, it is already a bell | bells, glass, mallets |
| Registers | sums of a few harmonics, like drawbars | stops being drawn | organs |
| Cycles of a sound | cycles taken at points along a sound that changes by itself | that sound's own evolution, at any speed you like | imitative and hybrid sounds |
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.
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.
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.
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.
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.
| Root | Samples a cycle | Stored as | Frequency | Harmonics (WK waves) |
|---|---|---|---|---|
| F#0 | 2048 | 128 words × 16 | 23.4 Hz | 63 |
| F#1 | 1024 | 128 words × 8 | 46.9 Hz | 63 |
| F#2 | 512 | 128 words × 4 | 93.8 Hz | 63 |
| F#3 | 256 | 128 words × 2 | 187.5 Hz | 63 |
| F#4 | 128 | 128 words | 375 Hz | 37 |
| F#5 | 64 | a shorter cycle | 750 Hz | 18 |
| F#6 | 32 | a shorter cycle | 1.5 kHz | 9 |
| F#7 | 16 | a shorter cycle | 3 kHz | 4 |
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.
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.
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.
| Technique | What moves | What you hear |
|---|---|---|
| Wavetable | a place along a row of related single cycles | one tone whose harmonics change continuously |
| Wave sequencing | a list of waves or samples, each held for its own time | a pattern of timbres, in rhythm |
| Vector | the balance of four sounds, by a joystick or envelopes | four fixed sounds in changing proportion |
| Filter sweep | a cutoff over a fixed wave | harmonics leaving from the top down, in order |
| Additive | each harmonic on its own envelope | anything, at the price of a great many controls |
| FM | the depth of one oscillator on another | harmonics 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.
Where it comes from
- 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.
- 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.
- 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.
- 1986
Prophet VS
Four waves mixed by a joystick: vector synthesis, a close neighbour of the wavetable.
- 1989
Waldorf Microwave
Digital wavetable oscillators with analog filters: the sound goes on after the PPG.
- 1990
Korg Wavestation
Wave sequencing: lists of waves, each with its own time, one after another.
- 2000s
Software
Hundreds of frames blended in real time, spectral morphing, and tables the user draws or imports.
- 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.
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.
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.
ENV looping both ways: up in 2 s, back in 4 s, and round again. TIDAL GLASS, HARMONIC RISE, waves 3 to 7.
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.
| Gesture | On the panel | How it goes | Best on | Program |
|---|---|---|---|---|
| ONCE | ENV, loop off | up in 8 to 20 s, then part of the way back | pads, textures | GLASS DAWN |
| TIDE | ENV, loop BID | a cycle of 8 to 20 s, uneven, back and forth for as long as the note lasts | pads, strings, textures | TIDAL GLASS |
| DRIFT | LFO | 0.06 to 0.12 Hz, over 2 to 9 waves | pads | WARM CURRENT |
| BREATH | LFO | 0.1 to 0.2 Hz, over one passage | strings, voices, organs, winds, leads | ANALOG SECTION |
| BLOOM | ENV | up in 1 to 5 s, then resting on a wave | swells, brass, leads | ANALOG SWELL |
| FADE | ENV | bright at the strike, falling from bright to dark over 1 to 5 s | keys, bells, plucks | DIGITAL PIANO |
| TWIN | OSC B, FOLLOW A | two tables travelling together, each at its own place | pads, keys | TWIN SPECTRA |
| SCORE | SCORE, smoothed | 16 steps of 1/4 to one bar, gliding from one to the next | slow sequences, pads | WANDERING PAD |
| RANDOM | RANDOM | a new place on every note, held | plucks, bells, basses | RANDOM 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.
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.
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.
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.
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.
| Sound | Tables | Position | Filter and amp | Programs |
|---|---|---|---|---|
| Pads | HARMONIC RISE, DRAWBARS, ADDITIVE | ENV up in 1.5 to 16 s and back in 3 to 20 s, or LFO 0.02 to 0.12 Hz | LP up to 9 kHz; attack 0.8 to 3 s; release 2.5 to 4 s | GLASS DAWN, TIDAL GLASS |
| Strings | SAW BRIGHTEN, ANALOG | ENV up in as much as 3 s and back in up to 6 s, or LFO 0.05 to 0.18 Hz | LP 2.5 to 7 kHz; attack up to 1.8 s; OSC B 4 to 8 cents away | STRING ENSEMBLE, ANALOG SECTION |
| Choirs, voices | VOWELS, CHOIR + PAD | ENV up in 1.5 to 8 s, or LFO 0.04 to 0.12 Hz | LP 6 to 8 kHz; attack 0.5 to 2 s; release 1.5 to 3 s | OOH CHOIR, VOWEL MORPH |
| Electric pianos, keys | KEYS, HARMONIC RISE | a bright strike and a fall of 0.24 to 5 s, or VEL → POS | LP up to 12 kHz; no attack; decay 1 to 6 s; velocity 10 to 20 dB | DIGITAL EP, EVOLVING EP |
| Bells, mallets | BELLS + GLASS, HARMONIC RISE | a fall of 0.3 to 4 s, RANDOM, or a slow LFO | LP 8 to 12 kHz; velocity 10 to 16 dB | MARIMBA, RANDOM CHIMES |
| Plucks | KEYS, HARMONIC RISE, ANALOG | a fall of 0.24 to 1.5 s | no attack; decay 1 to 3 s; no sustain; velocity 14 to 16 dB | KOTO, HARP GLOW |
| Organs | DRAWBARS, ORGAN WAVES | VEL → POS chooses the registration, or LFO 0.1 to 0.15 Hz | attack from 5 ms; full sustain; velocity 0 to 4 dB | DRAWBAR ORGAN, CHURCH BLOOM |
| Brass | SAW BRIGHTEN, ANALOG | ENV up in 0.04 to 2 s and back in 0.5 to 3 s | LP 2.5 to 6 kHz; attack 0.04 to 1.2 s; OSC B 5 or 6 cents away | SYNTH BRASS, BRASS BLOOM |
| Winds | HOLLOW ODD, ADDITIVE | ENV up in 0.04 to 0.1 s, or LFO 0.12 to 0.18 Hz | LP 4 to 7 kHz; attack 20 to 80 ms | CLARINET, REED MORPH |
| Basses | ANALOG, VS DIGITAL, HOLLOW ODD | a quick fall of 0.2 to 1 s, or VEL → POS | no attack; release 0.1 to 0.2 s; full sustain | DIGITAL BASS, TOUCH BASS |
| Leads | SAW BRIGHTEN, VOWELS, HOLLOW ODD | ENV up in 0.02 to 1.5 s, or CC 20 | LP 5 to 9 kHz; attack 10 to 20 ms | WAVE LEAD, SINGING LEAD |
| Sequences | HARMONIC RISE, DRAWBARS, KEYS | SCORE, 16 steps | LP 6 to 9 kHz; attack up to 0.3 s | RHYTHM PAD, SLOW STEPS |
| Textures | HARMONIC RISE, METAL FX | ENV up in 4 to 20 s and back in 6 to 25 s, or LFO 0.02 to 0.08 Hz | attack 2 to 3 s; release 4 to 6 s | METAL WIND, METAL TIDE |
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.
| Sound | Recipe | Programs |
|---|---|---|
| Bells | Immediate attack, no sustain, a long tail. The filter opens and closes with the note, and the reverb is large. | 24 |
| Glass | Thin brightness from high harmonics, with high-pass and band-pass filters. | 14 |
| Mallets | Short and round. Velocity opens the filter or changes the wave, and the reverb is small. | 14 |
| Digital keys | Digital electric pianos: a falling sustain, medium chorus, very responsive to velocity. | 20 |
| Soft pads | Slow attack, A and B detuned and spread across the stereo, a low filter, plenty of chorus and reverb. | 26 |
| Digital strings | A soft saw or a phased one, medium attack, wide chorus, a low-pass with a slow envelope. | 14 |
| Voices | Fixed formants. The wheel or a slow envelope changes the vowel, in a wide chorus. | 14 |
| Organs | No filter envelope, short attack, a steady tone, a flanger or chorus for movement. | 12 |
| Brass and reeds | The filter opens at the attack like a breath, with soft attacks. | 12 |
| Flutes | Almost a sine. Breath by velocity and pressure, in a room. | 8 |
| Basses | Centred, few effects, a filter with a short envelope. | 16 |
| Soft leads | Monophonic in spirit, the wheel or pressure on the wave, a discreet delay. | 12 |
| Plucks | A dry attack and a filter closing fast. The delay gives the space. | 14 |
| Atmospheres | Slow motion, always between two waves. | 10 |
The editor
Everything above on one panel, in real time on your K2700.
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.
| Section | What is there |
|---|---|
| OSC A | TABLE, FRAMES 2, 4, 8 or 16, SMOOTH, STEP or PPG, POSITION, KEY → POS, VEL → POS, LEVEL, TUNE, FINE, PAN |
| OSC B | ON, TABLE, FRAMES 2, 4 or 8, FOLLOW A, OWN or ENV, POSITION, INTERVAL, DETUNE, LEVEL, PAN; with ENV, ATTACK, DECAY and DEPTH |
| The display | 3D VIEW, WAVE, MOTION, TABLES, WAVES and K2700, plus the FX and programs pages; VALUE and FRAME beside it |
| FRAMES | the 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 · FX | MORPH, SCAN or SHAPE; PLAY, HOLD, VELOCITY and KEY; ◄ FX, FX ►, ON, BYPASS, and three knobs for the selected effect |
| MOTION · POSITION | LIVE, ENV, LFO, SCORE or RANDOM, AMOUNT and each one's own controls, and a line that says what that costs in voices |
| FILTER · AMP | LP, LP 24, HP, BP or OFF, POS ENV, GRAIN; CUTOFF, RESO, FLT ENV, KEY TRK, DIGITAL; ATTACK, DECAY, SUSTAIN, RELEASE, VEL |
| The top row | LEVEL, REVERB, TIME, FX; PROGRAM ◀ ▶; SCAN, READ, STORE, LINK |
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.
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 table | Waves | Where it travels cleanly |
|---|---|---|
| HARMONIC RISE | 10 | all (one slight at C5) |
| ADDITIVE | 5 | all (one slight at C5) |
| DRAWBARS | 4 | all |
| HOLLOW ODD | 4 | all, slight at C5 |
| EVEN SPECTRUM | 4 | from wave 2 to 4 |
| HIGH PARTIALS | 4 | none: held still |
| ANALOG | 8 | 1 to 2, and 6 to 8 |
| SAW BRIGHTEN | 5 | 2 to 4 |
| PULSE WIDTH | 4 | 2 to 3, slight |
| OB WAVES | 4 | 1 to 2 |
| ORGAN WAVES | 4 | 1 to 2 |
| VOWELS | 5 | 4 to 5 |
| CHOIR + PAD | 4 | 3 to 4, slight |
| BELLS + GLASS | 5 | 2 to 5 |
| KEYS | 7 | all |
| VS DIGITAL | 5 | slight in all |
| METAL FX | 7 | inharmonic, for textures |
| WK families | What they are |
|---|---|
| RESO LO, RESO HI, SOFT LP, NO FUND, FILTER | filters and resonance |
| SIN>SQR, SIN>SAW, PWM, PHASE SW, SYNC | from the sine to the classic shapes |
| VIBES, BELLS, BELL A, BELL B, GLASS, TINE, MALLET, CELESTE, HI PEAKS, HI COMB, HI FORCE, HI STRONG | bells and metal |
| VOWEL M, VOWEL F, FORM LOW, FORM HIGH, FORM HI2, FORM MIR, CHOIR | formants and voices |
| FM 1-1, FM 1-2, FM 1-3, FM 1-5, FM 1-7, EP DIG | FM spectra |
| ORGANS, REEDS, STRINGS, BRASS | organs, reeds, strings |
| RINGMID, RINGMID2, WILD, FUND+HI, ALT HI LO, ECHOES, ECHO COL, DREAM, COMB, CHIP | effects |
| SOFT | soft waves |
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.
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.
| Between two frames | Positions, 8 frames | What it needs | |
|---|---|---|---|
| SMOOTH | a straight crossfade of the two neighbours | continuous | 3 FUNs a layer |
| STEP | a jump at the half-way point, 0.02 of the position wide | 8 | 3 FUNs a layer |
| PPG | 8 levels across each passage: small jumps, not a blend | 50 (10 frames: 64) | 4 FUNs a layer, so one direct source only |
| SHAPE | not a table: a factory sine, saw or triangle through SHAPER or WRAP, its amount on the position | continuous | 1 voice, no ramps |
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.
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.
| On the panel | On the K2700 | |
|---|---|---|
| LIVE · MOD WHEEL | MWheel | |
| LIVE · SLIDER (CC 20) | MIDI20, with the label WT Position | the display follows a K2700 control on CC 20 |
| LIVE · PRESSURE | Press | |
| LIVE · BENDER | AbsPwl | either way counts as up |
| ENV | ENV2 | ATTACK, DECAY, SUSTAIN, LOOP OFF, FWD or BID, and RELEASE |
| LFO | LFO1 | RATE 0.02 to 8 Hz or SYNC to the tempo; +TRIANGLE, +SINE, +SAW, +SQUARE or RANDOM |
| SCORE | the CC sequencer on MIDI20 | 16 steps of 1/16 to 1 BAR, SMOOTH by a lowpass FUN |
| RANDOM | GRand2 held at the note's start | a new place on every note |
| VEL → POS, KEY → POS | AttVel, KeyNum | with 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.
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 %.
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.
| Control | Range | On the K2700 |
|---|---|---|
| LP, HP, BP | two poles | 2POLE LOWPASS, 2POLE HIPASS, BANDPASS, in the last layer |
| LP 24 | four poles | 4POLE MOGUE LP in a layer of its own, ALG 105 |
| CUTOFF | 40 Hz to 18 kHz | on the K2700's semitone grid, following KEY TRK |
| RESO | 0 to 24 dB | on LP 24 mapped to −6 to +12 dB; on BP it narrows the band |
| FLT ENV | ±48 semitones | ENV3 as Src1; or ENV2 with POS ENV |
| GRAIN | 24 Hz | the envelope in steps: Sample B on A clocked by LFO2 |
| DIGITAL | 0 to 100 % | QUANTIZE in every voice, before the filter |
| AMP | attack to 10 s, decay to 30 s, release to 20 s | AMPENV, User, every layer the same |
| VEL | 0 to 48 dB | the 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.
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.
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.
No presets: what is on your K2700 is what you edit
WAVEKRAFT holds no presets and saves nothing on the computer. It lists the programs it finds on the K2700, and it writes only to the K2700. A .K27 file carries the waves, the programs and the chain from one K2700 to the next.
LINK
Finds the effect chain and the waves on your K2700 by name, then the SCAN runs by itself. Every change on the panel compiles the program again, and only what changed goes into the edit buffer.
SCAN
Reads every USER program from 4096 to 8191, marks WAVEKRAFT's own by the tag in their Info, and puts them in the PROGRAM ◀ ▶ list.
READ
Opens a WAVEKRAFT program in the panel, field by field, with what you changed on the K2700's own panel too.
STORE
Pressed twice, writes the program to its own ID or to one chosen on the programs page: an empty one or a WAVEKRAFT one, never another app's. It reads it back to check, then selects it.
PLAY plays a chord on the K2700 from the panel, on the chosen KEY with its VELOCITY, and HOLD keeps it down: you can edit with both hands free.
While you are linked, if the K2700 goes to another program WAVEKRAFT stops editing it and says so, and LINK sends the program again. Closing the page or the app sends note offs, All Notes Off and All Sound Off.
What cannot be done is refused before it gets anywhere: a program that would need more than 32 layers or more than 4 FUNs in a layer shows NOT ON THE K2700 on the display.
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 programs
- WAVEKRAFT 2100 programs
- WAVEKRAFT WAVES210 programs
| Category | WAVEKRAFT | WAVEKRAFT 2 | WAVEKRAFT WAVES |
|---|---|---|---|
| Pads | 18 | 22 | 26 |
| Strings | 10 | 8 | 14 |
| Choirs, voices | 6 | 6 | 14 |
| Electric pianos, keys | 12 | 10 | 20 |
| Bells, mallets | 8 | 8 | 38 |
| Glass | 14 | ||
| Plucks | 6 | 8 | 14 |
| Organs | 8 | 6 | 12 |
| Brass, reeds | 6 | 6 | 12 |
| Winds, flutes | 4 | 4 | 8 |
| Basses | 10 | 8 | 16 |
| Leads | 6 | 6 | 12 |
| Sequences | 3 | 4 | |
| Textures, atmospheres | 3 | 4 | 10 |
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.
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 needs | What it is on the K2700 | The limit |
|---|---|---|
| Frames | one layer per frame, on a keymap with a stored cycle at each root | 2 to 16; a voice a note each |
| A blend between neighbours | the XFADE block in ALG 103 and ALG 123: the chain so far on input A, the layer's own keymap on B | linear, as measured |
| A position | any control source, read by ramps made of FUNs in each layer | 4 FUNs a layer |
| Frames for every pitch | a keymap with a root in each octave | a root rises one octave at most |
| Motion | the layer's own ENV2, LFO1 and ASRs, the CC sequencer, wheel, pressure, bender | the same in every layer |
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.
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.
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.
| Layer | ALG | Blocks | AMP |
|---|---|---|---|
| 1 | ALG 1 | none: the keymap only | −96 dB |
| 2 to N − 1 | ALG 103 | F1 GAIN, F2 XFADE; Alt Input from the layer before | −96 dB |
| N, the last | ALG 123 | F1 GAIN, F2 XFADE, then the 2-block filter or the QUANTIZE of DIGITAL | the oscillator's level, velocity |
| the filter, if it has a layer | ALG 105 or ALG 106 | 4POLE MOGUE LP, or a 2-block filter after DIGITAL; on the last frame's keymap, which it does not play | the oscillator's level, velocity |
| the own waves' fundamental | ALG 6, or ALG 5 with LP 24 | the sine WKX SINE, with the chain's filter | a line in dB over the position |
| SHAPE, alone | ALG 7 | F1 SHAPER or WRAP, the filter in F2–F3 | the 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.
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.
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 K2700 | The obvious ramp | The safe ramp |
|---|---|---|
| Position at 0: only the first wave | all four waves: harmonic 3 at −15 dB, harmonics 5 to 11 at −21 dB, against the sine | only the sine, the rest below −120 dB |
| ENV2 over 20 s, 4 waves | harmonics coming and going in jumps of 8 to 22 dB | harmonics rising and falling in order, 0.1 dB every 50 ms |
The first layer
ALG 1, no XFADE: frame 1 enters the chain. AMP −96 dB, so it is only heard through the next layer.
Every layer after it
FUN1 = min(a,b)a = the source, b = t + w= xFUN2 = diode(a−b)a = FUN1, b = t= yFUN3 = b/(1−a)a = 1 − w, b = FUN2= r
XFADE at 100 %, Src1 FUN3, depth −100 %, Pad 0.
In PPG mode
FUN1–3 = the same= rFUN4 = Quantize B to Aa = 0.88, b = FUN3= 8 levels
XFADE at 100 %, Src1 FUN4, depth −100 %.
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.
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
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.
| Layer | Page | Field | Value |
|---|---|---|---|
| 1 | KEYMAP | Keymap 1 | Sine Wave |
| 1 | ALG | Algorithm | 1 |
| 1 | DSP CTL | AMP Adjust | −96 dB: it is heard only through layer 2 |
| 2 | KEYMAP | Keymap 1 | Partials 1 2 3 |
| 2 | ALG | Algorithm | 123 |
| 2 | ALG | Alt Input | Layer 1 |
| 2 | ALG | F2 and F3 | XFADE and 2POLE LOWPASS |
| 2 | DSP CTL | XFade Adjust and Pad | 100 % and 0 |
| 2 | DSP MOD | XFade Src1 | FUN3, depth −100 % |
| 2 | LFO+ | FUN1 | min(a,b), a = MIDI20, b = 0.98 |
| 2 | LFO+ | FUN2 | diode(a-b), a = FUN1, b = 0.00 |
| 2 | LFO+ | FUN3 | b/(1-a), a = 0.02, b = FUN2 |
| 2 | DSP CTL | AMP Adjust | −6 dB |
| all | PARAMS | a row for MIDI20 | label 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.
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.
| Layer | Keymap | ALG | FUN1 b | FUN2 b | FUN3 a |
|---|---|---|---|---|---|
| 1 | Sine Wave | 1 | |||
| 2 | Partials 1 2 3 | 103 | 0.32 | 0.00 | 0.68 |
| 3 | Partials 2 3 4 | 103 | 0.64 | 0.32 | 0.68 |
| 4 | Partials 3 4 | 123 | 0.96 | 0.64 | 0.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.
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.
| Gesture | What goes in | Where it is set |
|---|---|---|
| Wheel, pressure, bender, slider | MWheel, Press, AbsPwl, MIDI20 | the source itself; a CC also needs its PARAMS label |
| ONCE, BLOOM, FADE | ENV2 | ENV2 page: Attack and Decay, with the level that lands on a wave, Loop Off |
| TIDE | ENV2 | the same, with Loop Seg1Bid |
| DRIFT, BREATH | LFO1 | LFO+ page: +Sine or +Triangle, at the Rate |
| Velocity, key | AttVel, KeyNum | the source itself |
| RANDOM | FUN1 = Sample B on A, a = Note St, b = GRand2 | the ramp moves up to FUN2, FUN3 and FUN4 |
| SCORE | FUN1 = lowpass(f=a,b), a = 0.14, b = MIDI20 | CC SEQ page: a lane on MIDI20 with 16 User steps; the ramp moves up to FUN2, FUN3 and FUN4 |
| TWIN | the same source in a second chain of layers | the 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.
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.
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.
| On the K2700 | Note | Worst hole | Level drop |
|---|---|---|---|
| VOWEL M, wave 4 to 5 | C3 | 1.0 dB | 1.0 dB |
| FM 1-1, wave 6 to 7 | C3 | 0.9 dB | 1.7 dB |
| FILTER, wave 3 to 4 | C3 | 0.6 dB | 1.3 dB |
| VOWEL M, wave 4 to 5 | C5 | 0.9 dB | 0.9 dB |
| FM 1-1, wave 6 to 7 | C5 | 1.0 dB | 1.8 dB |
| VOWEL M, wave 4 to 5 | C6 | 0.9 dB | 0.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.
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 Hz | Slope above the cutoff | Down 6 dB at | Peak over the passband |
|---|---|---|---|
| 2 poles | −12.4 dB/octave | 785 Hz | +0.9 dB |
| MOGUE, RESO 0 (−6 dB) | −20.9 dB/octave | 523 Hz | none |
| W/SEP, 0 dB | −23.1 dB/octave | 654 Hz | +1.2 dB |
| MOGUE, RESO 16 (+6 dB) | −21.7 dB/octave | 719 Hz | +6.5 dB at 458 Hz |
| W/SEP, +12 dB | −23.0 dB/octave | 719 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 poles | Difference |
|---|---|
| Saw and triangle, 2 waves, LP 24 | 0.0 dB |
| ROM ANALOG, 2, 4 and 8 waves, LP 24 | 0.0 dB |
| ROM ANALOG, 4 waves, 2 poles after DIGITAL | 0.0 dB |
| Own waves, 2, 4 and 8 waves, LP 24 | 0.0 dB |
| Own waves, 8 waves, 2 poles after DIGITAL | 0.0 dB |
GRAIN and DIGITAL
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.
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
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.
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.
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.
| Frames | 2 | 4 | 5 | 8 | 10 | 16 |
|---|---|---|---|---|---|---|
| Places | 8 | 22 | 29 | 50 | 64 | 106 |
| Voices a note | 2 | 4 | 5 | 8 | 10 | 16 |
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.
LOAD
The .K27 goes on with FILE > LOAD, FILL. Each object takes the first free USER ID, and references between them are kept.
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.
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.
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.
One program holds all of it
Everything WAVEKRAFT does ends up in one K2700 program, which the LINK sends and STORE writes.
| Part | What WAVEKRAFT writes |
|---|---|
| Program | the 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 |
| Layers | as in the table above, across the whole keyboard, C0 to G9 |
| Motion | ENV2, ENV3, LFO1, ASR2 in every layer, ASR1 on OSC B's; SCORE: the CC sequencer and the program's tempo |
| Effects | the insert WAVEKRAFT FX; the reverb, factory chain 2627 on aux 2, send 100 %, mod Sld9&Sw9 |
| Entry values | the 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 labels | WT Position (LIVE and SCORE on CC 20), Reverb Amount, Reverb Enable |
| Info | WKRAFT1 and the table's name: how SCAN knows it |
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.
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.
| K2700 | K2088, K2061 | PC4 | |
|---|---|---|---|
| The LINK: every knob in real time, SCAN, READ and STORE | yes | yes | yes |
| The programs of the three banks | yes | yes | yes |
| The waves and the chain in the .K27 files | yes | yes | yes |
| ALGs 1, 5, 6, 7, 103, 105, 106, 123 | yes | yes | yes |
| The 111 ROM waves the panel offers | yes | yes | yes |
| Reverb chain 2627, and the chain WAVEKRAFT FX starts from | yes | yes | yes |
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.
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.
WAVEKRAFT
Available soon.