Get the PD patch here. It’s simplified and permits manual control. It runs in PD Vanilla. The full album is here.

Here are 8 sawtooth oscillators gliding up and down in pitch in equal intervals. They start at unison and end in octaves, a tritone from the starting pitch. In between are a surprising number of audible consonances, even though the overall sound is generally very dissonant. To avoid extremes in pitch, each oscillator is actually a Shepard-Risset glissando that returns to the same pitch every two octaves.

The most frequently used model of consonance is harmonic concordance. For a simultaneity of multiple tones, consonance is heard when partials from one tone coincide with partials from another. For tones consisting of a harmonic series, this happens at integer ratios. For inharmonic tones, consonances occur at different intervals where the inharmonic partials coincide.

In the video you can see only a very small number of harmonics, but the effect is illustrated rather clearly. Consonances are audible when lines intersect and overlap. This isn’t the only way to represent it on a spectrogram. There’s a lot to explore by viewing it at different scales. It probably looks more interesting when zoomed out, but I think the video corresponds most closely to what’s actually audible.

Here the consonances occur both at small integer ratios, and because the same inteveral is stacked 8 times, also at roots of those ratios, up to the seventh root. The greatest consonances occur when fundamental frequencies (and consequently all harmonics) coincide at equal divisions of the octave, up to 7 EDO. At 8 EDO intervals (odd multiples of 150 cents), all tones are equally spaced and none overlap. In general, partials audibly coincide about every 2 cents.

Here’s a list of audibly consonant intervals. The columns represent the time where the interval occurs, the interval size in cents and the equivalent ratio. This isn’t a complete list; it includes only the relatively simple intervals. I made it by stepping through all possible intervals 0.1 cents at a time and noting the consonances. Then I found the ratios using an octave script. The output is edited somewhat.

