1. IMPORTANT:
    We launched a new online community and this space is now closed. This community will be available as a read-only resources until further notice.
    JOIN US HERE

Can someone create an ensemble that emulates phymod 2?

Discussion in 'Building With Reaktor' started by Ben Luton, Mar 7, 2017.

  1. Ben Luton

    Ben Luton New Member

    Messages:
    8
    Once upon a time, there was a physical modelling program called phymod, which has been discontinued. It was by far the coolest physical modelling program I have ever encountered, clunky but probably even cooler than Kaivo.

    Would anyone here attempt to recreate the program?

    Here is some info on the program from http://www.csounds.com/jmc/Articles/Pm/PhM.html (The program is also attached but I'm afraid only runs on XP or older.):

    Physical models of strings and plates using a simplified mass-string methodby Josep M. Comajuncosas - Barcelona / jan.´98

    Introduction
    The next set of orquestras are based on the documentation included in the freely available Demo-version of PhyMod V2.0., a nice program to design physical models simply by linking masses in a graphical environment. In fact I liked so much the simplicity of the approach that I decided to port some instruments to Csound. Thus, though the powerful graphycal interface is lost (and the ease to make complex structures without virtually any effort), you can use the designs directly to make music, and not only to generate sound samples. You can always make the design quickly with PhyMod, test it and, if you like the sound obtained, code it to Csound.
    The instruments included here should help you to do it.
    You should find PhyMod at http://141.84.217.141/phymod , though I´m afraid it is no longer available.
    You are warned, though. Don´t expect the elegance and computational efficiency of Waveguide synthesis here. The models compile incredibly slowly, and the implementation is extremely crude.

    The mass-spring paradigm
    The term physical modeling is applied liberally to all the hardware or software devoted to the simulation of mechanical events, however elegantly or inelegantly this is achieved.
    (From PhyMod manual)

    Here the implementation is rather basic. Next is a summary of the Principles in the help file of PhyMod. Consider a mass m tied to a spring whose damping is z and whose restoring force is k. The sum of all forces must be zero, then we have

    Force of inertia + Restoring force + Friction force = 0

    -mx´´-kx - zx´ = 0 (x being the displacement)
    x´´+(k/m)x+(z/m)x´= 0 being w=sqrt(k/m) = oscil. frequency
    then of course x´´= -F/m

    To discretize the system, let´s suppose sr<<w and then the following approximations are reasonable

    x ~ x(n)
    x´~ x(n)-x(n-1)
    x´´~ x(n)-2x(n-1)-x(n-2)

    Then, for example, after some substitutions you get
    (for 2 masses m1 and m2 , tied with a string; force from mass 2 to mass 1)

    F1(n) = k(x2-x1) +z(x2(n)-x2(n-1)-x1(n)-x1(n-1)) = -F2(n)

    x1(n+1) = F1(n)/m1 + 2x(n-2) -x(n-1)

    To sum up, you must calculate all the forces that act on masses, summate them and then use the forces to calculate
    the new positions x(n+1) for every mass. If you don´t see clearly how the stuff works, please look at PhyMod help.


    Implementation
    In the simplest cases (dealing with 1 or 2 masses only) a direct implementation will be enough. For an arbitrary number of masses in a simple relationship (a string or a plate), I used the zak system to allocate all the variables needed (previous, actual and next positions of masses and actual forces, so you´ll need 4*n variables, being n the number of masses in the system). However, for arbitrarily complex structures the necessarily direct implementation can lead to an incredibly messy code.
    Anyway, some designs are a good practice to get used to the new zak opcodes.

    Examples
    [​IMG] A damped sine wave can be generated simply by linking a mass with some energy (initial position and/or velocity different from 0) to the ground. The ground is effectively considered as an infinite mass, and keeps the system from becoming unstable. You can choose the initial position to be 0 (but some initial velocity) to avoid that click at the beginning. The first 5 notes show the effect of varying the damping, the 5 next show how varying the restoring force k leads to different vibration frequencies. This could also be done with a different mass. In real string instruments a combination of different linear density (mass) and tension (k) is normally used, and fine tuning is done with slight adjustements of k.
    Notice also that this is a way to obtain extremely pure sine waves without table look-up. It is slower but much better, specially at low frequencies.


    The next example is very similar to the previous one, except that here we have 2 identical masses, one tied to the other and the second one grounded. The sound has now 2 main frequencies (it may be easy to predict them exactly).

    Two masses linked, and each one respectively grounded can be seen as an oversimplification of a real plucked string tied at both ends, like the real ones. Don´t expect a plucked string sound, though. It is more similar to a hammered metallic bar (?)

    [​IMG]After hearing the previous instrument, I thought what would happen if the number of masses of the simulated string was enough large. Maybe the resulting sound could approach more convincingly that of an ideal string. The instrument makes use of the zak system and, for simplicity, I initialized all the positions to 0 except for one mass. This should be like plucking the string at that point. You could even simulate the pluck and pick-up positions, though I´ve not implemented this possibility. The instrument sets a rich pattern of vibrations, and sounds cool at low damping values.
    A problem in the design of the instrument was to clear the zak space at init time, because the values are otherwise kept from note to note. The opcode that should do this, zicl, doesn´t exist yet. I wasn´t sure if igoto + zkcl worked okay for this purpose. So (forgive me) I clear manually the zak space with a second instrument between notes. Other tricks like this could work as well. In particular I thing it would be very elegant to activate an intermediate instrument which could clear the zak space, pick up all the p-fields and store them as global variables, activate a second instrument with the string model via turnon which would pick up those global variables and then quit (turnoff), like

    instr 1
    gip3 = p3; and all the remaining fields
    ;here clear the zak space (zkcl)
    turnon 2,0; trigger instr 2
    turnoff; then quit
    endin

    instr 2
    p3 = gip3
    ;all the stuff here
    endin

    but it seems more difficult in practice. However, you can keep the mass distribution at your own risk, that would be more physical maybe.
    Forget to use this instrument in polyphonic works, because the zak system would interfere completely, unless you reserve different locations for each overlapped note.


    [​IMG] Now suppose the string has a non uniform lynear density, which can be simulated simply by setting arbitrary values from a table to the masses of the system. The same thing can be done initialising the positions to some values derived from another table, something like the Karplus-Strong algorithm, but here with a brute-force method. This is by far one of the most complex instruments I´ve ever written. Notice that, though richly inharmonic, the timbre obtained is perfectly bandlimited, because there aren´t non-linearities in the system.
    pm5.mp3 : just with arbitrary initial positions
    pm5b.mp3 : also with arbitrary masses (this is what you´ll get compiling pm5)
    (both rendered at 44100 Hz and then compressed to mpeg layer 3)


    [​IMG]Let´s try now a different configuration of the masses. In the next dessign I used a plate structure (see fig.). The same could be done with an arbitrary number of masses but it could be too complicated. The sound can range from drum to bells like timbres very convincing.
    We can introduce some non-linearities in the system to get a richer sound. What in PhyMod is called a simulation of hammer action is merely a conditional statement which bypasses the link (that is, considers two masses phisically independent) when the position of one mass becomes higher (or lower) than the adjacent one. This is supposed to emulate a structure (periodically?) struck (?). Of course introducing a conditional statement causes the generation of massive inharmonic components even in a very simple structure. This is just what I was looking for...
    Like the previous one but using the string structure of pm5. Cool sound.
    pm8.mp3


    Conclusions
    Much more interesting than simulating instruments that have worked perfectly well for tens or even hundreds of years is to play around with the parameter sets to create instruments that no one has ever heard before.
    (From PhyMod manual)
    Could be true. In fact the sounds I got from those designs are certainly realistic, but I didn´t expect that sometimes metallic quality. May be the result of an oversimplification of the problem, or maybe a complete erroneus formulation, it doen´t matter. They are wonderful sounds. Very physical ;-) .

    Josep M Comajuncosas
    gelida@intercom.es

    ----------------------------And a short description from virtualsynths:

    PhyMod 2
    PhyMod works by physical modelling synthesis. It is a more complicated version of the waveguide synthesis found in the Yamaha SondiusXG. Rendering can be in realtime through DSP hardware, but there is also an off-line renderer for those without the hardware or for rendering more complex models. A sound is built up by placing elementary masses, feathers and dampers and setting their parameters. Their interaction can even be viewed in an on-screen 3D preview. Once a sound has been designed it can be triggered off using the mouse or using the microphone input (ie to create effects). PhyMod isn't really any good at creating real instruments (though it is theoretically possible, if very difficult, to create extremely realistic simulations), nor is it good at creating traditional synthesizer sounds. What is can do is create completely new types of sounds not possible with other types of synthesis.
    A freely downloadable only allows a limited number of masses and links and pops up with a message every few minutes. Registration costs $35 and lifts these limitations. The DSP hardware cannot be purchased but must be built according to an article that was published in ct, a German computer magazine, in Summer 1996.

    Go to the PhyMod homepage



    [​IMG]
    [​IMG]
     

    Attached Files:

    • Informative Informative x 1
  2. Paule

    Paule NI Product Owner

    Messages:
    7,555
    You can download phymod 2 here
    http://www.audiogrid.com/audio/

    A new method used for the creation of innovative electronical sounds is the Physical-Modeling-Synthesis which can be used to create virtual resonance bodies. Phy Mod 2.0 is a Physical-Modeling-Programm which can create virtual resonance bodies, i.e. defined by the programm as "sound-sculptures", on the screen. Not just sound-bodies can therefore be simulated in an astonishingly visible way but swinging compositions can also be described. Hardware requirements are: - CPU 486 66 Mhz with coprocessor, preferably Pentium - Hard disk with space for Sounds - Windows 3.11, Windows 95 or Windows NT - 16-bit stereo sound card

    EDIT: No action in win7pro!
     
    Last edited: Mar 8, 2017
    • Like Like x 1
    • Informative Informative x 1
  3. Paule

    Paule NI Product Owner

    Messages:
    7,555
    • Like Like x 1