FM synthesis

At least one (or both - are they the same?) of those versions is a “bare metal” implementation that is its own OS if you will - there’d be no way to run that “on-top” of norns - which is using a regular linux OS under the hood.


If someone would make a build for RasPi of the vst plugin, I suppose something like this could be used to concoct a norns engine (pushing the whole thing even further into Rube Goldberg teritorry :grin: ).

1 Like

fors just released glänta


Just made a shield board for the Minidexed project.
The Pi Pico is working as a USB midi converter so the Norns can control the Pi3B being used for Minidexed.
I now need to make a case for it to go with its friends.


Nice job! Which dac did you use on your board?

1 Like

Cheers! I’m just using the “AliEx special” 5102A one specified in the build guide.
Was going to lay out the codec on the shield but then found out that the codec IC is both out of stock and more expensive than getting the AliEx board, so that was that.
It’s attached to the underside of the PCB - in the photo the footprint outline is on the top of the board.

1 Like

Thanks! I had been sitting on minidexed for a while until I saw your board - just ordered all the parts :slight_smile: Thanks!
pcm5122 and pcm5102a are in stock at mouser and are pretty cheap so I may do a full board as well after I have a play with the bare parts!

Ps I really like the idea of the pi pico as a host 2 host! Neat!

PPs Just found the aliexpress dac - that’s cheap as you say - just ordered a couple!


No worries! You’re an Eagle user IIRC so my KiCad files would be useless, but let me know if you want them. Will probably sling them on Github anyway at some point.

The Pi Pico was due to the other host 2 host thing I have (the wonderful 2Host project) just wasn’t getting recognised by the Minidexed code. It works fine with other connections, but I had no luck with Minidexed. A cheapo Pi Pico running this code, with the UART lines wired straight to the GPIO pins of the Pi seems to work a treat anyway.

There’s no software debouncing of the encoder, so you might want to add some resistors and caps to stop it glitching about. I’d LOVE to have more knobs and buttons on this thing tho.


I’d love to take a look please! Thanks! I’m painfully trying to move to kicad as I have some really large projects coming up and have no plans to pay for eagle! (The free version is now unsupported so at some point I’ll have to move anyway)
I think I have a spare pi pico as well!
Thanks a lot!

1 Like

I have somehow developed an intuition that FM synthesis and Fourier series analysis are the reverse of one another, and the generality of the latter makes the former so versatile.

Both are about sine waves/circles with radius/amplitude ratios in relation to a base frequency, plus maybe also phase offset.

Somebody either correct me, or suggest a reading/video where someone who knows what they are talking about says more ir less the same thing.

I figure the difference lays in the variety of FM algorithms, ie the arrangement how the operators are connected. In Fourier all the operators are in a series so it’s kind of a special case of FM.


1 Like

I think additive synthesis would probably be the closest thing to the reverse of Fourier analysis. In Fourier analysis the components sum to generate the final waveform. Though I think you could say that FM synthesis where the operators aren’t modulating each other (ie DX7 algorithm 32 with no feedback) is implementing additive synthesis.


What do you mean by reverse ?

They both use sine and cosine, but the relations are not the same, Fourier is about finding a way to express a (fixed in time) sound with a sum of sine and cosine waves, FM (as in phase modulation in this case) is about a specific interaction between a fixed (and small) number of sine (or cosine) waves.

Fourier is useful to sort frequencies, phases and amplitudes of additive synthesis, which ends in something like
a.sin(f1+b)+c.sin(f2+d)+ … + …,
when FM uses

Those are not precise enough, but they give a representation of the difference, in my opinion (addition vs phase modulation ?).

And then there is the Synclavier… lol

1 Like

I went to a presentation by Dr. John Chowning at Knobcon one year and found it pretty interesting. He talked about it from a spectral point of view quite a bit, about how FM sidebands can be predicted by Bessel functions, and how the sidebands could go below 0Hz which “reflects” them inharmonically in the same way that aliasing reflects off the Nyquist limit. He also had thought about replicating the spectra of acoustic sounds when designing FM patches, so for instance, vocal formants etc.

I had an idea for a spectral processor that would create “fake FM” by applying the patterns from Bessel functions as a sort of convolution of the signal in the frequency domain. I don’t have much DSP experience to speak of, but I’ve been told there are reasons this wouldn’t work and it just sort of creates garbage instead.

Computationally it’s no doubt more expensive to simulate FM using additive synthesis than it is to just do FM (or PM) in the first place. That was one of the biggest advantages of FM when it was discovered, that using addition (of phases) and a sine table lookup, you could create such a wide variety of timbres.


i was looking at open-source dx7 emulators of different flavors and it seemed worthwhile to post some discoveries and observations here.

dexed / mini-dexed / msfa

the MiniDexed project above is a teensy port of dexed, which is a juce-based, GPL3-licensed project including standalone and plugin builds of what started as a dx7 patch editor. (GUI still makes up the bulk of its codebase.)

apropos of questions above, dexed itself can build and run on linux, though it is not really set up out-of-the-box to work as a headless JACK application (which would make it easy to build+run on norns.)

what is even more interesting to me (hilarious even) is that dexed itself pulls the entire actual synthesis engine from an earlier and more portable codebase: google’s music synthesizer for android. (which incidentally is licensed with the more permissive Apache 2.)

(so if anyone did want to make a norns-native executable, i would just go straight for the msfa sources. might adjust this advice after further examination if dexed has added anything significant to the engine itself since 2017.)

the Faust DSP environment also includes a pretty complete dx7 emulation in its standard library. this is easy to build and run on norns, including all the usual Faust options: OSC interface, polyphony etc. (i would recommend the faust2api build script as the easiest option.) it also includes tools to convert from dx7 systex to faust parameter JSON.

the one major missing component i’ve found in the faust version, is a treatment for the dx7’s weird per-operator key scaling curve edit thing. (if you’ve used one you know exactly what i mean.) this is sort of a bummer because while it’s not exactly complicated, it is a weird arbitrary function that doesn’t lend itself too well to implementation directly in a faust patch (and it’s an important feature for the character of some patches, like increasing enharmonicity as you get further up the keyboard.)

finally must recognize that the dx7 engine being as simple and straightforward as it is, there have of course been decent approximations in environments such as supercollider and csound. (the latter includes some C-based utiltiies for systex file parsing and generally just gives me a fuzzy feeling because f yeah csound.)

beep boop over and out


i would not say “that is a wrong assumption” or something like that because i won´t be able to explain that or prove the opposite.

but i am sure that you can say that if you see a relation between DFT/FFT and FM synthesis, then almost everything in DSP is also releated to these two things and to each other.

most filters are working like delays (or at least contain one - beside amplitude changes), and because delays are a form of changing the phase they are also the same as changing the amplitude because amplitude is closely related to phase, too.
or the opposite. but the beeing the opposite of something is almost the same as beeing the same, isn´t it?

ringmodulation is the same as amplitude modulation but bipolar. and if the ringmodulator is fast enough, it will sound like a filter, reverse the spectrum, or distort the input.

phase modulation can be implemented as slew limiter to the phase accumulator, so what is it and why is not a delay?

in max and flowstone you find the combfilter under “filters” but in csound and supercollider you will find them under “delay”.

in the end all this stuff is more or less simple math and the rest is a construct.

when i think about it, math is a pure construct, too.

at least from the perspective of most mathematicans, physicians might disagree.

did you know? most FM synthesis is implemented as phasemodulation.