00:00 0000.000 unison
00:25 0025.106 sixth root of 12/11
00:32 0032.075 fourth root of 14/13
00:32 0032.093 sixth root of 19/17
00:32 0032.985 cube root of 18/17
00:33 0033.001 fifth root of 11/10
00:33 0033.025 seventh root of 8/7
00:33 0033.985 sixth root of 9/8
00:36 0036.481 fifth root of 10/9
00:38 0038.512 fifth root of 19/17
00:38 0038.529 sixth root of 8/7
00:41 0041.251 fourth root of 11/10
00:42 0042.766 cube root of 14/13
00:44 0044.400 square root of 20/19
00:44 0044.478 sixth root of 7/6
00:45 0045.092 seventh root of 6/5
00:46 0046.191 cube root of 13/12
00:46 0046.235 fifth root of 8/7
00:50 0050.212 cube root of 12/11
00:52 0052.607 sixth root of 6/5
00:53 0053.374 fifth root of 7/6
00:55 0055.001 cube root of 11/10
00:55 0055.866 square root of 16/15
00:57 0057.756 cube root of 21/19
00:57 0057.777 seventh root of 24/19
00:57 0057.794 fourth root of 8/7
00:57 0057.842 fifth root of 13/11
01:00 0060.801 cube root of 10/9
01:03 0063.128 fifth root of 6/5
01:04 0064.386 sixth root of 5/4
01:06 0066.718 fourth root of 7/6
01:07 0067.970 cube root of 9/8
01:09 0069.286 square root of 13/12
01:11 0071.090 eighth root of 25/18
01:12 0072.514 sixth root of 9/7
01:15 0075.319 square root of 12/11
01:17 0077.058 cube root of 8/7
01:17 0077.186 eighth root of 10/7
01:18 0078.910 fourth root of 6/5
01:22 0082.502 square root of 11/10
01:23 0083.007 sixth root of 4/3
01:24 0084.467 21/20
01:24 0084.602 cube root of 22/19
01:26 0086.852 fourth root of 11/9
01:28 0088.801 20/19
01:28 0088.957 cube root of 7/6
01:29 0089.868 fourth root of 16/13
01:31 0091.202 square root of 10/9
01:33 0093.603 19/18
01:36 0096.578 fourth root of 5/4
01:39 0099.609 fifth root of 4/3
01:41 0101.955 square root of 9/8
01:45 0105.214 cube root of 6/5
01:48 0108.771 fourth root of 9/7
01:50 0110.254 cube root of 23/19
01:51 0111.591 fourth root of 22/17
01:51 0111.731 16/15
01:52 0112.043 cube root of 17/14
01:55 0115.587 square root of 8/7
01:56 0116.107 fourth root of 17/13
01:56 0116.993 sixth root of 3/2
02:04 0124.511 fourth root of 4/3
02:08 0128.697 eighth root of 29/16
02:13 0133.435 square root of 7/6
02:15 0135.614 sixth root of 8/5
02:18 0138.376 sixth root of 21/13
02:18 0138.404 seventh root of 7/4
02:18 0138.573 13/12
02:20 0140.391 fifth root of 3/2
02:27 0147.393 sixth root of 5/3
02:30 0150.000 one step in 8 EDO (all tones are equally spaced)
02:30 0150.637 12/11
02:30 0150.727 fifth root of 17/11
02:34 0154.372 fourth root of 10/7
02:37 0157.821 square root of 6/5
02:46 0166.015 cube root of 4/3
02:51 0171.429 one step in 7 EDO
02:55 0175.489 fourth root of 3/2
02:56 0176.872 fifth root of 5/3
02:56 0176.905 sixth root of 24/13
02:59 0179.736 square root of 16/13
03:02 0182.404 10/9
03:03 0183.728 fifth root of 17/10
03:06 0186.626 fifth root of 12/7
03:13 0193.157 square root of 5/4
03:15 0195.623 fourth root of 11/7
03:19 0199.218 fifth root of 16/9
03:20 0200.000 one step in 6 EDO
03:23 0203.422 fourth root of 8/5
03:23 0203.910 9/8
03:25 0205.829 cube root of 10/7
03:26 0206.999 fifth root of 20/11
03:28 0208.754 square root of 14/11
03:29 0209.873 fifth root of 11/6
03:32 0212.182 square root of 23/18
03:32 0212.206 cube root of 13/9
03:36 0216.687 17/15
03:37 0217.493 sixth root of 17/8
03:37 0217.542 square root of 9/7
03:41 0221.090 fourth root of 5/3
03:43 0223.095 sixth root of 13/6
03:43 0223.181 square root of 22/17
03:47 0227.107 square root of 13/10
03:51 0231.174 8/7
03:53 0233.985 cube root of 3/2
04:00 0240.000 one step in 5 EDO
04:02 0242.206 fourth root of 7/4
04:09 0249.022 square root of 4/3
04:10 0250.188 seventh root of 11/4
04:12 0252.607 sixth root of 12/5
04:13 0253.805 22/19
04:14 0254.972 cube root of 14/9
04:18 0258.688 seventh root of 37/13
04:18 0258.721 fifth root of 19/9
04:24 0264.344 square root of 19/14
04:24 0264.386 sixth root of 5/2
04:26 0266.871 7/6
04:28 0268.475 square root of 15/11
04:31 0271.229 cube root of 8/5
04:31 0271.708 seventh root of 3/1
04:33 0273.001 fifth root of 11/5
04:35 0275.659 square root of 11/8
04:35 0275.702 sixth root of 13/5
04:40 0280.176 cube root of 13/8
04:40 0280.782 fifth root of 9/4
04:43 0283.007 sixth root of 8/3
04:43 0283.025 fourth root of 25/13
04:44 0284.197 cube root of 18/11
04:49 0289.210 13/11
04:51 0291.256 square root of 7/5
04:54 0294.786 cube root of 5/3
05:00 0300.000 one step in 4 EDO
05:00 0300.004 seventh root of 37/11
05:01 0301.500 square root of 17/12
05:08 0308.744 square root of 10/7
05:11 0311.043 cube root of 12/7
05:15 0315.641 6/5
05:18 0318.309 square root of 13/9
05:22 0322.942 cube root of 7/4
05:24 0324.341 square root of 16/11
05:27 0327.017 fifth root of 18/7
05:32 0332.030 cube root of 16/9
05:32 0332.075 fourth root of 28/13
05:36 0336.130 17/14
05:39 0339.609 fifth root of 8/3
05:42 0342.857 two steps in 7 EDOs
05:44 0344.999 cube root of 20/11
05:45 0345.601 fourth root of 20/9
05:47 0347.390 fifth root of 30/11
05:47 0347.393 sixth root of 10/3
05:47 0347.408 11/9
05:50 0350.978 square root of 3/2
05:56 0356.502 fifth root of 14/5
05:57 0357.794 fourth root of 16/7
05:59 0359.472 16/13
06:03 0363.498 fifth root of 20/7
06:06 0366.718 fourth root of 7/3
06:07 0367.300 sixth root of 25/7
06:10 0370.400 cube root of 19/10
06:12 0372.893 square root of 20/13
06:16 0376.819 square root of 17/11
06:18 0378.910 fourth root of 12/5
06:20 0380.391 fifth root of 3/1
06:20 0380.436 cube root of 29/15
06:22 0382.458 square root of 14/9
06:26 0386.314 5/4
06:31 0391.246 square root of 11/7
06:36 0396.578 fourth root of 5/2
06:40 0400.000 one step in 3 EDO
06:44 0404.377 fourth root of 28/11
06:44 0404.442 24/19
06:46 0406.843 square root of 8/5
06:54 0414.006 seventh root of 16/3
06:57 0417.493 sixth root of 17/4
06:57 0417.508 14/11
06:57 0417.695 fourth root of 21/8
07:00 0420.264 square root of 13/8
07:04 0424.364 23/18
07:04 0424.511 fourth root of 8/3
07:13 0433.803 seventh root of 52/9
07:14 0434.985 cube root of 17/8
07:15 0435.084 9/7
07:22 0442.179 square root of 5/3
07:26 0446.191 cube root of 13/6
07:26 0446.363 22/17
07:26 0446.999 fifth root of 40/11
07:30 0450.000 three steps in 8 EDO
07:30 0450.212 cube root of 24/11
07:32 0452.607 sixth root of 24/5
07:34 0454.214 13/10
07:37 0457.901 sixth root of 44/9
07:39 0459.098 seventh root of 32/5
07:40 0460.801 cube root of 20/9
07:40 0460.816 fourth root of 29/10
07:44 0464.428 17/13
07:46 0466.565 square root of 12/7
07:47 0467.970 cube root of 9/4
07:50 0470.781 21/16
07:53 0473.098 square root of 19/11
07:55 0475.489 fourth root of 3/1
08:00 0480.000 two steps in 5 EDO
08:03 0483.007 sixth root of 16/3
08:04 0484.413 square root of 7/4
08:18 0498.045 4/3
08:25 0505.214 cube root of 12/5
08:33 0513.001 fifth root of 22/5
08:34 0514.286 three steps in 7 EDO
08:35 0515.803 cube root of 22/9
08:39 0519.824 cube root of 32/13
08:41 0521.090 fourth root of 10/3
08:44 0524.681 square root of 11/6
08:48 0528.687 19/14
08:48 0528.771 cube root of 5/2
08:50 0530.714 square root of 24/13
08:53 0533.282 fourth root of 24/7
09:00 0540.279 square root of 28/15
09:02 0542.206 fourth root of 7/2
09:03 0543.015 26/19
09:04 0544.134 square root of 15/8
09:05 0545.028 cube root of 18/7
09:11 0551.318 11/8
09:11 0551.405 cube root of 13/5
09:14 0554.399 fourth root of 18/5
09:19 0559.420 cube root of 29/11
09:23 0563.382 18/13
09:26 0566.015 cube root of 8/3
09:26 0566.050 square root of 25/13
09:29 0569.599 sixth root of 36/5
09:39 0579.609 fifth root of 16/3
09:42 0582.512 7/5
09:47 0587.794 cube root of 36/13
09:47 0587.807 fourth root of 35/9
09:54 0594.171 cube root of 14/5
10:00 0600.000 one step in 2 EDO
10:05 0605.829 cube root of 20/7
10:12 0612.206 cube root of 26/9
10:17 0617.488 10/7
10:30 0630.376 square root of 29/14
10:33 0633.985 cube root of 3/1
10:36 0636.498 fifth root of 44/7
10:36 0636.618 13/9
10:38 0638.478 square root of 23/11
10:45 0645.601 fourth root of 40/9
10:48 0648.682 16/11
10:55 0655.866 square root of 32/15
10:56 0656.985 19/13
10:57 0657.794 fourth root of 32/7
10:59 0659.721 square root of 15/7
11:09 0669.286 square root of 13/6
11:15 0675.222 cube root of 29/9
11:15 0675.319 square root of 24/11
11:18 0678.910 fourth root of 24/5
11:20 0680.176 cube root of 13/4
11:24 0684.197 cube root of 36/11
11:25 0685.714 four steps in 7 EDO
11:34 0694.786 cube root of 10/3
11:41 0701.955 3/2
11:55 0715.587 square root of 16/7
12:00 0720.000 three steps in 5 EDO
12:04 0724.511 fourth root of 16/3
12:13 0733.435 square root of 7/3
12:15 0735.572 26/17
12:19 0739.199 cube root of 18/5
12:20 0740.006 23/15
12:29 0749.788 cube root of 11/3
12:30 0750.000 five steps in 8 EDO
12:33 0753.001 fifth root of 44/5
12:33 0753.637 17/11
12:37 0757.821 square root of 12/5
12:44 0764.916 14/9
12:59 0779.736 square root of 32/13
13:02 0782.492 11/7
13:13 0793.157 square root of 5/2
13:15 0795.558 19/12
13:20 0800.000 two steps in 3 EDO
13:23 0803.400 seventh root of 103/4
13:33 0813.686 8/5
13:47 0827.107 square root of 13/5
13:50 0830.253 21/13
13:56 0836.502 fifth root of 56/5
14:00 0840.528 13/8
14:02 0842.206 fourth root of 7/1
14:09 0849.022 square root of 8/3
14:12 0852.592 18/11
14:14 0854.399 fourth root of 36/5
14:15 0855.001 cube root of 22/5
14:17 0857.143 five steps in 7 EDO
14:23 0863.870 28/17
14:35 0875.659 square root of 11/4
14:41 0881.691 square root of 36/13
14:44 0884.359 5/3
14:51 0891.256 square root of 14/5
14:56 0896.859 square root of 31/11
15:00 0900.000 three steps in 4 EDO
15:05 0905.214 cube root of 24/5
15:10 0910.790 22/13
15:15 0915.803 cube root of 44/9
15:24 0924.341 square root of 32/11
15:33 0933.129 12/7
15:46 0946.195 19/11
15:50 0950.978 square root of 3/1
15:57 0957.794 fourth root of 64/7
16:00 0960.000 four steps in 5 EDO
16:06 0966.015 cube root of 16/3
16:08 0968.826 7/4
16:27 0987.747 23/13
16:33 0993.001 fifth root of 88/5
16:36 0996.090 16/9
16:40 1000.000 five steps in 6 EDO
16:57 1017.596 9/5
17:00 1020.264 square root of 13/4
17:08 1028.571 six steps in 7 EDO
17:22 1042.179 square root of 10/3
17:29 1049.363 11/6
17:30 1050.000 seven steps in 8 EDO (all tones are equally spaced)
17:30 1050.013 square root of 37/11
17:41 1061.427 24/13
17:46 1066.565 square root of 24/7
18:04 1084.413 square root of 7/2
18:08 1088.269 15/8
18:28 1108.798 square root of 18/5
18:37 1117.498 square root of 40/11
18:44 1124.681 square root of 11/3
18:52 1132.100 25/13
18:59 1139.199 cube root of 36/5
19:04 1144.134 square root of 15/4
19:05 1145.036 31/16
20:00 1199.700 octave (slightly detuned)

