< Back to IRCAM Forum

Modalys 3.6.0 "rc1"

Hi Modalys friends!

Modalys 3.6.0 rc1 is available from the beta page.
As you probably know “rc” stands for “release candidate” so unless some serious bug is found, this version is going to to public any time soon - finally! :innocent:

The focus of this build is:

  • stability and bug fixes
  • some more medit (3D representation) cool features
  • cleanup of max help files (thank you @b_hagerty!)

Best regards,

cumulative notes for Modalys 3.6 builds

3.6.0 rc1

  • general engine : change of temporary folder (safer…)
  • updated documentation
  • medit:
    • new smooth overlays added: help, item info.
    • new display of accesses as blinking yellow blobs
    • new display of holding points (boundary conditions) as small red blobs
    • redesigned axis display
    • redesigned grid display
    • lots of fixes on Windows :wink:
  • 3D finite elements:
    • “restrict-line” fixed
  • Modalys for Max:
    • getting an object’s reference by name could fail.
    • new lua examples added
    • mlys.lua : avoidance of modalys object name duplicates (with warning)
    • mlys help files reviewed and cleaned up


  • mac installer: automatic installation of modalys Max package (by scanning default locations)
  • compatibility with macOS 10.15 Catalina and macOS 11 (Big Sur), including when running under “rosetta2” emulation on a new ARM mac machine.
  • fully notarized installer
  • recompiled, correctly codesigned Modalisp and Medit
  • updated Matlab objects (64bit)
  • fixed violin bridge object (long-standing issue…)
  • Medit (mesh visualization):
    • code up-to-date
    • medit.exe on Windows (long overdue…)
    • new help overlays
  • Modalys for Max:
    • Windows:
      • another looong overdue: finite elements on Windows :wink:
      • externals have been entirely recompiled to reflect latest features and fixes
    • new Max ‘extra’: Modalys tutorials (thanks to Olav Lervik!)
    • an old bug has been fixed that could explain some strange past behaviors…
  • mlys.lua :
    • new examples
    • new Parametric2dCurve class for easy 3d object construction (see the lua_3d_parametric_object example)
    • return value from (update() function) did nothing!
    • the dimension parameter of a mlys.lua object is now automatic if “-1” is set (which is by default for new objects).
    • mlys.get_info can now return strings (and, of course, numbers)
    • bow and felt connections implemented
    • moved from luajit to moonjit lib
    • new function modalys.view_mesh(–mesh ref–): to invoke Medit
    • new object modalys.inlet_observer to monitor inlet updates. With “modalys.inlet_observer.callback = my_callback” you shall assign a callback of your own receiving 2 parameters: inlet# and current float value.

Modalys for Max

  • mlys.lua:
    • “mlys” alias namespace created. So instead of “modalys.freq_to_midi”, you may write the more compliant “mlys.freq_to_midi”
    • aliases added to functions, to match legacy namings: modalys <-> mlys, make_object <-> create_object,
      make_connection <-> create_connection, make_mesh <-> create_mesh, make_point_output <-> create_point_output, extend_mesh <-> create_mesh

Modalys for Max

  • a long-standing request: modifying an attribute in mlys.expression (and now mlys.lua) doesn’t erase the script content anymore!
  • mlys.lua:
    • improved stability.
    • modalys.release now accepts any series of item references. For instance modalys.release(mystring,mymesh,ctrl1)
    • new function modalys.compute_modes(–object reference–)
    • new function get_pitched_finite_element_object(–parameters–). Parameters are: “mesh”, “name”, “block” (a mesh that describes the fixed nodes), “midinote” or “frequency”, “modes” (amount), “thickness” (for 2D mesh), “density”, “young”, “poisson”, “constloss”, “freqloss”.
    • new function modalys.freeze_object(–object reference–) For now, it is only for actual objects (strings, tubes etc.) but the plan is to extend it to access and controllers.
    • new function modalys.get_mesh(–object reference–) to get the mesh reference of a given 3D-based object.
    • new objects implemented in create_object (more to come…)
    • new connections implemented in create_connection (more to come…)

Modalys for Max

  • mlys.lua
    • new function modalys.midi_to_freq(–midi note–)
    • new function modalys.freq_to_midi(–freq–)
    • new function normalised_random()
    • new function modalys.create_access(–parameters–). Parameters are: “kind” (normal, trans0 etc.), “where” (object ref), “name”, “location”/“position” (can 1- or 2-dimensional, or a node etc.)
    • new function modalys.create_point_output(–parameters–)
    • new function modalys.create_object(–parameters–)
    • new function modalys.create_connection(–parameters–)
    • new function modalys.create_mesh(–parameters–)
    • new function modalys.extend_mesh(–parameters–)
    • new function modalys.transform_mesh(–parameters–)
    • new function modalys.save_mesh(–parameters–). Parameters are: “mesh”, and “path” (can be relative).
    • new function modalys.create_connection(–parameters–)


