Implementing DX7 FM algorithms in VCVRack

You are setting yourself up with quite a challenge, trying to implement a DX7 emulation in VCV Rack.

It doesn’t end with the per voice modulation options (and levels and curves and such). There are global options as well (including osc key sync that will restart all per voice osc at keypress). And there is the deeper internals as well, like the limited bitdepth/rates.

Engine Type

Dexed can be configured to use some of the original math limitation of a DX synthesizer. This does not only apply to the DAC, it also involves the bit resolution of the sine waves and the way that the amplitude is applied to each operator. Since all of this is experimental, multiple engines will be available to be able to compare them easily.

Dexed comes with 3 engine types :

  • Modern : this is the original 24-bit music-synthesizer-for-android implementation.
  • Mark I : Based on the OPL Series but at a higher resolution (LUT are 10-bits). The target of this engine is to be closest to the real DX7.
  • OPL Series : this is an experimental implementation of the reversed engineered OPL family chips. 8-bit. Keep in mind that the envelopes stills needs tuning.

So…there’s a long way to go before you could ‘import’ DX7 sysex…or even to just faithfully recreate DX7 patches.

But…that doesn’t mean you shouldn’t try. The journey can be more interesting then the destination.

And some form of approximation might be good enough. ‘Better’ can be the enemy of ‘good’ (enough).

This is my main motivation. I know I’m not going to get a full working DX7 emulation. I have a very accurate version of the E_Piano 1 which was the main voice I was after, but I’ve learned so much doing this. Thanks to @mosphaere too for his electric piano patch which I adapted.

1 Like

Here is a link to madFame’s great mini documetary about the journey towards the Yamaha DX7.

ORIGIN OF THE DX7 & FM SYNTHESIS

1 Like

an often overlooked module is bz-mapper I create it just because someone was asking a velocity keyboard mapping like the one represented in graphic on the dx-7 panel

1 Like

I used BZ-MAPPER for all sorts of mapping. But at some point the mighty multitool MindMeld ShapeMaster appeared (which, among many other things, can also be used as a (bezier) mapper).

But, ShaperMaster is quite a rack-filler and its versatility is not always needed. For relatively simple and straightforward (re)mapping purposes (which are actually pretty common), BZ-MAPPER still is a very nice and compact solution.

You would need some sort of (re)mapping to implement stuff like key/pitch or amplitude or rate scaling, with or without breakpoint(s).

My next project is to get that in there somehow. As far as I can see this is the Keyboard Level Scaling / Rate Scaling on the data sheet.

The DX7 Manual is freely available from many sources. It does give you some info on the key/rate scaling implementation.

EG (Envelope Generator)
The envelope generator determines how the amplitude (volume) or timbre (tone) of a note will vary over time. Envelope modulation of a modulator results in time-based timbre variations, while envelope modulation of a carrier produces amplitude variations.
The parameters which determine the “shape” of the envelope are RATE 1 through RATE 4 and LEVEL 1 through LEVEL 4. The RATE parameters determine how long it takes the envelope to reach one LEVEL from another. The envelope, applied to each operator ran be set individually, permitting an essentially infinite range of envelope combinations.

RATE:
Pressing the [RATE] key successively selects RATE parameters 1 through 4. Each DATE parameters can be set from 0 to 99. A 0 setting produces the longest (slowest) RATE, and a 99 setting produces the fastest RATE.

LEVEL:
Pressing the LEVEL key successively selects LEVEL, parameters 1 through 4. Each LEVEL parameter can be set from 0 to 99. 0 is no output, while 99 is maximum level. Normally LEVEL 4 will be set at “0”. In this case LEVEL 1 should be greater than “50” to ensure proper EG operation.

KEYBOARD LEVEL SCALING
Permits raising or lowering the EG levels for keys to the left and right of any key specified as the “Break Point”. This is basically a highly advanced version of the keyboard follower function found on some conventional synthesizers, permitting much finer scaling control.

BREAK POINT:
The BREAK POINT key - the reference key for the scaling function - can be specified anywhere between A-1 and C8.

CURVE:
Permits variation of the scaling curve to the left and right of the BREAK POINT key. Pressing the [CURVE] key alternates between R KEY SCALING and L KEY SCALING displays. Four different curves are available, as shown in the figure.

DEPTH:
Varies the depth of each curve over a 0 to 99 range. A 0 setting results in a flat (no variation) curve, and a 99 setting produces maximum scaling depth.

KEYBOARD RATE SCALING
The EG for each operator can be set for a long bass decay and short treble decay - as in an acoustic piano. RATE can be set from 0 to 7.

1 Like

Yes I downloaded it - on the lower slopes of the learning curve still.

I also got a copy of Howard Massey’s ‘The Complete DX7’ which looks excellent.

Dexed, however accurate the various functions are emulated, and however close it sounds, should still be considered an approximation of the original Yamaha DX7. A prime example of ‘good enough’