One thing worth noting here is that many intervals are almost exactly equal divisions of other intervals. For example, the 11/9 neutral third (347.408 cents) is close to two equal divisions of 3/2 (350.978 cents), three equal divisions of 20/11 (344.999 cents), four equal divisions of 20/9 (345.601 cents), five equal divisions of 30/11 (347.390 cents) and six equal divisions of 10/3 (347.393 cents). This implies that interesting chords can be constructed by stacking these intervals.

Advertisements

Made in Pure Data, 2018.

Spotify link

I sampled the drum sounds from the Technics SX-KN800. Many of the sounds are similar to the ones in the AX7, but there are some additional sounds (inexplicably including a selection of bird sounds), and they’re also somewhat brighter because the KN800 uses a different sample playback engine. These should also include all the drum sounds used in the SX-K700, K500, KN600, KN400, KN200, and probably the related EX, EN, GX and GN organ models circa 1987-1991.

The drum sounds in the KN800 are panned in stereo, with certain sounds cycling between several different pan positions. I mixed all the sounds to mono. A few are sustained looping sounds, so you can loop and gate them to taste. I carefully filtered the sounds to reduce noise, although some still remains. There are 3 different drum kits for the basic sounds (bass drum, snare and toms). A few of these are duplicates, so I put them in a separate folder.

