mnemonicdevices / md001

Issue and project tracking for MD-001 Juniper
6 stars 0 forks source link

Chaos-based modulation #34

Closed cdromain closed 1 month ago

cdromain commented 1 year ago

Feature request & motivation

Would be amazing to have chaos-based modulation as a wave option besides traditional waveforms and random, like a Lorenz or Chua strange attractor (or other - see Vult Caudal's different approach). Chaotic modulation can be more interesting than pure random as there is some kind of pattern going on, within finite boundaries, which makes it a mix of random and deterministic. Love those drunk/super slow modulation sources for drones and I think such thing would feel right at home within the Juniper, extending its palette quite a bit into less ventured territories, making it even more versatile.

image Source : Lorenz system - Wikipedia

Details

Modules implementing such chaos-based modulation

Additional references

ost-ing commented 1 year ago

I really love this feature request. I think you are right, it would suit Juniper quite nicely - providing I can find a way to make it fit nicely with the workflow, that will be the main challenge here, especially if multiple outputs are required as you suggested.

I'll need to do some more reading into this topic to get a greater understanding of what is required, thanks for the links they are helpful.

Or would it be possible to use Gin's additional inputs as outputs

Unfortunately Gins inputs cannot be used as outputs

cdromain commented 11 months ago

Sounds great Oliver ! Hope Chaos can find its way into Juni soon 😃 Lemme know if you have any question. Editing my post above to add Disting as another example of chaos-based source.

cdromain commented 11 months ago

Added another chaotic source to my original post, Vult Caudal - discovered it this week-end and should get my hands on one of the first units in the next days !

cdromain commented 11 months ago

Vult Caudal arrived 3 days ago 🔥 Super interesting, a totally different take on the chaos modulation as expected ! Got one of the first 4 modules out there and am waiting for Leonardo to publish more info and documentation about the different modes.

Added another module to my original post, Neutron Sound Dust of Time.

cdromain commented 11 months ago

Updated my original post again, with more reference information by Jürgen Meier (in German 😄 ) and 2 YouTube videos.

ost-ing commented 11 months ago

Updated my original post again, with more reference information by Jürgen Meier (in German 😄 ) and 2 YouTube videos.

Thanks! I'll try to find some time to study this soon

cdromain commented 11 months ago

Can't wait to see what this inspires you ! As you understood I'm passionate about this so don't hesitate to reach out to discuss and brainstorm together 🚀

ost-ing commented 3 months ago

@cdromain thanks for your patience on this issue I'm going to start implementing this ASAP

cdromain commented 3 months ago

@ostenning Your comment and 0.6.0 milestone got me real excited man 🤩 Patience is a virtue often rewarded - I'm looking forward to bringing some chaos to Juni's powerful modulation arsenal 🔥 As always, happy to help in any way I can and discussing it further - you know where to find me ! Chat soon, cheers

ost-ing commented 3 months ago

@cdromain I've got a concept ready.

There is now a new added Lorenz waveform which computes the 3 Lorenz equations, X Y and Z are morphable with the Morph parameter (similar to how Sine and the other waveforms work).

The frequency changes how quickly the equations are calculated, which works similarly to how the Random waveform works. The higher the frequency, the faster the waveform moves. Phase dictates when it moves from one value to the next.

I think all that works fairly well - my main concern is that each channel operates independently from each other, and while you can Morph X-Y-Z, you cannot represent X-Y-Z all at the same time on 3 separate channels. The only way I can see something like this working is if I reconceptualize "Linked Channels" which will require architecture changes to how Juniper works.

cdromain commented 3 months ago

@ostenning You rock man 🙌🏼 Testing the alpha as I write this !

The linking of channels would be a great next move (ideally using channel N to control the 3 signals that would then be distributed on channels N, N+1 and N+2), but it's gonna be really useful already even unlinked !

How are X, Y & Z distributed on the Morph parameter ? I.e. Z at -50... ?

I have one feature request already - the possibility to view the attractor(s) as a XY map instead of the usual waveform oscilloscope. That would be really cool to look at, useful to understand and follow the attractor movement, and would also highlight the special nature of the signal vs a classical LFO. Like what is done in the Dust of Time :

Capture d’écran 2024-06-04 à 20 59 03

UPDATE after testing it tonight, modulating a Synth Tech E-352 wavetable (and analysing the signal on my DATA) - could not get the Lorenz to evolve in a smooth manner, could always hear the steps. The target expected behavior is a smooth, continuous, ever-evolving non predictable yet not random movement ✨I don't think the stepped random update behavior works here (as a slow rate means nothing happens between the equations updates and when there's an update the value jumps - all should be smooth and continuous, that's the organic beauty of this type of signal).

And not sure I get the relationship between phase and the resulting movement ("Phase dictates when it moves from one value to the next.").

Cheers

ost-ing commented 3 months ago

The linking of channels would be a great next move (ideally using channel N to control the 3 signals that would then be distributed on channels N, N+1 and N+2), but it's gonna be really useful already even unlinked ! (which is the case in other single-channel implementations like Stages for example)

I think Linking channels is not out of the question, as I already link the Recorders, but it requires a lot of re-thinking about how linked channels work in general. E.g. would there be different links? one for recorders, one for Lorenz attractors? Or would there be just one link for everything? Linking could also be handy for pitch and chords. Obviously though, some settings wouldn't be affected, and then trying to create a UI that ties it all together elegantly will likely require a bit of work. I'll create a ticket for it for further discussion

How are X, Y & Z distributed on the Morph parameter ? I.e. Z at -50... ?

Currently -50 is X, 0 is Y and +50 is Z. They are Morphed together with the same mixing equation used for CV and Out waveforms.

I have one feature request already - the possibility to view the attractor(s) as a XY map instead of the usual waveform oscilloscope.

Hehe - yes, I thought about this almost immediately, the time axis oscillscope doesn't really convey whats going on with the attractor, plotting X against Y, or Y against Z, would be more helpful - but this would only be available for the Lorenz attractor, so I'm not sure exactly how to reconcile the UI/UX of switching between oscilloscope and X-Y plot.

ost-ing commented 3 months ago

@cdromain So I've implemented Copy-Paste of channels, which actually "unlocks" being able to get all 3 channels of the Lorenz equations.

The workflow is like this:

  1. Configure a channel to use Lorenz waveform, set Morph to 0 so its using Y, also set the frequency as desired
  2. Copy the channel, and paste it twice into two other channels. This will copy the exact Lorenz state over to the other channels
  3. Use morph to configure the other channels to X and Z.

The downside, of course, is that you cannot modify the frequency all at the same time, so if you change one they will go out of "phase" and you'll need to re copy-paste them.

I'm not sure this is the best workflow, but its a work-around at least for the moment.

cdromain commented 3 months ago

@ostenning Thanks man, that's great news - glad to now be able to copy/paste channels, great workflow improvement 🙌🏼 And a clever workaround indeed !

ost-ing commented 2 months ago

@cdromain I've got a pretty rudimentary X-Y plot as you suggested, it works pretty well. Not finished yet, but it will be in 0.6.0, and I've removed the stair-stepped approach as you suggested, and reimplemented the algo so its better. I think it works well but I need to figure out what to do with the "Time" units which is a little ambiguous 👍

cdromain commented 2 months ago

Hey @ostenning thanks, that's exciting news ! Can't wait to test the new FW 🙌🏼