It’s open source, so you can learn about all its gory details.

It’s just not worth the trouble and effort of all the research, building and testing to get to an exact virtual replica.

Or…is it…

As far as I know there actually is a ‘bit accurate’ emulation of the DX7, by Plogue (of Bidule, Alter/Ego and other chipsynth fame).

Plogue - chipsynth OPS7

1 Like

I completely agree. Dexed is only an emulation after all. I have been looking for data sheets of decent DX7 patches but they are hard to find. Decent sounds are hard to find, in fact. Classic sounds they may be, but they sound decidedly lo-fi compared to what VCV Rack can produce, and VCV Rack is easier to program.

I have learned a lot doing this though.

yeah, the dx-7 is a little polarizing. Some ppl love the gritty 80’s digital sound. I always hated them, since they came out. I liked the dx7-IIm but by then there were plenty of other synths out.

The DX7 is a piece of synthesizer history. So many tracks/hits contain its (overused) sounds/presets. But, the concept of FM/PM surely added many new and unique sonic possibilities.

Thank goodies its not only the usual suspects like E.PIANO 1 and BASS 1.

Check out Apollo Atmospheres & Soundtracks album by Brian Eno With Daniel Lanois & Roger Eno, where there’s a lot of creative and no so cold and gritty DX7.

Example (track 1) Under Stars

The DX7 now feels pretty limited, when compared to more modern ‘FM’ solutions (both hardware and software). Even when it was introduced (1983), it was already a compromise between what was possible and what was commercially viable. See MadFame’s docu.

Steering a bit off topic…

My old Yamaha SY77 (1989) added a lot, but also suffers from many limitations. Though it was a great vehicle to learn about ‘FM’ (and mixing ‘FM’ with samples and subtractive). Yamaha kept evolving the concept in later machines for a reason.

Steering even further off topic…

Same goes for my old Kawai K5 (1987), an Additive synthesis machine (2 x 63 or 1 x 126 harmonics). Yes, it’s was (and still is) pretty unique. But was pretty limited by the technical state-of-the-art at the time (noisy, low bitdepth, audible stepping, just 4 envelopes etc). And of course the complexities of actually programming it, via a few knobs a wheel and an minute LCD screen.

The K5 (and Additve in general) can procuce very FM like sounds (epianos, bells, ebass and much more). It taught me a lot about sound and synthesis.

To just get an idea…the original factory audio demo, sort-of lo-fi/mono of a vinyl record… with commentaries…

Random, more recent (stereo) demo.

Kawai later created a follow up: the K5000 (1996). It added a lot. But still, programming Additive is just a lot of work. Even when approaching the concept from modern/current graphical interfaces.

1 Like

I anyone wants the EPiano1 sound, here it is; (heavily indebted to @mosphaere for this)

DX7 EPiano 1.vcvs (33.2 KB)

and if anyone needs a patchbook for the DX7, here it is recreated;

Voice Data List.pdf (171.5 KB)

and if anyone wants to share one of these filled in with the values for a decent sound, post it here.

2 Likes

It’s a Yamaha DX7 Factory Preset: 11 E.PIANO 1

Maybe…just load the bank/preset/sysex in (free plugin) Dexter and check (and write down) all values?

Where to find E Piano1 on Dexed

That’s exactly what I did to get the settings in the selection file I posted.

For those who don’t have a DAW and/or Keyboard. There are several online (realtime) engines on the web. One of them is Dexed…

https://www.webaudiomodules.org/wamsynths/dexed

I am very tempted to buy the new Korg OPSIX-VST… That’s a synth I would have bought, if there was a desktop-version, but now as a VST… hm…

Risking steering off-topic…

I don’t know to much about the Korg OPSIX. But it delivers more then the ‘simple’ 6 operator (just-sine) Phase Modulation (using a set of fixed algorithms) as delivered by the Yamaha DX7.

So…quite a different machine (different set of properties).

This is software…

But…this is hardware…

As with everything: evaluate stuff by all their relevant proporties, then evaluate these properties and sort (prioritize) them by their value. That should lead to your best option(s).

1 Like

Also not in VCV, but may be of interrest:

"MiniDexed is a FM synthesizer closely modeled on the famous DX7 by a well-known Japanese manufacturer running on a bare metal Raspberry Pi (without a Linux kernel or operating system). On Raspberry Pi 2 and larger, it can run 8 tone generators, basically creating an open source equivalent of the TX816/TX802 (8 DX7 instances without the keyboard in one box)."

GitHub - probonopd/MiniDexed: Dexed FM synthesizer similar to 8x DX7 (TX816/TX802) running on a bare metal Raspberry Pi (without a Linux kernel or operating system)

2 Likes

An nice DX7 patch note just popped up on Reddit;

I hope someone will be able to use this in their own DX7 patch in VCV Rack and maybe post it here. I am unable to because of the Unarchiver bug.