Outstanding work! Thank you (and Emilie of course!)

1 Like

It looks like I messed up some links when copying the description from GitHub, and I can’t seem to edit my post anymore. Sorry about! Here are the the corrected links:

Thanks to @pyerbass for helping test module chaining! I managed to borrow a second Stages for the weekend and think I’ve got something working pretty well now.

Here’s how it works:

  • A Stages will only chain with other Stages that use the same firmware and are in compatible modes (mode 1 chains with itself, modes 2 & 3 chain together, and the other modes are correctly ignored).
  • A module in an incompatible mode will split the chain. So, with mode 1 - mode 5 - mode 1, the two modules on either end will not be chained, but mode 1 - mode 1 - mode 5 will have the two mode 1 modules chain
  • Changing the mode on one module triggers a rediscovery of neighbors in the other modules, so the chain will correct itself as modes change whether you’re adding or removing modules from the chain by changing mode

A preview build of it is attached, and I would be very grateful to anyone willing to try it out. I’ve only been able to test it with two modules, but it should work with more :crossed_fingers: It has also been updated with the latest version of the official firmware, so has the new sequencer orders pichenettes just added.

stages-bipolar-chaining-test.zip (433.0 KB)

5 Likes

Thanks you a million!! I’ll give it a shot with 5 modules!
Just kidding, I’ll have to stick with two

Thanks again!!

1 Like

just got my third Stages in the mail and can confirm this is working with all three. haven’t really put it through the paces or anything but switching modes forces all chained modules to re-assess their relationship to the others so looks fine to me!

2 Likes

Wow 3 stages! if you feel to give a try to this one, you won’t even need an external quantizer with this firmware

3 Likes

Ok This firmware is awesome. I will pass on commenting the easy access on Ouroboros and 6x DAHDSR and focusing on the addition to the original firmware in mode 1 and 2.

Yes these new features are adding a level of complexity to the original firmware, but what I find admirable is that they stay 100% in the spirit of the original: you have to take the time to learn and practice, but then it becomes tools to build bigger things and you don’t need to get back to the cheat sheet every time. The visual feedback makes perfect sense.

About the original firmware enhancement:

  • having access to bipolar is a big deal, especially for oscillators (green looping segments), the sound is much better in bipolar mode

  • The range feature is great and makes the “extra slow lfo mode” obsolete

  • The quantizer is just instant magic! It quickly becomes a staple! I love how smart it is with so few settings: use the fader to transpose within the scale to relative minor or major, and you can send the result to a second segment in chromatic mode to set in in the right key.

  • Re-trigger ramp setting works perfect for MATHS tricks. Tested on harmonic ratios of oscillator, works perfect

  • Audio-rate ratio clocking lfo is great, so is the tracking of start and end value (VCA!) I think these two should be considered for the original firmware

As for the advanced segment generator, it is great!

  • Random segments feel so natural to use and integrate everywhere. I just cannot believe that we can turn this thing into 6 Turing machines!

  • The yellow attenuator is more than convenient, it allows to have attenuation and offset, which is a magical performance tool combined to a quantizer (crazy arpeggios), it is also an inverter, which allows to have the missing ramp shaped LFO that is not included in the original firmware

  • The logistic map is just fascinating!

  • The rise and fall slew segment is great to have as there is literally to patching of Stages that can allow to do that!

So thanks a million for this firmware! If you are using stage as a core module of your system (meaning if you are ready to learn and memorize what it can do), this new firmware will you add a little extra things to learn for a really high result!

Features “proposals” (because “request” would be rude at this point) Advanced segment generator

  • The single ungated random segment does the same thing when its looped or not. Why not use the looped version for a smooth chaos such as Lowrenz attractor such as O_C or Streams easter egg, with fader for speed and knob for “Rho” https://ornament-and-cri.me/user-manual-v1_3#anchor-low-rents or something inspired by the Peak random LFO mode, or the Y channel of marbles

  • Green rise and fall slew segment: proposal for use of combos: button+slider could be quantization, because there is no other way to have quantization with different glide for rise and fall. Button+pot could invert the rise and fall curves.

  • I noticed that the original doesn’t gives any uses for the pot in red looped gated mode… how about “probability to generate the pulse when gated” That would allow to make a bernoulli gate as single segment! And maybe a probabilistic gate seq in group? Not sure…

  • I don’t know if it would be doable but it would be really convenient that every “quantisable” (yellow) segment in a group have the same quantization setting

5 Likes

I take note that in the main firmware it would be interesting to include audio-rate tracking for the looping single green segments (*), and that the small knob could be used as a probability control for patched, looping, single red segments.

(*) Note that the LFO code is not band-limited, so even with good audio-rate tracking, we’ll get aliasing from the LFO code itself! Maybe it would be wise, if the detected signal is at audio-rate, to use band-limited wavetables instead of the LFO code.

7 Likes

@pichenettes Thanks for considering these comments! one thing in this firmware I feel would be 100% in the spirit of the original and finally allows VCA:

Ramp segments track start and end value . Previously, ramp segments would track end value but sample and hold start value. This gives you:

  • Built-in pseudo VCAs: For instance, in an ASR (green, looping red, green), plugging your signal into the red’s CV in will appropriately attenuate it by attack and release.
  • Built-in pseudo crossfading: For instance, ramp-step-ramp-step (GYGY) with two signals going into the step segments will crossfade between the two signals every time it receives a gate. Ramp-hold-ramp-hold looping continuously crossfade.