The KN800 was the successor to the K700, which was the first fully sample based home keyboard using the same sample playback engine for the drums and keyboard tones. It’s in many ways the first really mature arranger keyboard. Compared to the K700, the KN800 adds more polyphony (24 notes vs. 16), velocity sensitivity (introduced in the AX7), a fairly good digital reverb (considerably better than the AX7), and a much more mature arranger section with a programmable drum pattern, bass line and 3 polyphonic parts. The sequencer is fairly sophisticated and the timing is much tighter than the earlier models. Much of the design carried over to the later KN1000, which introduced a completely different sample playback engine with 32 note polyphony and a much larger waveform ROM.

Similar to the K700 but unlike the AX7, the KN800 has a fairly standard rompler voice architecture with only basic editing, but it also includes an interesting retrigger mode and a large selection of complex pitch envelopes. There are no filters or other advanced features, but overall the sound quality is surprisingly good. It’s easy to layer and detune up to 6 voices, each with independent pitch modulation, although this of course reduces the polyphony. There are only 16 notes of polyphony available for the keyboard sounds (the other 8 are allocated to the drums, bass and “back ground sound”, using a separate tone generator), so the main weak point here is that the polyphony runs out very quickly.

Patch banks for Ensoniq ESQ-1, ESQ-M, SQ-80

