Yamaha DX7 chip reverse-engineering, part 4: how algorithms are implemented
righto.com
righto.com
In particular, I found it suprising that the sine waves were generated by indexing a wave table - you'd think a sine wave would be easy enough to generate without a table, but the way it implements phase distortion ('FM') on those sine waves by simply offsetting the index into that table is quite interesting. Sorta like having different mathematical functions for 'i' in a for loop.
Table lookup was inherited from the first computer music software. It was the only way to create any kind of waveform at reasonable speed.
When you have a table, modulating the lookup index is almost an obvious trick. But the Chowning/Yamaha implementation worked so well musically that it took it from a curiosity to a best-selling product.
A different take on it might not have done that.
FM owes a lot to sound developer Dave Bristow. He made sure the DX7 had usable sounds. According to him, the original prototypes had tens of harpsichord-like patches and not much else.
For more information, see: https://priceonomics.com/the-father-of-the-digital-synthesiz...
You may think it sounds crude, but pieces like these took hours of expensive mainframe (PDP-10) time. There wasn't a lot of opportunity for careful sculpting of fine details.
You could easily synthesize something like this in real time now. But not many people do, which I think is a shame.
If you can read French, there's more background here: http://brahms.ircam.fr/analyses/Stria/
Equivalent today to milliseconds of processing in an Apple Lightning cable.
If you can't read French, use Google Translate. It handles this article extremely well.
I've kind of been following very loosely along with this DX7 series with some (not DX7) FM and phase modulation in my own code. If you're running Linux, you can try something like this in the WIP graph-synth branch[0] of my mb-sound Ruby app/gem (feedback welcome on the DSL syntax):
play 300.hz.pm(
0.1.hz.triangle.at(1) * tone(300.constant * 1.618) +
0.04.hz.triangle.at(1) * tone(150.constant * 1.618)
).forever
[0]: https://github.com/mike-bourgeous/mb-sound/tree/graph-synthFor sure, though the parent comment's video link was presumably rendered by software on a PDP-10. I've spent the last week of my spare time trying to write code to make a bass sound that reasonably approximates Lately Bass, and I'm close, but since I'm not even trying to emulate any of the quirks of the Yamaha FM synths it doesn't ever sound quite right.
It's the last part that's still really difficult, possibly even harder than it used to be. And that's even with the insane processor power we all have now.
There's an infinitely vast space of potential sounds, and an infinitely long fractal knife edge of interesting sounds, and it kind of makes sense that finding unexplored areas of that fractal edge between boring and incomprehensible gets harder over time.
https://soundcloud.com/cassilda_and_carcosa/ontologies-tape-...
TX81z is one of my favorite synths.
Somehow I feel that if this happened today, no company or university would have the spine to do this, and it would rather turn out as an expensive legal battle if he insisted on getting his part of the patent pake.
His Youtube channel has some absolutely amazing patch tutorials also.
I have never owned one of the original Yamaha's, but i have been using the awesome Dexed VSTi plug in, that is modeled after the DX7 for several years now.
And I am planning on purchasing a Korg Opsix for its FM capabilities.
But for someone that has only been on the learning-by-experimenting end of FM synthesis, your articles are a great insight into the theory behind it all.
That said seeing the tech and how things were implemented has me loading up the Arturia DX7-V and tinkering around with it.
Have any other synths or effects on your list to look at?
https://en.wikipedia.org/wiki/Yamaha_YM2151
One of my favorite pieces is Brian Schmidt's music for Swords of Fury, a Williams pinball machine from 1988.
My interest in these instruments goes back a long way - I reverse engineered my DX7 to build a VST instrument around 2001 or so. My reverse engineering was 'black box' with putting test patches and midi through the instrument to build a model, but was good enough to produce patches which I couldn't tell from the original except at very extreme settings where the different in sample rate became apparent (e.g with aliasing frequencies being very obviously different between the two).
Actually, thinking about it, I also did the same with the TX instrument to produce a simple model written in SOUL a few years back. There's a LatelyBass patch here based on this - https://soul.dev/lab/?id=LatelyBass
I have a suspicion emulating in software specific Yamaha hardware implementation would not only lead to bit perfect reproduction, but also faster emulator. I wonder how slow of an MCU would one need, 20MHz AVR? 30MHz STM32?
Looked for an in-browser DX7 synth, found this!
...please?
You can listen to each sample if you try programming a patch. Some are short 'transient' samples, others are looped. The 'chipmunk' effect is really evident.
The D50 was the first of the new wave of 'S&S' ('sample and synthesis') synths that had nothing of the depth and mathematical interest of FM synthesis.