< Back to IRCAM Forum

Modalys 3.4.5.b2 is available!

Hi Robert !

Congratulations with the new version finally cracking the issue of getting explicit controll over accesses. It is really fantastic!

I have verified the “feedback-loop” patch and have a few comments:

  • there is no need for the arithmetic controller, it can be left out entirely still creating the force-feedback!

  • values for “Amplitude@value” and “Pressure@value” were swapped. Getting them right also results in a sound closer to the original (in LISP).
    However I note that it’s the relation between amplitude and pressure which is determinant (as they both gets intermingled in the feedback). Either amplitude is large and pressure small or vice versa. Too big values blow up Modalys.

  • is there a getinfo(“access-position” …)? With all of access-force, access-speed and access-position available for getinfo(…) you can get to know absolutely anything about access you want. Access-possition might be useful in similar feedback scenarios or for displaying how an object behaves when excited.

I have included a slighty simplified and corrected version of the feedback-loop patch that still creates delightfully weird sounds.

All the best Hans Peter

feedback_loop-v3.maxpat (27.5 KB)

Hi Hans Peter,

Thanks for the simplified patch! (and for fixing the dynamic values inversion! I was seriously wondering why the sound was so different! you saved my hours of helpless debugging…)

Yes, getinfo with access-force/-speed/-position/-admittance is on its way! (for 3.4.5.b3…)
I am also considering getting the global “energy” info with the same method (by passing the variable name).

For the explosive aspect of feedback loop, we can certainly use the max() function at some point in the expression.

Robert

Hi Robert !

What a lovely day in nonlinear heaven I had today ! I am so Happy you finally cracked this force-feedback scenario.
Many weird functions are possible (for the time being I have 6 different ones - all sounding odd and very nonlinear).

Yes, I think the max() function could be helpfull in making some sort of output protection.
I will look into that. Maybe it can provide some expression controller example that can be useful in other scenarios as well.

Until soon! Hans Peter

Wonderful!

For the sake of the expression controller, I am generalizing the function syntax within an expression:
{function name}("{type}" “{object name}” {parameters})

Robert

Hi there!

Concerning the explosive values in the feedback-scenario I had a go today with max(-1,min(1,inlet(1,1))) in an expression controller.
It performs fine as a clipping function on output values. And when mingled into the feedback it turns itself into yet another delightful nonlinear distortion device.

However what would be needed is a really fast limiter. The fewer samples it takes to react the better.
Does anyone have suggestions/examplecode/gen code/MatLab scripts or the like demonstrating a fast limiter algorithm?

Best Hans Peter

Hi there!

I am providing a more elaborate version of the feedback-loop patch for others to explore.
I have broken down the original nonlinear expression into several expression for more modularity.

It includes various nonlinear functions to try plus clipping and a highly nonlinear parameter to explore.
Clippings can be applied before or after input to the nonlinear function and will deeply color the sound.

The nonlinear parameter to explore is based on a speed connection. With a speed=zero it acts as making partials on this feedback string.
It can create totally wild and unpredictable sounds. Explore with caution as it easily blows up modalys.

A word of caution: the patch is still experimental and some settings may blow up modalys, esp. when applying clippings during a sound or exploring nonlinearity too fast. If this happens just recreate the script and you should be back to normal.

Also there is subpatch in development for an AKAI EWI USB windcontroller unless you own one, please ignore this patch. The rest will still be functional.

Comments highly wellcome! A fast limiter would be great to help stabilising the patch. Any ideas anyone? Have fun!

Best Hans Peter

feedback_loop-v4.maxpat (179 KB)

Hi again!

One additional question:

Is there any way one could delay samples inside an expression controller?
Some of the limiter and filter algorithms I have found requires that.

In Modalisp there is a delay-controller and a last-sample-controller.
Is there any such thing in Max-Modalys? Fx getinfo(last-sample) or even getinfo(last-sample index)
where index tells how far back in samples one wishes to go.

Another approach would be to use an expression controller to store the necessary samples as synthesis runs along.
This could maybe happen using setinfo(dynamic-controller dimension index value)?

Or even let Max do it passing the delayed result back to Modalys via a point input+signal controller.
I fear however that this may not be sample accurate.

Any suggestions or ideas would be much appreciated!

All the best Hans Peter

Any reaction / ideas to the last question of delaying samples inside an expression controller?

Best Hans Peter

Hi Hans Peter,

Thanks for reminding this!
Indeed the idea of some mlys.last-sample and mlys.delay controllers makes sense, now that we have revived the mlys.expression.

But this is going to take too long to develop and stabilize. I propose to first release 3.4.5, and then do it in 3.4.6.
Reasonable, no?

Robert

Hi Robert !

Really fantastic with the new version 3.4.5 (b3).
I am at the checking right now and will respond within the various beta-testing subjects we already have.

I note already that fx. getinfo works again, which can potentially be useful for signal generation inside an expression controller.

Looking forward to dive in!

All the best Hans Peter

Hi Hans Peter,

Thanks for your testing and enthusiasm!
There are many fixes, optimzation and improvement to come in 3.4.5.b4.
In particular, we now have an expression function
r=getref("MyString)
which can be used as a variable once and for all within complex expressions (it is a pointer, basically).

Stay tuned,
Robert

Hi Hans Peter,

Check out the just uploaded 3.4.5.b4.
mlys.expression has gotten really reliable now.

Thanks,
Robert