Patch banks for Casio VZ-1, VZ-10M, VZ-8M, PG-300, PG-310, PG-380

They were programmed by me, circa 2001-2005.

Edit: I actually don’t know if the VZ patch dump works. I can try dumping the sounds again if it doesn’t.

The oscillator portion of the Kawai K3 consists of 12 digital oscillators with a fairly clean sound comparable to the Korg DWGS models, however its design is remarkably simple and uses no custom ICs.

In general, it’s difficult to design a practical polyphonic digital synthesizer using only off-the-shelf parts, since even a straightforward oscillator design ends up being complicated and expensive. A divide-by-n based design generally needs separate hardware for each oscillator. While this is simple for a monophonic instrument, it doesn’t scale well for polyphonic synthesizers. Phase accumulators are better suited to polyphonic instruments because time multiplexing can be implemented easily, but to obtain good enough pitch resolution the phase accumulator needs to be about 24 bits wide. Many general purpose logic ICs like the 74283 adder only handle 4 bits, so between the phase memory, frequency memory, phase adder and phase latch, a standard implementation needs about 24 ICs just for the phase accumulator. An example of this is the PPG Wave 2.2’s PROZ board, which contains 72 ICs. Further, unless the sample rate is very high, it’s desirable to have good quality interpolation in order to avoid objectionable aliasing. But this generally requires a multiplier, and multipliers were expensive at the time. Alternatively, truncation can be used with highly oversampled waveform data, as in the Korg DWGS models. This doesn’t use a multiplier, but instead requires a large amount of waveform memory. To reduce the size and complexity of the hardware, most practical digital oscillator designs used custom ICs that integrate the phase accumulator and multiplier (if applicable) into a smaller package. But while custom ICs can offer good performance with simple hardware, they can be expensive to design, and are thus not well suited to relatively inexpensive instruments with small production runs.

