New patch for ORAC: vj-fm


A powerful and fully customizable 9 operator FM synth with 3 voice polyphony using phase modulation.


  • Global volume: 0-1
  • Transpose: -36 - 36 (semitones)

Each operator comes with these options:

Page 1:

  • Volume/modulation index (Yamaha CS-5 curve)
  • Frequency multiplier (stepped by 0.125)
  • Frequency divider (stepped by 0.125)
  • Fine tune (in increments of 10 cents)

Page 2: ADSR envelope

Page 3:

  • Feedback (Yamaha CS-5 curve)
  • Envelope amount/depth: the number is a percentage of the mod index that is controlled by the envelope. Negative values flip the shape of the envelope (attack is decreasing, decay and release are increasing the volume/mod index.)
  • Key scaling (higher values result in more reduction in mod index for higher notes)
  • Velocity sensitivity (toggle)

Page 4:

  • Detune (± 7 cents)
  • Freq ratio adjustment: added to the frequency ratio for precise ratios. For example, a multiplier of 1, and divider of 2, and an adjuster of 17 would result in a final ratio of multiplier/divider + adjuster = 0.67.

That results in 9 * 4 = 36 pages of parameters. A bit menu divey but extremely powerful and customizable.

The AUX button + keys act as shortcuts to reach certain pages.

  • Aux + low C, D, E = L1C, L1M1, L1M2
  • Aux + low F, G, A = L2C, L2M1, L2M2
  • Aux + high C, D, E = L3C, L3M1, L3M2

Here are how the operators are connected:

L1M2 -> L1M1 -> L1C -> Audio out
L2M2 -> L2M1 -> L2C -> Audio out
L3M2 -> L3M1 -> L3C -> Audio out

To summarize, 3 carriers, with two operators modulating each of them in series. “L1” denotes “lane 1”. “C” denotes “carrier”. M1 denotes “modulator, with depth 1”.

By default, only L1C has parameters to output audio. To get started, try turning the Mod Amt of L1M1 and mess with the frequency multiplier and divider.

For the adventurous, the Pure Data source can be modified to configure other algorithms.


Update 1: Added a low pass filter to the modulation index so that it can be modulated by the LFO for pleasing results.

Update 2: Changed modulation index and feedback to exponential scaling so that you get better precision in the lower ranges

Update 3: Added Env Amt parameter to allow for more subtle envelopes and even negative envelopes.

Update 4: Multicore, Fine tuning, Detuning, Precise ratio adjust (it adds to the ratio after the multiplier and the divider), better modulation and feedback curves, key scaling

Update 5: Better volume controls, transposing, aux key shortcuts, better more detailed documentation


One question for the experienced members of the community: is there a way for me to change the page ORAC is displaying to the user using Pure Data? This would allow me to make shortcuts to pages using the aux button and hopefully make it less encoder dependent.

1 Like

pagesel.pd (1.9 KB)

Check this out, this is the solution I use in some Orhack Modules. :slightly_smiling_face:

Even if pages have a custom name in the JSON file they can be selected using a number.

This is exactly what I was looking for, thanks! Also, thanks for ORHACK!

1 Like

hi @vijaymarupudi !! thanks for this patch, it sound awesome. i wanted to ask: do you have by any chance the first version of the patch that you uploaded to patchstorage?? with the last one 0.4 i’m experiencing some cpu crackle noise, which didn’t happen at least with that older version. i wan to try if with the older one stops, but i erased the zip file before uploading the new one… (by the way, i’m on an organelle m with the last os 4.2)
thanks in advance :slight_smile:

Ah, if you’re using this patch with other effects, it might get a bit crackly. I suspect this is because I added a low pass filter to each modulation depth parameter to allow for LFOs to modulate it smoothly. Here’s the version of the patch without them for now.

I plan to implement multiprocessing soon, which should take care of the crackling issue, along with key scaling, fine tuning, and more precise frequency divider and multiplier controls :slight_smile: (105.0 KB)

1 Like

Thanks a lot!! that was it, it was getting a bit crackly while using some effects. But also, I tried the module on orhack, and I was getting particularly lot of crackle noise while moving the encoder on the overflow module sequencing the synth (with the init preset of orhak), something that with the previous version didn’t happen at all.
Thanks again for the synth, I’m really enjoying it. Sounds incredible and also you can get a lot of different sounds playing with it! Really looking forward to the multicore version of it and the upcoming updates, but also as it is it sound great!

1 Like

Here’s a release with many features, multicore, fine frequency multiplier adjustments, detuning, key scaling, and different feedback and modulation depth curves that follow the Yamaha CX-5 (similar to the DX-7).

Users of vj-fm, how would you feel if I removed the carrier of lane 3, and instead connected the modulators in lane 3 to the operators in lane 2? Alternatively, I can add a lane 4 that acts that way on lane 3. That should help get at some more of the DX-7 algorithms and help generate some complex sounds.

Next steps include writing better documentation, figuring out lane 3 / 4, and adding usability features such as aux shortcuts to jump to pages, and perhaps a low pass filter at the output.

New update:

  • Global volume control
  • All volume controls now have exponential scaling to match human hearing
  • Aux shortcuts!
    • Aux + low C, D, E = L1C, L1M1, L1M2
    • Aux + low F, G, A = L2C, L2M1, L2M2
    • Aux + high C, D, E = L3C, L3M1, L3M2

Decided against adding more operators, this is enough complexity. Happy with the current state of the patch, so this is pretty much final. Now to write more documentation…

Edit: Added documentation!

1 Like