1 Like

Wow, thanks for the wonderful review and feedback @pyerbass! Really glad you’re having so much fun with it. And thank you again for your help with chained modules! I ended up buying a second Stages :smiley:

That’s really great to hear. Coming up with the UI was definitely the hardest part. Avoiding hidden state as much as possible and keeping the controls as consistent and intuitive as possible is really important to me.

To be honest, I’m somewhat unsatisfied with how the random segment feels so disjointed. That said, people seem to really be enjoying it, and I’ve enjoyed it as well, so :man_shrugging:. Anyway, I’m a bit of a sucker for chaotic modulation sources (thus the logistic map), and this sounds pretty fun. I use lower-renz all the time as well. I’ll play around with a couple algorithms and see what feels good. One of the nice things about chaotic modules is how the different outputs are related, but still distinct. That’s a little tricky to implement with Stages, but I’ll see what I can do, and just use independent chaotic outputs if I can’t come up with anything.

I’ll have to think about this one. It feels a little inconsistent with what green is, but using the CV input as a target value is already inconsistent, so maybe not a big deal. You can already accomplish this by feeding a quantized single yellow into a rise and fall green. As for inverting the curves: I’d probably have the secondary curve be linear as that seems a little more useful.

Fantastic idea. I had also been considering making the pot a divider, but obviously that’s pretty redundant with clocked LFOs. I like this way more. Testing out an implementation now :smiley:

What if applying quantization to the control segment of the new sequencer groups effectively did that? That kind of breaks how quantization works a bit (it’s applied when the CV values are read in in my implementation, which is how I maintain the same voltage scaling while re-scaling the slider) but I could probably figure something out.

3 Likes

Let me know if you’d like PRs for anything @pichenettes ! I’d be happy to isolate patches from the rest of my changes.

I’d be very curious how you would approach the audio-rate tracking. I adapted the code from Marbles and Tides 2 and have it flipping at 64hz, though I’m still constantly tweaking it. The other thing I’ve found super useful from Tides and Marbles is the adaptive reset interval.

I’ve actually been meaning to ask you about this. How difficult would it be to apply band-limiting to the LFOs when they hit a sufficiently high frequency? I’ve studied the ouroboros code a bit, but it hasn’t been clear to me how I would adapt the band-limiting code to the variable waveshapes (I do not have much of a background in signal processing). I would be grateful for any pointers you might provide.

1 Like

You don’t need to do it when they hit a sufficiently high frequency, you do it all the time to avoid awkward branching! On a slow LFO, it won’t make a difference anyway, because the high frequency content is extremely low (A sawtooth LFO at 1Hz has its first harmonic after Nyquist with an amplitude of 1/15625)…

Some refactoring will be needed because the code converting the phase into the waveshaped signal is no longer a pure function. But it’s doable!

The variable sawtooth code is already there. The transition between band-limited triangle and sine doesn’t need anything, it’s a mere crossfade. What needs to be written is code for the triangle to trapezoid to square section. Or one could be lazy and just limit the slope of the trapezoid so it never reaches a square at high frequencies!

One thing to look at: CPU usage. I fear that 6 single looping segments, clocked at audio rate, with the extra-burden of band-limiting, will eat too much CPU.

2 Likes

@qiemem loving your firmware branch. i know that you’ve crammed a lot of options into the yellow segment hold-button-and-move-slider “menu”, but i would looooooove an option where it gives you 5v range of 1v increments so I could send a melodic sequence into it and use the slider as a manual octave precision adder!

Glad you’ve been enjoying it! That’s a neat idea. I’ve created an issue to track it. As I mention in the issue, there’s a few difficulties. The main one to me is that this isn’t really quantization (it’s only quantizing the slider), so seems strange to put with the existing scales (slider + button), but not sure where else it would go. Anyway, thanks for the idea! I’ll think about it.

Oh interesting and good point. I hadn’t thought about it that way. It’s true that it’s not quantization because it wouldn’t quantize the incoming signal. I guess part of why it occurred to me is that I often use a yellow segment (with the slider all the way down) to slew sequences for portamento.

Regarding the questions raised in your issue, I think for representing it, you could do a thing where the LED alternates between red and green on each flash, sort of analogous to how the turing mode segments are represented.

A cheap way to get that behavior might be to implement a octaves scale and use a second segment. The obvious downsides are that you need 2 segments and an external adder.

Hey @qiemem I was gonna update my stages to your latest firmware, but I noticed that there have been a bunch of commits since the last release. any chance you are planning to publish a new release soon that I should hold off for?

I’m definitely hoping to! Should be sometime this week I think. There’s a bug fix I’m rounding out now which has been the main thing holding me back from release. Then just trying to figure out where to cut it off in terms of new features…

4 Likes

Rad… I installed 1.0.2 but looking forward to what you’ve got for us!

1 Like

Just released v1.1.0! Some additions:

  • Full support for chained modules!
  • Updated with the latest extended sequencer version
  • A smooth chaotic mode for random segments
  • Probabilistic gate generation
  • Time ranges for ramp segments

And more! Check out the release page for details.

Thank you to everyone who helped with this release!

Also, check out this great video overview of the firmware and extended sequencer by Peakae (does not include v1.1.0 updates):

Finally, thank you to pichenettes for help with band-limiting the LFOs (not to mention the existence of this wonderful module)! Unfortunately, I haven’t been able to implement it yet due to performance problems, but I’m still hoping to get it in.

7 Likes