While there were a few commercially available polyphonic digital synthesizers and samplers built from only off-the-shelf parts (including the PPG Wave 2, 2.2 and 2.3, DK Synergy, NED Synclavier, Fairlight CMI, Dynacord ADD One, Gleeman Pentaphonic, digital organs made by Wersi and Hohner, and most divide-by-n samplers), they were generally expensive and complicated. As far as I’m aware, the only really economically designed digital synthesizer of any significance to use only off-the-shelf parts was the Kawai K3, and additionally some computer peripherals like the Mountain Computer Music System (best known as the digital oscillator boards for the Syntauri alphaSyntauri), Acorn Music 500/Hybrid Music 5000/Peartree Computers Music 87, and the extremely obscure Clef PDSG. The K3 has a remarkably small parts count, with the digital oscillator board containing only 35 ICs. This is achieved by implementing the phase accumulator, linear interpolation and waveform address generation in very clever and efficient ways. A few of the other models I mentioned were similarly clever (mainly the Dynacord ADD One, Wersi and Hohner organs, and the Acorn Music 500). I’ll try to describe some of those later.

Follow along with the annotated schematic:

K3_annotated_schematic

The K3’s master clock is 12 MHz, fixed frequency. The output sample rate is 41.667 kHz (144 clocks per sample, 12 clocks per oscillator). The phase accumulator seems to be 23 or 24 bits. The phase for each oscillator is calculated in 3 passes, 8 bits at a time. Compared to a more straightforward implementation that uses a 24 bit wide data path to compute the phase all at once, this is significantly slower. This means that the maximum polyphony and sample rate are limited, but it requires far less hardware. In total, the phase accumulator uses only 6 ICs, plus 4 more to permit writing to the frequency memory. Since the phase and frequency data are time multiplexed, 3 more latch ICs are also needed to select the correct data for the waveform generation section.

The other clever thing is the way the waveforms are stored and reproduced. The K3 uses a series of ROMs to select the multisampled waveforms and implement linear interpolation in a very simple way. This interpolation technique is carried over from Kawai’s ADEPT digital additive organ models from 1981, used here in simplified form. I think this makes the K3 the only commercial digital synthesizer that implements linear interpolation in the digital domain without using a custom IC or high resolution multiplier.

For tabularized waveform wave(n) and fractional component frac, linear interpolation can be implemented in two ways:

out = wave(n) * (1-frac) + wave(n+1) * frac

out = wave(n) + (wave(n+1) – wave(n)) * frac

While these are mathematically equivalent, the second formula requires fewer multiply operations. In the K3, the differential waveform wave(n+1) – wave(n) is tabularized in a second waveform ROM. For linear interpolation, the output of this differential waveform ROM must then be scaled by the fractional waveform address, then added to the output of the main waveform ROM.

The scaling is typically performed by a multiplier, but historically this was a major problem for affordable digital synthesizers, since multipliers were complicated and expensive. They were eventually incorporated into ASICs, but before the late 80s it was generally desirable to find clever ways to eliminate multiply operations entirely. But linear interpolation of 8 bit waveforms reproduced by an 8 bit DAC doesn’t really require a high resolution multiplier. It’s good enough to use a small number of fractional bits, since much of the benefit from more fractional bits would be lost in the quantization distortion anyway. So it’s sufficient here to perform linear interpolation with 3 fractional bits using an 8 x 3 bit multiplier with 8 bit output.

