So ive been trying to make a very simple, basic fm8 emulation. Doesnt have to be exact at all, but just wanted it close enough so i could reverse engineer some of the patches in pd. I found this site https://www.native-instruments.com/forum/threads/modulation-index.6534/ detailing how the mod index is calculated, but i didnt have much success with this, it didnt sound much like it. Then I found this site detailing how the mod index is calculated for the DX7 http://www.angelfire.com/in2/yala/t2dx-fm.htm and i tried that out. When the mod index is maxed out it sounds way more extreme and than on the FM8. I have the formula right because I can see its the same mod index in the table on the website, is there something else I'm missing? Anyone had any experience emulating the FM8/DX7?

Here's my patch:

fm8 modelv1.pd

Thanks

R

]]>So ive been trying to make a very simple, basic fm8 emulation. Doesnt have to be exact at all, but just wanted it close enough so i could reverse engineer some of the patches in pd. I found this site https://www.native-instruments.com/forum/threads/modulation-index.6534/ detailing how the mod index is calculated, but i didnt have much success with this, it didnt sound much like it. Then I found this site detailing how the mod index is calculated for the DX7 http://www.angelfire.com/in2/yala/t2dx-fm.htm and i tried that out. When the mod index is maxed out it sounds way more extreme and than on the FM8. I have the formula right because I can see its the same mod index in the table on the website, is there something else I'm missing? Anyone had any experience emulating the FM8/DX7?

Here's my patch:

fm8 modelv1.pd

Thanks

R

]]>which you might be able to resuscitate.

There was a version for Purr Data later....... https://github.com/frashpikass/fmOP

David. ]]>

Without looking at your patch --

I've always done FM (leaving PM aside for a moment) such that index = 1 means that, if f is the main frequency, the carrier frequency oscillates between 0 and 2f.

```
mod_phase = phasor(0 .. 2pi) at (f * ratio) Hz
mod = sin(mod_phase) * index
car_phase = phasor(0 .. 2pi) at (f + (f * mod)) Hz = (f * (1 + mod)) Hz
carrier = sin(car_phase)
```

If you do phase modulation like this, then index has exactly the same meaning.

```
mod_phase = phasor(0 .. 2pi) at (f * ratio) Hz
mod = sin(mod_phase) * index
car_phase = mod + phasor(0 .. 2pi) at f Hz
carrier = sin(car_phase)
```

Takeaway: if the phasor goes 0 to 2pi, then you don't need to do any extra scaling on the modulation index for PM and FM to be compatible.

The catch in Pure Data is that the phasor is *not* 0 to 2pi. It's 0 to 1.

So, for phase modulation, you have to scale the index down by 2pi: mod --> [/ 6.28319].

hjh

]]>This totally helped me out and I'm now definitely in the right area. The problem I'm having now, is that when I try different ways of calculating mod index (according to the sources I've linked above) is that although they are all in the right ballpark, none of them are generating the same amount of harmonics as the fm8. It's not that the mod index isn't right because it sounds pretty bang on but the fm8 sounds more filled out with high frequencies. I got a spectrum analyser to look at them and this is what I found.

For the test, I basically had my pd patch and fm8 running into ableton: both had 1 sine tone modulating another at a ratio of 2 with the mod index (or operator output in fm8 case) at full.

You can see that the spectrum just looks fuzzier, I dont know if my knowledge of PM/FM is failing me and I'm missing something here or if I can just put this down to some "special sauce" that Native Instruments has cooked up behind the scenes? Some extra DSP magic? Even comparing a straight up sine tone the fm8 sine has some crazy frequencies going on at the top end.. Any ideas on this? Anyways, I'm satisfied that the scaling is correct and I'm happy to go with this.. just always curious as to how these things work.

Thank you

]]>"the fm8 sounds more filled out with high frequencies"

The FM8 plot (bottom left) looks like a lot of aliasing. I'm not sure if that's really "filled out." (And the "FM8 sine tone" plot is definitely not from a pure sine tone. It might be deliberate or it might be just a poor oscillator implementation. One of my former students did some research comparing analog oscillators against digital ones from commercial VSTs. The VSTs are often really awful -- unbelievable amounts of aliasing. Massive is one of the worst offenders. I think this is one of the reasons for the harshness of modern EDM -- adding a lot of noise into the pads is a way to cover the kind of gross sound of the oscillators.)

One thing you might try is to use a wavetable oscillator instead of [cos~]. The wavetable can include a bit extra harmonic content.

hjh

]]>