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 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.

T6118A, T6118B, T6118C (1981): These are Kawai’s first custom drum ICs. 24 pins, clock is 1.6 MHz, manufactured by Toshiba. They each generate 6 channels, and the A/B/C suffix denotes different variants for different sets of sounds. They’re used in the DX series organs. The high end organs have all 3 ICs (15 sounds total), while the lower end models use only the T6118A and T6118B (10 sounds).

These are the sounds made by each IC, with the original names from the service manuals:

  • T6118A: Hihat-L, Hihat-S, Cymbal, Hi Conga, Clave, Bass D
  • T6118B: SD (Tone), Rimshot, Low Conga, Cowbell A, Cowbell B (these are used together) SD (Noise)
  • T6118C: Low Bongo, Low Tam, Guiro, Tamb., Wow-Gui. The remaining channel is unused.

They appear to continuously generate digital waveforms, which are either stored or synthesized, then sent to an onboard waveform DAC. This is externally buffered and sent back into the IC for enveloping via a second multiplying DAC. The output of this DAC is again buffered and again sent back into the IC for demultiplexing. The 6 outputs then go to sample and holds, then analog filtering and mixing circuits. The input seems to be simple trigger pulses, with no accent. So in total, each IC contains waveform generators, envelope generators, two DACs and demultiplexer control circuits.

Kawai R100, R50, R50e, R50iii (1986-87): These are 8 note polyphonic drum machines. Although they can transpose samples, there are no envelopes, so they’re not really full fledged romplers. Similar hardware is likely used in the ADEPT2 and ADD series Kawai organs.

They’re based around 3 custom gate arrays:

MB63H158: “Sensor LSI”, 64 pins, made by Fujitsu. This is a simple gate array that scans the front panel buttons and drum pads and calculates pad velocity. It’s also used as a keyboard scanner in other models, like the K1, K3 and K5.

The sample playback gate arrays are made by Mitsubishi:

M60009-0104FP: AGU “Address Generation Unit”, 100 pins. This interfaces with the CPU and contains the phase accumulators and address generation. It seems to contain all the registers for sound generation, and sends amplitude data and timing signals to the DGU IC.

M60009-0103FP: DGU “Data Generation Unit”, 100 pins. This contains the anti-log table and output accumulators, sends data to the DAC and controls the sample and holds.

The waveform ROM is 256k x 16, storing both 8 bit header data, which goes to the AGU, and 12 bit waveform data, which goes to the DGU. The data isn’t packed in any clever way, so the remaining space is wasted. The samples are recorded at 31.25 kHz (not 32 kHz as is incorrectly claimed in the user manuals). The R100, R50 and R50e each have different waveform ROMs. The rare R50iii contains an expansion board with all 3 ROMs. The AGU can only address 256k, so only one waveform ROM can be used at a time. The waveform data is stored in a logarithmic format. Like Yamaha’s FM ICs, the amplitude is scaled without a multiplier by adding the amplitude information to the logarithmic waveform data, then passing the sum through an anti-log table. This is equivalent to multiplication since, a * b = exp(log(a) + log(b)). There doesn’t appear to be an amplitude envelope, so the scaling is used only for the sound level, velocity and panning.

The master clock is 5 MHz and the playback sample rate is 31.25 kHz (160 clocks per sample, 16 clocks per voice plus 16 clocks for each stereo output channel). The DAC is 12 bit linear (DAC312 in the R100; the R50 apparently uses a cheaper resistor array). There are 8 monophonic output channels, plus stereo mix outs. The DGU IC internally pans and accumulates the sounds, and the stereo outputs get their own time slots for conversion. While this is electronically simple and more flexible than drum machines that use analog mixing to assign output channels to fixed panning positions, it also means that the stereo mix outputs have lower dynamic range (12 bits per output) than an analog mix of the individual outputs (approximately 14-15 bits depending on how the channels are panned). The sounds can be tuned chromatically over a range of -8 to +7 semitones, but the flange effects in the R50 adjust the pitch more finely, and it’s not unlikely that the hardware supports a larger transposition range. Interpolation seems to be truncation. Coupled with the low playback sample rate, this results in a dirty sound similar to the E-mu SP-1200 or Ensoniq Mirage.


This was the original initial incarnation of the patch:

I continued working on it after that, so I don’t have that version anymore. The final version was later released here:

You can download the patch here.

The main patch is _dist_integral_test2a.pd. I’ve included all the relevant abstractions that I’ve made, but it also requires the creb, Cyclone, IEMlib and zexy libraries. I’ve only cleaned it up slightly and added a few annotations. I changed the reverb because the one I used originally needed to be manually adjusted to get the right sound. It’s still messy and confusing and some things are implemented in a less than ideal way. It’s fairly CPU intensive, so it may not run on anything less than a powerful laptop. Some of the abstractions are useful, but they’re not necessarily well documented, easy to use or free of bugs. They were mostly made for my personal use, and I can’t guarantee that they will be useful to anyone else. Ignore any “load_object: Symbol “lp_setup” not found” and “expr divide by zero” errors.

More PD algorithmic IDM, 2015-2017.

Spotify link

I signed up with DistroKid, so my music will be available on Spotify and various other stores and streaming services. I’m uploading now, but it will take some time for everything to appear.

If you want to buy a release I still recommend Bandcamp, because the sound quality and artwork will in some cases be better. I’m not doing this intentionally; it’s just that Bandcamp allows larger file uploads and additional artwork.