While not necessarily elegant or efficient, any combinational logic, including a multiplier, can be implemented in a ROM. The size of the ROM required depends on the number of inputs and outputs needed by the multiplier. A 16 x 16 bit multiplier with 32 bit output could be implemented as a 4Gi x 32 ROM. Obviously that’s not practical, but a cheap EPROM can be used to easily implement a lower resolution multiplier. In this case it only needs a 2Ki x 8 ROM. The interpolation ROM contains 8 different sets of line segments with slopes 0, 1/8, 2/8, 3/8, 4/8, 5/8, 6/8 and 7/8. The output of the differential waveform ROM drives the lower bits of the interpolation ROM (A0 to A7) and the fractional waveform address drives the upper bits (A8 to A10). The ROM’s output is thus the differential waveform scaled by the fractional address. This is then added to the output of the main waveform ROM with an 8 bit adder, implementing the above formula for linear interpolation with one multiplication.

There are two 32Ki x 8 waveform ROMs, one for the main waveform and one for the differential waveform. These contain 31 stored waveforms (the remaining space is empty), plus there are two 2Ki x 8 SRAMs for two programmable waveforms (in practice only one is available at a time). The user waveforms are synthesized by the CPU and written to the waveform RAM. Only 32 out of 128 harmonics may be programmed (this is purely a software limitation), but in all other respects the user waveforms are exactly the same as the other waveforms. Between the two waveform memories, each waveform is 2 x 1Ki x 8. The complete waveform is stored; the waveforms are all summations of sines, but no tricks are used to exploit the odd symmetry that results.

The 1024 points per waveform are divided into 6 multisamples:

  • octave 1: 512 points, 128 harmonics
  • octave 2: 256 points, 64 harmonics
  • octave 3: 128 points, 32 harmonics
  • octave 4: 64 points, 16 harmonics
  • octave 5: 32 points, 8 harmonics
  • octave 6: 32 points, 4 harmonics

Compared to the Korg DWGS models, the waveforms are oversampled much more modestly. This doesn’t degrade the sound quality, because linear interpolation attenuates the high frequency images more than truncation. In total, the K3’s waveform memory is 64Ki x 8 for 32-ish waveforms, vs. 64Ki x 8 for 8 waveforms in the DW-6000. So the K3 stores 4 times as many waveforms in the same amount of memory.

The waveform ROM is addressed in an unusual way. The address bits can be broken down as follows:

  • WA10 to WA15: These come from the CPU and select the waveform. WA15 selects between the ROM and RAM waveforms.
  • WA5 to WA9: These are the upper phase bits (32 steps), used the same way by all multisamples.
  • WA0 to WA4: These are used as the lower phase bits (1-16 steps), and to select the multisamples. The number of bits used for the waveform phase depends on the length of the multisample selected.

WF0 to WF2: Fractional address bits for interpolation.

In a straightforward implementation where the multisamples are arranged sequentially, the bits of the phase accumulator would be masked and added to an offset to play the correct portion of the waveform memory. 12 bits of phase data are needed for this: the upper 9 bits are masked and offset to form the waveform address, then the 3 bits immediately below the masked portion are selected and used as the fractional address. The K3 instead interleaves the multisamples in an unusual format. This is done so that only 6 bits of phase data need to be manipulated to select the correct multisample and generate the fractional bits. This multisample decoding is performed by a 4Ki x 8 ROM, significantly simplifying the hardware. The upper 5 phase bits go straight to the waveform ROM without any modification. The multisamples are automatically selected by the decoder ROM based on the oscillator frequency, so any pitch modulation that crosses the multisample split point will switch immediately. This is in contrast to other synthesizers that select the multisample in software based on the played note, regardless of pitch modulation.

The lowest octave uses only 2 fractional bits for interpolation, resulting in somewhat degraded sound quality. This is because the decoder ROM uses only 6 phase bits total. In the lowest octave, 4 bits are used for the waveform address, leaving only 2 for fractional bits. This seems like a strange design oversight, since the decoder ROM uses only 4Ki x 8 of an 8Ki x 8 EPROM, and there doesn’t seem to be anything preventing the use of an additional phase bit. I think changing IC31 from a 74LS174 (6 bit latch) to a 74LS374 (8 bit latch) and rewriting the decoder ROM to use all 8Ki bytes would have been sufficient to have 3 fractional bits in the lowest octave.