Downloaded and testing.


Really nice that you can now see the accesses in medit!

I’m testing some simple things with lua and I’d like to confirm a thing: everything that is checked in the test-all patch should be fully implemented, right? I was trying to build basic interactions in lua (plucking a string, bowing, applying force to it, so on…) and sometimes, if I made a syntax error in lua in a connection, it would say the connection was not implemented (“plucking not implemented in mlys.lua yet!”). When I fixed the syntax error, the message would not appear. However, in some connections, such as bow and strike, I’m always getting this “not implemented yet” message, even when I try very basic examples. Are they not implemented or is it probably something I’m doing wrong?


I have a basic question. Where is medit?



@RaphaelVilani: yes, lua-test-all should give a good state of things. But please do post any patch example, that’s easier for me to check!

@smalllotus: medit (which is a command line) is to be found in the /misc directory inside the modalys package. It is also found within the Modalys.framework that lies inside the modalys~ object. NB: if you launch the .pkg installer, the same framework is also installed separately in /Library/Frameworks (for ModaLisp to use). Lastly, you should be able to launch it just by typing “medit” in a terminal window… So that makes 4 locations! (on the mac).


Dear Robert,

Whilst making an example of what I was talking about to send you, I figured out what was happening:

As I said, if you make a connection with an access that doesn’t exists, for example, it prints out “[the connection] is not implemented in mlys.lua yet!”, even if it is. What I didn’t realize when creating a bowing connection was that if I didn’t gave it a “name” argument for the access, it wouldn’t work aswell and the connection would send that error message too. When I gave the accesses a name, it worked.

I won’t attach the patch since I belive to have figured out the problem but I’d still like to suggest that the error message would be something different, since saying the connection is not yet implemented seems innaccurate.

Thanks and sorry for the trouble!!


Thanks for sharing this! I went over the help files and fixed a number of typos (e.g., changed “tunning” to “tuning,” changed “constloss” to “const-loss,” changed “freqtloss” to “freq-loss,” among other things). I also made very minor edits for clarity. Only three files had substantive issues:

  • mlys.arithmetic - the description seems wrong. It is identical to the description from the dynamic controller, even though they are not the same thing. I made minor editorial changes (the same ones I made to the help file for mlys.dynamic), but I did not change the substance. I think the description should be revised.
  • mlys.bi-two-mass - the subtitle was wrong (it was for the bi-string, not the bi-two-mass). I fixed it by taking the correct subtitle from the website.
  • mlys.mix-hybrid - it had wrong references to the mlys.melt-hybrid object. I changed them to the correct references to the mlys.mix-hybrid object.

You can see a summary of my changes in the RC1 tab of this Google Sheet (the sheet I shared in my other post).

You can download a ZIP file with my revised versions of the help files from this link. I added “.v2” to the filenames so you won’t confuse them with the originals. I assume you can use some tool to do a diff if you need to, though I don’t know how to do it with .maxhelp files. I didn’t change any of the code, just the comments, so you should be able to take these as is.

Again, I hope this is helpful.

1 Like

One suggestion/question from my side. Wouldn’t it be good to have a link to a Lua-example in the Extras-> Modalys for Max Instrument Series? Maybe even the 3D doughnut example. congrats and cheers

I got a lua-3D-example I did, which worked fine on previous betas and stopped working with following error (see screenshot attached)

@RaphaelVilani : yes, documentation and warning/error messages for the mlys.lua API are definitely to be improved!

@b_hagerty : thanks again for your help on the modalys for max help files! I will integrate your changes in rc2.

@maestrorulez: the class name changed to ParametricCurve2D (that’s a beta cycle privilege, but sorry about that!)

Thank you all for your help, comments, suggestions and interest. Please keep reporting, and 3.6 will be released on next Monday.


1 Like

there is still a little hiccup…

You passed angle={360/steps} which for lua means angle is a table with a single element… But a plain number is expected, so no braces please!
And by the way, the extend_mesh function (with rotation) now interprets angle as the global rotation angle. Use stepAngle otherwise.
So to summarize, in your case just set angle=360 :wink: