Quostate Dev: New Module "LSystem"

Hey everyone, this is my first VCV Rack module:

LSystem is a polyphonic sequencer where you can enter up to 7 rules using text characters. Each of these sequences a series of <scale degree, duration> pairs and can repeat itself or jump to another rule if the degree of its final step matches the initiator of a target rule.

Every detail is explained in the manual, which I strongly recommend reading if you want to understand the full functionality, since it uses numbers and other characters that might not be “musically” intuitive.

https://github.com/HiddenSide/Quostate/blob/main/LSystem_manual_EN.md

Despite the cryptic look of the rules, you can get some interesting results out of it once you combine them well.

It’s an experimental module with plenty of room for improvement, especially in how rules are entered and displayed.

I think the module is close to its final version, though testing has been on hold lately because of everything related to setting up the builds, the repository, the manual, etc.

So, welcome to anyone who wants to try it out or test it. I compiled the Win, Mac, and Linux releases with GitHub Actions. I can only test it myself on Linux Mint with VCV Rack Free 2.6.6, and that build worked fine for me.

https://github.com/HiddenSide/Quostate/releases

I’d appreciate any comments, feedback, bug reports, or simply the fact that you install and try it out. Some interesting factory presets would also be very welcome :wink:

Quick reference of example rules:

1,1->1,2 -2,1/2 <1,3>,1 <1,3>,<1,2> r,r k+1,k

1,1 = Initiator: (Degree 1. Duration 1).

-> = Separator (Initiator → Sequence).

1,2 = Step (Degree 1. Duration 2).

' ' = A space separates steps.

-2,1/2 = Step (Degree -2. Duration 1/2, as a fraction).

<1,3>,1 = Step (List format: Degree 1 or 3. Duration 1).

<1,3>,<1,2> = Step (Degree 1 or 3. Duration 1 or 2).

r,r = Step with random degree and duration, drawn from the pool (if not empty) or unconstrained.

k+1,k = Step (Last r degree, increased by 1. Last r duration. (+ and - are not allowed for durations)).

2,1-><1,2:5,3:2>,1 2+2,1 5,2^0,1 s,2 *4

<1,2:5,3:2>,1 = Step (Weighted list: Degree 1, 2, or 3. Duration 1). Higher weight = higher probability.

2+2,1 = Step (Degree 2 increases by 2 on each repetition. Duration 1).

5,2 = Step (Degree 5. Duration 2).

^ = Replaces the space separator and applies a glide from the degree of the step on its left toward the degree of the step on its right, over the duration of the step on its left.

0,1 = Step (Degree 0. Duration 1). Not affected by the preceding glide.

s,2 = Step (Silence. Duration 2).

*4 = Number of repetitions for the rule (4).

Well, LSystem is now available in the library, along with a new module: MorphFastMini.

https://library.vcvrack.com/Quostate

MorphFastMini (MFM) generates a transition between an “init” voltage (-10V to 10V) and a “target” voltage (-10V to 10V) over a duration specified in clock pulses (1 to 64), according to the selected curve.

When triggered via the input and/or the Fire button, the transition waits for the next clock pulse to begin.

My main idea behind this module is to use multiple instances sharing the same Fire input, allowing you to gradually change several elements at once (filters, parameters, etc.), all perfectly synced to their respective incoming clocks.

They can also be chained using their EoT output and the “Same-step chain” context menu option enabled, so that when the first one finishes, it immediately triggers the next one.

https://github.com/HiddenSide/Quostate/blob/main/MorphFastMini_manual_EN.md

LSystem has undergone several changes; perhaps the most important is that it now only requires a 1 PPQN clock instead of 48 PPQN. Some extra operators have been added, along with a system to randomize rules based on a chosen style using a seed. It doesn’t work exactly the way I’d like yet (it can be quite chaotic), but it’s a great way to demonstrate how the operators work or to extract ideas while I continue to improve it in the future. I also added an Eval input to enable or disable rule evaluation, or to instantly switch to another rule by using Eval together with the Reset input.

https://github.com/HiddenSide/Quostate/blob/main/LSystem_manual_EN.md

Feel free to reach out if you have any questions or comments.

I’m experimenting with LSystem. Can the module output the “degree” values? I don’t think it can, but I thought I would ask.

The module outputs the degree as V/Oct (quantized to the selected scale and root note), so in a sense the degree information is present — but there’s no dedicated CV output that gives you the raw degree number (1, 2, 3…) independently. The closest thing is the Rule output, which tells you which rule is active, not which degree within it. What are you trying to achieve? If you need the raw degree as CV, I could look into adding it as a feature.

One thing I noticed while testing my module is that it could use a small display showing the current scale, degree, and note. I have that pending to implement. I’d also like the text of each step to light up during playback, though that’s a bit more complex.

If it could output the raw degree values, it could sequence modules that understand scale degree as 1.0-7.0v such as my Meander module does or circle of fifths degrees I-VII as 1.0-7.0v as Meander does. But, the number of modules that accept degrees CV is very small, so not worth adding, most likely. Thanks for the info.

That makes perfect sense. Let me analyze it further since I’d have to add another output (degree I = 1V, degree II = 2V, etc.), perhaps a small expander module would be better. Meander is a great module; I made one of my first patches with it, and I loved it, but I lost it when I migrated from Windows to Linux. I’ll let you know here when I have any updates.

One thing I noticed with LSystem is that one of your output ports has a white background border rather than a dark background border.

That’s right, it goes against the convention (dark background for the output). Thanks, I’ve noted it for the next update.

I forgot to mention an issue I had with LSystem. The gate output is essentially always at 10v except for a very short gap of 0v between the gate signals. I had to add some additional modules to make the gate work like a gate. Maybe I just didn’t understand your intent with this.

Yes, that was my intention. It’s listed as a limitation at the end of the manual. I did it that way to accurately reflect the duration of each step. In the next update, I’ll include a slider in the context menu to set the gate duration relative to the step duration. Perhaps between 10% and 100%, or something like that.

I have the expander up and running and I’m testing it.

https://github.com/HiddenSide/Quostate/blob/dev/LS-Exp_manual_EN.md

If you have time, I’d appreciate it if you could try it out and see what you think.
I studied the Meander manual and its connections a bit and adapted the expander for good compatibility.
I used the same names for the scale inputs and outputs and mention “Meander” in several places. If this is a problem, please let me know.
The Degree output follows the format <degree.octave> and the root output delivers the V/Oct of the note.
Then I realized that Meander’s Root input maps the voltage to an index, perfect for harmonic modulation!
So I included an option in the context menu to return that format.
There are many cases I still need to test.

There were also several changes in LSystem, especially regarding synchronization and phase issues. It’s now much more precise. The builds (without a release) for each platform, for anyone who wants to test them, are at the bottom of this page:

(I had a problem: Although I deleted my modules from the plugins folder, since I wasn’t subscribed to my plugin in the library, when I pasted the build, it didn’t detect the expander due to the whitelist in settings.json. What I did was subscribe to my plugin (not each individual module), then I deleted the Quostate folder and pasted the .vcvplugin file again.)

https://youtu.be/C4nNW9VgQLw

testEspander2.vcv (6.0 KB)