Op6: 6-operator FM Synth

This is my first attempt of making something “useful” with Daisy Seed. The last couple of months I’ve been interested in DX7 and FM Synthesis in general, so it had to be an FM Synth ;-).
It reads Yamaha DX7 SysEx (“32 voice bulk dumps”). When received on the Daisy, they are converted to a “native” format. The aim is not to emulate the real thing properly, but patches are quite useful anyway. An there’s a ton of those “bulk dumps” out there.
Source code is here: https://github.com/carlvp/daisylab
…and I’ll upload a demo to youtube.

Hope you’ll take it for a test drive!

6 Likes
6 Likes

This is sounding awesome!! Really useful that you can load in a SysEx file.

I love FM synth so I really appreciate your sharing all this to the community :pray:

Yeah, since there is really no way of creating patches yourself, you do want to load SysEx. But there is a catch. A .syx is about 4K and libDaisy has a limitation when it comes to the size of SysEx transfers (right?). So the .syx needs to be chopped up into several SysEx messages, each of which at most 128 bytes in size. The op6-ui (see github) does just that. The messages are then stiched together again on the Daisy.

Two good sources of .syx files:
http://bobbyblues.recup.ch/yamaha_dx7/dx7_patches.html
https://yamahablackboxes.com/collection/yamaha-dx7-synthesizer/patches

1 Like

Update on Op6
I’d thought I’d share what I’ve been up to lately:

  • I’m working on a voice editor, which will allow new op6 patches to be created. I’ll need one or two more rainy weekends before I have something that I can share here.
  • @CtrlAltDel is tweaking op6 for the SG-2 Synth Guitar. Very exciting to see what he’s going to build.
  • The polyphony (number of voices) of op6 has been increased from four to sixteen. So now it actually matches the original DX7 in that respect. Optimization of the hottest loop (the one that processes samples in the FM Operators) made it possible.
  • Although I think I’ve found the low-hanging fruit, there is room for further improvement. There’s now a total of 6 x 16 = 96 operators, which means 4.6M samples/s in that loop. I guess every single clock cycle that can be cut matters. I plan to use the headroom for effects.
  • A #define was added in configuration.h. It’s a build-time option that switches between MIDI over USB and “real” MIDI using a UART.
  • In an attempt to emulate the classic LatelyBass program of Yamaha TX81z I hacked op6, reduced the number of operators to four (like TX81z) and added “waveform #5/half sine”. I think it sounds pretty good. Like the original, it’s very velocity sensitive. With reference to the flowery language we use here, I call the patch Late Bloomer. Check it out on github: daisylab/latebloomer at main · carlvp/daisylab · GitHub.
3 Likes

How many physical controls would be required to create/manage an FM program if this is ported to a hardware synth?

DX7 has just a single slider (“data entry”), lots of (membrane) buttons and a tiny LCD display. But it is known to be kind-of hopeless to program. The DX1 has a nicer user interface:

I’m thinking it might be useful to focus on controls that make sense in a live performance.

To answer your question @KnightHill: Each FM Operator has about 20 parameters and there’s another 20-ish parameters.

So something like 140 parameters -for programming. Perhaps you’d edit one operator at a time anyway, so 20 controls and some means of switching between the operators (and the common parameters) would take you a long way.

Then there are “function parameters”, which are not part of the programs. The original DX7 has just a few, which control pitchbend, modulation routing and depth, portamento, mono/poly mode… that sort of thing. Later models have more of those.

1 Like

Thanks for the reply, that makes sense. I am wondering how smaller synths (Volca FM) approach the problem of having so many parameters.

Multiplexing -I think that’s how it’s done.
The Volca has a Velocity Slider, which pretty much works as the DX7 Data-Entry slider.
The display shows the currently selected parameter and the slider is used to change it.

1 Like

Apologies for yet another question - do you have any recommendations where to start with FM? Any good sources/books?

From what I have read so far, the complexity increases exponentially with the number of operators. Also, unlike subtractive, FM is not very intuitive when it comes to sound design.

I’d like to avoid the typical metallic/bell-like/80s sound associated with FM synths and find if there are more creative applications (esp. evolving sounds, bass, and drums).

Thanks

@KnightHill: I had a lot of fun following the examples in John Chowning: FM Synthesis, Theory and Applications -by musicians for musicians. The Stanford professor John Chowning is the famous inventor of FM (well, this application of FM) and I think he collaborated closely with Yamaha on the DX series.
I hope that it will soon be possible to try out the examples from the book using the voice editor that I’m working on.
I’m afraid I haven’t developed an intuition for FM either. It would be really cool to develop some kind of tool that would help you tweaking the parameters for useful results.

1 Like

…just don’t dive too deep into Bessel functions and suchlike. Although I not afraid of the maths, the “Xamples” are so much more useful (at least to me).

The Dexed project’s source for emulation of a DX7 would be worth looking at or maybe even using directly. I don’t know if it would fit on a Daisy Seed. We do have an ARM version on Zynthian https://zynthian.org/.
Dexed
GitHub - asb2m10/dexed: DX7 FM multi plaform/multi format plugin

It should work, MicroDexed runs on Teensy 4. IIRC, it’s not large.

Also interesting:
http://thewessens.net/CLFM/CLFMbuild.html

This uses Dexed on Teensy4, and adds a bunch of pots and CV.

1 Like