The DW-6000, DW-8000 and EX-8000 were Korg’s first synthesizers to use completely digital oscillators. The DWGS system generates 16 phase accumulator oscillators with oversampled waveform data to obtain reasonably good sound quality from simple hardware. Contrary to what’s often reported, the DVP-1, DSS-1 and DSM-1 have nothing to do with DWGS.

The DWGS oscillators are based around two simple custom gate arrays, MB62H133 and MB64H129.


The master clock is a 6.4 MHz VCO. This is modulated for pitch bend, vibrato and tuning. The variable clock means that pitch modulation doesn’t introduce aliasing, but it can only modulate all oscillators globally. The oscillator tuning parameters and the pitch envelope in the DW-8000 work instead by changing the oscillator’s frequency register. There’s a single time multiplexed 8 bit DAC (DAC08) that operates at 800 kHz (8 clocks per oscillator). The sample rate is 50 kHz (128 clocks per sample) and the interpolation is truncation.

MB62H133: This implements a 20 bit phase accumulator. Each oscillator has its own 20 bit frequency and phase registers, stored externally in 2 banks of 5 74S189 16 x 4 bit SRAM ICs (640 bits total). The MB62H133 IC contains the CPU interface that allows the oscillator frequencies to be written to the frequency registers, a 20 bit adder, and circuits to generate various timing signals like the control signals for the waveform DAC demultiplexer. It has 64 pins and contains about 800 gates.

MB64H129: This has 40 pins and about 400 gates. The input is the upper 12 bits of the oscillator phase data from the MB62H133, plus octave data to select the correct waveform multisample. The waveform may be up to 4096 samples per period, with no fractional bits for interpolation. The multisampled waveforms are different lengths for each octave, so the bits of the phase data are masked in order to play the correct address range. The output of this IC addresses the waveform ROM, and the waveform ROM output goes directly to the waveform DAC (DAC08). The MB64H129 can address a waveform ROM up to 64k x 8. The DW-8000 uses 128k x 8, so some external hardware is added to handle that.

Waveform multisample lengths:

  • octave 1: 2048 points, 320 harmonics
  • octave 2: 2048 points, 160 harmonics
  • octave 3: 1024 points, 80 harmonics
  • octave 4: 1024 points, 40 harmonics
  • octave 5: 512 points, 20 harmonics
  • octave 6: 512 points, 10 harmonics
  • octave 7: 512 points, 5 harmonics
  • octave 8: 512 points, 2 harmonics

Depending on the octave, the waveform data is oversampled by a factor of at least 3.2. Compared to critically sampled waveform data, this means that the high frequency images that result from truncation are considerably reduced and cause less audible aliasing, but this comes at the expense of a relatively large waveform ROM. The complete set of multisamples for each waveform is 8192 x 8, which is much larger than most similar synthesizers. The DWGS models are also somewhat dull sounding. At the low end of the range for each multisample, the harmonics only extend to about 10.5 kHz.

The waveform ROM stores the full waveform period. The waveforms are all odd functions (summations of sines). The ROM size could have been reduced by half with minimal modifications to the MB64H129 by resynthesizing the waveforms as even functions (summations of cosines) and inverting the phase accumulator data for the second half of the waveform period (this would add only a small number of gates to the MB64H129). It could also be done with odd functions by using a sign-magnitude DAC that additionally inverts the DAC’s output for the second half of the waveform period. If a sign-magnitude DAC isn’t used, a two’s complement negation before the DAC of the second half of the waveform period is also possible, but this would require more ICs.

As far as the digital oscillator portion goes, the DW-6000 and DW-8000 are very similar. The hardware supports 16 oscillators, and the DW-6000’s oscillator design carries over mostly unchanged to the DW-8000. However there are many other differences, including different PCBs, CPUs, features, waveforms, etc. The DW-6000 also has the ability to use external waveform ROMs, although this section of the PCB (marked “I/O Block”) is left unpopulated. It’s omitted from the DW-8000.

Both the DW-6000 and DW-8000 use software to generate all control voltages and modulation, but there are significant differences. The CV DAC in the DW-6000 is 8 bit (BA9201). The DW-8000 also uses an 8 bit DAC (HA17008), but adds a 4 bit resistor array DAC that feeds into the main DAC’s reference voltage pin. The 8 bit DAC’s output is multiplied by the 4 bit DAC’s output. This is not equivalent to a 12 bit linear DAC. I suspect that only one bit of the 4 bit DAC is high at a time. In this case, it’s a floating point DAC with an 8 bit mantissa and 4 step exponent, 11 bits total dynamic range. To make up for its CV DAC’s low resolution, DW-6000 also uses 3 BX7114 custom thick film hybrid ICs in the control voltage demultiplexing circuit. These are made by Rohm and are apparently marked BX7200 on the package. They act as sample and holds, and also smooth the VCF and VCA envelopes. The other control voltages, for the master clock frequency, oscillator levels, noise level and resonance, use a conventional sample and hold with simple first order smoothing. The BX7114 isn’t described at all in the service manual, but it seems to implement a more sophisticated kind of smoothing that eliminates audible stepping while still preserving fast transients. Wersi and PPG sometimes used RC smoothing circuits with added diodes so that fast transients can pass through unchanged. It’s possible that this works in a similar way. The BX7114 ICs have 10 pins and process 4 control voltages each. The DW-8000 uses conventional sample and holds for all control voltages, with simple first order smoothing on the filter cutoff and VCA control voltages only. The envelope shapes are also different, piecewise linear in the DW-6000 and exponential in the DW-8000.