Dev Delexander — Algomorph Pocket — Now available on the VCV Library!

Here I’ll share thoughts on modules I’m currently working on.

Today, that’s Algomorph Beta 3. I’ve just released new builds on GitHub for Linux, Mac, and Windows.

What’s changed? What hasn’t changed?

Because of significant changes on the backend, this new version is incompatible with old presets and patches. To avoid breaking existing patches, the plugin has a new slug. This means that installing Beta 3 will not overwrite Beta 2. If you want to delete the old version of Algomorph, you will need to manually delete the FM-Delexander folder from your Rack plugins directory. This way, you have a chance to migrate or archive the old patches beforehand. If you need the old build (Beta 2), it can still be found on GitHub.

https://streamable.com/mjuryq

Algomorph is now available in two sizes: “Algomorph” and “Algomorph Pocket”.

Full-size Algomorph has gained 3 additional inputs. These inputs, together with the original Morph CV and Clock (trigger) inputs, are all now user-assignable multi-mode inputs.

Depending on what setting is chosen (via the context menu, or via one of the several packaged factory presets), these inputs can accept triggers for expanded sequencing control (Reset, Run, and Reverse Clock), CV modes for control over things like Morph CV attenuversion, Modulator audio output attenuversion, Sum audio output attenuversion, and also auxiliary audio input modes for additional inputs to be mixed into existing operators, or the Wildcard Modulator option which routes to all Modulation outputs (but not the Sum outputs).

Optionally, those auxiliary inputs can even be set to multiple modes simultaneously…

Full-size Algomorph has also gained two additional outputs. One is a new “Modulator Sum” which complements the existing “Carrier Sum”. The other is a Phase output, which tracks the current state of Algomorph relative to the three saved Algorithms.

That Phase output is particularly interesting because of another significant change: the internal cap on Morph has been removed. This means, for starters, that the Morph Knob always has an effect across its full range of motion even if a constant +5V is currently present at a Morph CV input.

Standard Morph CV in Algomorph is scaled such that an increase in 5 Volts is equal to a change from one algorithm to another. Mapped to the Morph Knob, you have a 10 volt range of motion and access to all 3 algorithms. However, that mapping doesn’t give you access to everything. There’s more: the range of motion that the knob cannot cover, which includes the transition directly between the algorithms sitting at 8 o’clock and 4 o’clock on the knob.

This means then that 15 volts are required altogether in order to traverse the full linear space of morphing between all three algorithms. It is this 15 volt space that is then re-scaled to 0-10V and emitted from Algomorph’s Phase output.

So, this all can be exploited in several ways, including stacking multiple separate Morph CV inputs, selecting Double or Triple Morph strength, or using an “Ampliverter” knob or input in order to multiply existing Morph CV by up to 3x. At triple strength, -5V = 0V = +5V. That is, every 5 volts corresponds to 360 degrees of Morph.

Once you’ve done all that, try connecting the Phase output to the input of a phase clock (like ZZC Clock). Algomorph is now functioning as a phase-summer and/or phase-multiplier. Trigger output from that clock can now be used as an interesting source of rhythm which is related to that of the modulation at Algomorph’s inputs.

The phase output defaults to 0-10V, but in the context menu it can be changed to +/-5V. This latter setting is handy for chaining to a second Algomorph’s Morph CV input, for example.

Full-size Algomorph also gains a Morph CV attenuverter. This new knob is located at the center of the Morph Knob: an arrangement inspired-by (but reverse-to) the double-knobs featured on some Happy Nerding Eurorack modules. But, it’s also more than that…

This new little knob is actually an Auxiliary Knob which can be set to one of 11 modes. Each mode is implemented as a separate parameter behind the scenes, and your choice of mode only affects which knob is currently shown. This is the same as the implementation of the LPG knobs on Macro Oscillator 2 in the Audible Instruments plugin. This means that each “Auxiliary Knob mode” can be individually mapped for simultaneous CV or MIDI control.

