[PD] spring modeling/scanned synthesis

cyrille henry ch at chnry.net
Fri Feb 16 08:39:18 CET 2024

Le 15/02/2024 à 06:19, Alexandre Torres Porres a écrit :
>   Em sáb., 27 de jan. de 2024 às 05:00, cyrille henry <ch at chnry.net <mailto:ch at chnry.net>> escreveu:
>           Now let me see if I can get the main principal, is it like you have wave table points that move according to spring like motions when excited and evolving through time?
>     it's the masses that move!
>     if you want to understand more, look at :
>     http://www.chnry.net/ch/IMG/pdf/-2.pdf <http://www.chnry.net/ch/IMG/pdf/-2.pdf>
> ok, the masses move, but they move according to a "spring like motion"
I don't understand what is a "spring link motion".
Masses moves according to newton law.
Lot's of different behaviours can be modelled with MSS model...

  as I said and each mass represents a point in a wave table, right?

that's the canonical definition, but you can also put the force applied to the mass in the table. or the velocity.
or link length etc

  Also, you have a chain of masses and the last one (the last point in a table) connects back to the first one, huh?
that's one possibility. You can also attach both end, like in a guitar, or only one, like in an organ pipe.

You can use a membrane better than a string, a random network, make different kind of connection between masses, or using a non linear connection between them.
You can use a virtual bow, or an clarinet hip to create the movement.

And there are a million more possibility.

you can have a look at few of chdh work :
this is 100% scanned synthesis.

> Anyway, just had some time to look back on this. And I've been checking some Spring-Mass-Systems.
>   I was checking the code of the Spring class in SuperCollider, I was able to port it to Pd. See https://github.com/supercollider/supercollider/blob/db7eed2a17c361503dbc7f70a557874b6001e3cd/server/plugins/PhysicalModelingUGens.cpp#L77 <https://github.com/supercollider/supercollider/blob/db7eed2a17c361503dbc7f70a557874b6001e3cd/server/plugins/PhysicalModelingUGens.cpp#L77> note the code says
> /// some basic physical modeling ugens - julian rohrhuber 1/04
> // these are very simple implementations with cartoonification aspects.
> /
> And in fact, I was checking this other mass spring damper system implemented in Max (that I also ported to Pd) and it seems a much more robust system with more meaningful parameters based on actual physical quantities https://www.youtube.com/watch?v=2rFkZD51mT8 <https://www.youtube.com/watch?v=2rFkZD51mT8>
> How do both compare to pmpd? 

you probably noticed that they all use the same equation,
The 1st is just a very basic implementation : it's not possible to define a non-linear link for example.
The 2nd one solve them in a very simple scenario : 1 mass and 1 spring. So it's not possible to create other network.
The beauty of mass/spring system is that it provide an easy way to compute a very complex movement, when it's not possible to find analytic solution.

Thanks to pd flexibility, pmpd offer all brick you need to create complex movement.
But if you just want to play with meaningful parameter without understanding the physics, then pmpd is not for you.
anyway, pmpd was not about sound synthesis, but about control data synthesis. It is now possible to generate the same stuff with ~ objects, but you have to see it as a way to experiment. It's clearly not a ready to use PM synth.

Is there any canonical model or it's one of those things that is a matter of taste and subject to things like desired efficiency versus realism? Do any of you know of more models out there in Pd or other computer music systems such as Csound, MAX, etc?
there are lot's of software dedicated to MSS, the equations are all about the same.
But physical modelling is broader than MSS.

> I've also been having fun with Sine Waves with exponential decay envelopes. Like with the [decay~] object from ELSE which is like the Decay class in SC - a one pole filter that you set a "t60" decay time in ms (time it takes to decay 60dB). This way you have a good control on the frequency and decay time. Another option is to just [resonant~] from ELSE, which is also like SuperCollider's Ringz.ar, excited by impulses. This is a resonant 2nd order filter that "rings" for a given decay time and frequency. How does this compare to "Spring Models"? 

you can easily model a 1st or 2nd order resonant filter using pmpd audio object. But you will control them using damping and rigidity, not frequency and characteristic decay time. They are linked, an abstraction can switch from 1 to the 2nd, but that's not the aim of pmpd.

How is Spring "springer" than creating damped oscillators with [decay~] and [resonant~]? Also, for reference, I found this in Pd as well https://www.youtube.com/watch?v=zW7y5yb0YWQ <https://www.youtube.com/watch?v=zW7y5yb0YWQ> that I am relating to [resonant~].
> Who's got more references?


I don't know if you can still find stuff about cordis anima from ACROE.

there are lot's more, but I don't keep bookmark every-time I see a MSS synth.


> Cheers
> thanks
> Alex

More information about the Pd-list mailing list