The 2Ki x 8 interpolation ROM also uses an 8Ki x 8 EPROM, and similarly the pitch and phase data RAMs are 2Ki x 8 despite using only 36 x 8 bits. Probably Kawai used these so that they would have to stock fewer parts, and because the cost savings from using more appropriately specified components would be negligible. But these don’t suggest any easy improvements. An 8Ki x 8 interpolation ROM could support 5 fractional bits, but additional hardware would be needed to provide these bits. The pitch and phase data RAMs could support a very large number of oscillators with only minimal modifications to the digital oscillator board, but the sample rate would be proportionally reduced. The master clock frequency could be increased to improve this tradeoff, but there’s an upper limit to how fast the ICs can run. For the most part, the K3’s performance can’t be improved without significantly increasing the cost and complexity of the design.

There are two 8 bit waveform DACs, one for each oscillator. The data is latched separately for each DAC, then the conversions are performed simultaneously. These are multiplying DACs, so the amplitude of each oscillator can be controlled by varying the reference voltage. By inverting the reference voltage to one of the DACs, a single control voltage can adjust the balance between the two oscillators. The DAC outputs are mixed and then demultiplexed into 6 voices. It’s more common to use a single DAC with 12 sample and holds, but this arrangement makes the oscillator balance and mixing circuits simpler. Amplitude scaling, like most similar synthesizers, is performed by an analog VCA.

Overall, the design performs remarkably well. The sound quality is similar to Korg’s DWGS models, despite using 75% less data for each waveform, and it sounds considerably cleaner than the Ensoniq ESQ-1, which has a similar sample rate and waveform resolution but uses truncation. However, the transitions between multisample zones are highly audible, and the overall sound is rather dull, with the bandwidth only extending to about 8.5-10.5 kHz at the low end of the multisample range. In this respect it’s again similar to the DWGS models. Because the sample rate isn’t very high and the multisamples span an octave, the high harmonics are pushed very close to aliasing. But different waveform ROMs could potentially be written that would produce a brighter sound at the expense of a moderate amount of aliasing. It’s possible to have up to 256 harmonics, but this would result in a great deal of aliasing. 192 harmonics might be a better compromise.

Made in Pure Data and Octave, 2012-2016

Spotify link

I also made a video of the spectrogram for the last track:

I sampled the drum sounds from the rare Technics SX-AX7. The AX7 is a synthesizer/arranger from 1988. It’s fully digital, aside from the single BBD-based chorus. The AX3 and AX5 are similar but have fewer features. As far as I’m aware, both the hardware and the voice architecture are unique to the AX models. The SX-K700 and KN800 are completely different, despite being similar arranger models from the same time period. The AX7’s sounds are programmable, consisting of a sampled attack transient and single cycle “basic” and “harmonics” waveforms. There’s a global ADSR amplitude envelope, and a separate one for the harmonics waveform. This sort of crudely simulates filtering. It’s velocity sensitive, the harmonics waveform can be detuned and transposed, and there’s also a rather low quality digital reverb/delay. Hiding behind this relatively simple set of editable parameters are more complex semi-preset multi-stage envelopes (these change according to the selected waveforms) and a variety of interesting vibrato, tremolo and pitch envelope variations. The AX7 is good for bass and mallet sounds, but most other sounds are rather bad. Due to the low sample rate (31.25 kHz) and high quality interpolation, the sound is fairly clean and somewhat dull. The single cycle waveforms by themselves don’t sound particularly special, and many of the transient waveforms are useless, but in the right combination it can sound surprisingly good. The K700 and KN800 generally sound brighter and use conventionally sampled sounds.

The drum and accompaniment patterns are also programmable. These features are similar to the K700, but less sophisticated than the KN800. The drums aren’t amazing, but they’re fairly punchy with a few unique sounds. The sequencer timing is quite sloppy, but interestingly this results in a sort of syncopation rather than random jitter, so the effect generally isn’t unpleasant. One interesting feature is that the patterns can be switched immediately, in the middle of a pattern, rather than only at the start of the pattern. This means that it’s easy to obtain some interesting variety by programming a few variations and quickly switching between them. Another nice feature is that the patterns can be programmed in triplets or unusual time signatures like 5/4 and 7/4.