Algomorph Pocket loses the Clock input of Algomorph Beta 2, but it gains an extra audio input (a Wildcard Modulator) and an additional Morph CV input (now with configurable strength from 1x-3x).

The Wildcard Modulator idea originated as a mode from full-size Algomorph. The audio that arrives at this input is sent to all four modulation outputs. Try adding a 5th operator tuned to a sub-octave ratio and sending it to this input with careful (or enveloped) attenuation. Or run it hot… Full-size Algomorph features Wildcard Modulator Gain as one of its Auxiliary Knob modes, capable of settings up to 2x.

Algomorph Pocket’s knob also has some smarts of its own. When one of the CV inputs is connected, the knob changes from a Morph Knob to a Morph CV Attenuverter. Again, this is implemented as separate parameters on the back end, so each “mode” is separately and simultaneously controllable via parameter mapping.

For both modules, the strength of the click filters can now be adjusted from the context menu. In Algomorph Pocket, there is also a context menu setting to adjust the gain of the Modulator outputs (5 settings from -24dB to +24dB). In full-size Algomorph, this functionality is instead offered via a dedicated Auxiliary Knob mode.

For the display (graph visualizer) there have also been a few updates. Another 285 graphs have been added to the visualizer’s repertoire, corresponding to graphs for 1-, 2-, and 3-operator algorithms. This means that the display now properly shows when an operator has been disabled. It also now shows a big question mark if the chosen algorithm can’t be visualized (like if it has no obvious carriers).

https://streamable.com/tqxy8a

Speaking of algorithms which lack obvious carriers: now, users can forcibly mark operators as carriers by clicking on their corresponding modulator button (as long as no operator is currently selected: if that were the case, then clicking a modulator button would instead create a connection line).

I struggled for a long time with how to visually indicate that an operator was a forced-carrier. I started with using additional colors, but found I couldn’t configure a working color scheme that wouldn’t exclude use by color-blind individuals. I tried using blinking, but it amounted to a whole lot of blinking when you factor in the blinking involved in Edit Mode and the potential blinking that can result from VU lighting. It was modules from Instruo that gave me the stroke of inspiration to add moving indicators within the existing ring lights.

I was so pleased with this addition, I back-ported it to the Algorithm lights. Now, the Base Algorithm is indicated by a rotational indicator, while the algorithm/morph-state that you are actually hearing is what determines the brightness of the rings themselves. I think this is far clearer to parse than the old solution which involved relative differences in brightness.

https://streamable.com/irm7qj

If forcing modulators to also act as carriers isn’t weird enough, there is also now an optional alternate mode of operation for the operator connection logic. This mode can be accessed from the contextual menu as “Alter Ego Mode”. In this mode, there are two significant changes:

  • Creating a horizontal connection line between an operator button and a modulator button no longer disables the corresponding operator. Instead, audio is happily routed horizontally.
  • Algomorph no longer performs any automatic detection of carriers. If an operator is not forcibly marked as a carrier, is not acting as a modulator, and is not being modulated, then Algomorph’s visualizer will treat it as disabled.

There was a bug in the original release of Algomorph Beta 2 (since fixed in a recent maintenance update) which caused the Morph Knob not to respond to module randomization (thanks @unlessgames for help with this one!) Now, with full-size Algomorph, there are really a whole lot of knobs which respond to randomization (they’re just all mostly hidden). To make it less daunting to manage, certain Auxiliary Knob modes have had their response to randomization turned off.

Still, sometimes you might not want to randomize any of those knobs at all, and rather only randomize the algorithms (or a single algorithm). To facilitate this, I’ve added a new dedicated Algorithm Randomization menu. This menu can be accessed by right clicking on the connection area between the operator and modulator buttons: the place where all the connection lights light up.

I think that covers just about everything. The brightness of the glowing ink has been reduced; before, it was embarrassingly brighter than the module’s lights! Visual settings (like enabling/disabling glowing ink, or VU response in the lighting) can now be save as defaults, so they will persist between modules and resets. For full-size Algomorph, the Auxiliary Input modes can also be saved as-default. Undo/redo has been added across every user action. A lot of refactoring and restructuring has gone into the code on the back end.

