Implementing DX7 FM algorithms in VCVRack

Herbert Janssen also gives us the more technical details about the Modulation indexes and Bessel Functions and such. Many directly derived from the works of FM pioneer John Chowning.

FM Theory and Applications, by musicians for mucisians (1986). John Chowning and David Bristow http://www.burnkit2600.com/manuals/fm_theory_and_applications.pdf

Yes, a lot of theory. But also the translation to practical applications.

I’ve made a few DX7 patches in rack, the algorithms are easy to find online. The part I couldn’t find was the values to set the ratios. Any thoughts on this?

Cheers

1 Like

The Algorythm defines the model of the patch, but the ratios can vary from preset to preset with the same algorythm, just like Envelope- and FM-Amount Settings. I would suggest downloading dexed and look for a patch with the algorythm you want to try out in VCV and then transfer those ratios, envelope-setting, etc. over to VCV.

I always liked Stoermelder Intermix for mapping algorythms. I hope they return to the library soon…

1 Like

Thanks for that, Intermix is cool. I’ve used it recently to route sounds to different FX and then mash all the parameters at once with Transit. Absolute chaos! I’ll dig out some of my FM algorithm patches and take another look one day.

Ed

Hot Damn this is a rabbit hole. I figured out how to use Dexed to get the values for each voice, and I’ve used @chaircrusher 's algorithms as a starting point. The obvious thing to do is to have one patch for each algorithm, but if you want to have them all in one patch and switchable, this seems to work;

V/Oct and Gate from the Midi CV (or your sequencer of choice) are split into 32 outputs using Autodafe Multiple 1x8 modules. These are input into 32 Count Modula Mute modules which can be used to switch on /off the V/Oct and Gate signals together.

Simply unmute the algorithm you want to use. Of course, this arrangement allows you to have more than one algorithm active at the same time …

Maybe use a switch/router to switch/route the V/Oct signals And a multiple for the Gates/Triggers?

You might need extra switch/routers to switch/route to multiple switch/router modules, since they might not offer enough (32) channels.

You can also use polyphony to achieve routing of max 16 channels.

Also the Algorithms are only part of it - the settings on each of the operators are a big part of the sound. I have got part of the way by using the DX7Envelope from Nysthi which lets you copy the values for EG Level and EG Rate directly from Dexed but this is just the envelope and there are a lot of other parameters that influence the sound.

Screenshot 2022-03-18 at 14.12.13

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