When I started making Algomorph, all the way back in March or so, it began only as a napkin sketch for an FM algorithm module: 4 inputs, 5 outputs, 8 buttons, and light-up connection lines. The concept at the time didn’t even store multiple algorithms, let alone allow for morphing! As I’ve developed the module, released betas, received feedback, fixed bugs, added features, and done a lot of testing of my own, my own idea for what the module could be was constantly morphing itself.

I also put a lot of thought into what the module should be, which has had a sizable impact on the current design. For one thing, there have been multiple features that were once fully implemented in development versions but have since been removed, like some auxiliary input and knob modes. Another perhaps more clear example can be seen in the design of the new Algomorph Pocket and how it differs from the identically sized Algomorph Beta 2.

I spend a lot of time daydreaming about making a physical Algomorph module, to center a small FM rack, and the design of full-size Algomorph reflects this. I think that touch-screen use in VCV Rack can also improve as a side-effect of this design direction. At present, there is a “Display Button” on the panel which does nothing. In the future, it would be used to access an on-screen menu with configuration options (as an alternative to the contextual menu), as well as providing access to alternate visualizations or the ability to turn the display off.

I’m eager to hear thoughts from anyone interested to test.

Merry morphing.


Previous threads about Algomorph, for reference:

16 Likes

Wow. Great work. Looking forward to trying it out. Thanks very much.

2 Likes

i just installed this and have only played around with it for 20min or so but great work, thank you for providing it for free. you can tell a lot of thought has gone into it. all the menu options are great. looks nice as well.

1 Like

In my view it’s “paying it forward” in thanks for all of the great work that’s been done by open source developers in this community and adjacent communities. I definitely wouldn’t have been able to make these modules if I didn’t have all of that code for reference.

5 Likes

I released a small update. In the last version, the Wildcard Modulator was being added to the Modulator Sum output four times over. That’s a little wacky, and I think the Mod Sum output is more interesting without the Wildcard Mod anyways (it’s easier to add than remove, and it’s already modulating all the other modulators too), so now in the current version the Wildcard Mod has been removed from the Mod Sum entirely.

In case that has broken anybody’s patches, there’s a new option in the context menu which re-enables adding the Wildcard Mod to the Mod Sum: but only once this time.

Either way, because of the fact that summing all the Mod outputs by hand would incur the original 4x Wildcard Mod behavior, the Mod Sum output carries a unique mix of audio which is morph-dependent and therefore not so easily derived without Algomorph’s help. I try to use that as a litmus test for adding new features to these modules, though sometimes convenience wins out (like with some of the gain and attenuversion features).

Given that the carrier sum is de-facto the “sound” of an FM algorithm, turning attention instead to the sum of all modulators is interesting. It’s a kind of inside-out perspective on any given FM algorithm. Try oscillating back and forth between carrier sum and modulator sum, or mixing in a bit of the modulator sum on high-velocity notes or accented beats.

Been following this for a while. I cant wait for the final version! :slight_smile:

1 Like

Thanks for saying so! It means a lot.

Right now I’m in the middle of some unexpected major life changes, including a move halfway across the country, and it’s looking like it may be a while before I’m settled in. So unfortunately for now I won’t have the time I’d like to spend in order to wrap things up for a release on the Rack Library.

In the mean time, I’ll still be checking in here and there listening for any feedback, ideas, requests, and the like. So far things have been relatively quiet since that one time I released a crashing build of Beta 1, and I’m hoping this is a good sign! :slightly_smiling_face:

Happy new year, everyone.

2 Likes

Great updates to the already really fun previous Beta builds. Hope life bends back into better pace for you. Thanks! Will do some testing in next days and report back if anything is amiss/should be changed/etc…

1 Like

finally some time to play with these. All seems to work as it should, no issues found, maybe get 'em up on the library @delexander ?

1 Like

Is this still not in the library? If so, why not?

1 Like

Just want to drop a little note here to say this project isn’t abandoned. This development hiatus has gone on way longer than planned, but I’m finally in a spot where I can get the ball rolling with my hobby coding again.

I’d planned to overhaul the polyphony in these modules prior to release, implementing SIMD where possible. I’m postponing that feature update for now, and I think instead I am going to remove the current polyphony and replace it with inputs that sum poly to mono. I’d rather somebody drop Algomorph into a patch and say “Oh, it’s not poly”, than the possible alternative “Oh, it turns my beautiful patch into a stuttering mess”.

I’d also planned to put together a polished manual in PDF format as well as something Aria-Salvatrice-style (like this) prior to Library release, but I’ve decided to focus on getting some passable plain text assembled and let it onto the Library like that. I’d like there to be something sensible available the first time an unsuspecting user checks the context menu for a manual.

I also need to fix the communication between the display (widget) and the back-end (module), as it currently isn’t thread safe. I’m pretty sure this is the cause of the display glitches I’ve seen occasionally. I haven’t seen anyone else mention them, but they happen sometimes. This should be straightforward to fix with a ring buffer.

One more thing I’d like to add to the module is an option for different morph/cross-fade curves between algorithms, rather than only linear. I’d probably just add this as an option for the Morph Knob, but maybe it would be interesting to apply it to all Morph CV input too.

In other news, @KautenjaDSP recently released the Mini Boss module on the library as part of the Potato Chips plugin. This oscillator is a single-operator version of a Sega Genesis FM chip emulation (more specifically the Yamaha YM2612). So, now you can sorta stick Algomorph inside of a 2612 and mess around with the algorithm routing. I think that’s rad. I snuck a beta version of Mini Boss into the Beta 3 announcement video at the start of this thread: the voice on the right is built with 5(!) Mini Boss modules. The 5th operator is acting as a wildcard sub-octave modulator using Algomorph Pocket’s Wildcard Modulation input.

Also since I last posted, @stoermelder has added CV control over phase to the Transit module. Transit allows for seamless cross-fading between module presets. This means that if you start with Algomorph, add 4 oscillator modules, and then attach Transit to those oscillators, you can not only morph between algorithms (via Algomorph) but also morph between different sets of operators (via Transit).

Here’s a video of a demo patch which showcases this combination, using Algomorph-summed and -multiplied phase to drive Transit, a second ZZC clock, the gating of operator envelopes, operator pitch, and Algomorph’s Wildcard Modulation Gain knob (thanks to μMap). The sixth operator is modulating the amplitude of the carriers and is being modulated by Algomorph’s Modulation Sum output:

– dLx

7 Likes

Welcome back! This is an awesome instrument now and it’s going to be so awesome whenever it reaches its final form. I know all about life finding ways to kick unpaid dev projects down the road! :slight_smile: Applause to you for getting back at it.

2 Likes

Glad to hear you’re back at it! I can’t wait to see what’s next for AlgoMorph. It certainly makes the FM experience in VCV more unique and hands-on. Not to mention it pairs so awesome with MiniBoss :wink: I’ve not looked at the code in a while, but if the data being passed between threads is relatively simple, you might be able to use std::atomic to get thread safety without much headache.

2 Likes

Plans quickly changed. The Rack 2 beta is now here!

I fixed the communication with the display (hooray thread safety), and so seeing as Rack v1’s days are now plainly numbered I decided to go ahead and release Algomorph Pocket to the library now. The full-sized module is disabled in this release, but is still available for testing via simply changing disabled to false in the plugin manifest. The aforementioned feature and manual updates, as well as more fanfare, are postponed to the next release (for Rack v2).

The v1 Library ain’t dead yet! :slightly_smiling_face:

8 Likes

:+1:

2 Likes

That’s alright, just in time to re-build for V2!!! Jokes aside, welcome to library and look forward to giving it a play soon!

3 Likes