Max 8.3 Released

Ben Bracken's icon

We are excited to announce the release of Max 8.3!

With 80+ new features and 110+ bug fixes, Max 8.3 offers many improvements to MC, support for 64-bit audio formats across objects that deal with audio files, adds a collection of 20+ new objects to enable creative music making with signals, and a whole lot more.

As always, you can download the update here:
https://cycling74.com/downloads

You can check out an overview of Max 8.3 features here:
https://www.cycling74.com/products/new-in-max

For a full list of all Max 8.3 improvements, check out the change log below, or here:
https://cycling74.s3.amazonaws.com/support/version_8_3_0.html

Happy patching!
Ben & Cycling '74

New Features:
• adsr~: 'triggermode' attribute
• attrui: 'storeinpreset' attribute which defaults to enabled (also applies to pattr)
• attrui: name and value can be saved/restored via preset / pattrstorage & can be parameterized
• buffer~: 'dither' attribute for write operations
• buffer~: 'readraw' message
• chooser: 'keynavigate' attribute
• click~: number message for scaled impulse
• clip / clip~: mode attribute to zero outside of boundaries
• crosspatch: patching editor for matrix-style routing objects
• Edit->Copy Attributes: new menu command
• File Support: exr file support
• frame*~ fft objects: added 'clear' message
• gate, switch, selector~, gate~: 'next' message to iterate through connections
• gate~ / selector~: 'ramptime' attribute
• jit.gl.cubemap: 'gamma_correction' option
• jit.gl.cubemap: added 'type' and 'autotype' attributes
• jit.gl.cubemap: equirectangular format import and conversion
• jit.gl.light: hemisphere light type
• jit.gl.meshwarp: masking mode
• jit.gl.meshwarp: texture output
• jit.gl.pass: @fxname gamma
• jit.gl.pbr: Generate physically based rendering materials for 3D objects
• jit.gl.texture / jit.matrix: image file drag support
• jit.gl.texture: new colormodes (srgb, srgb_alpha)
• jit.gradient.ui: GUI for creating 1-dimensional gradient matrices
• jit.openexr: supports js usage, added output file attr, exr drag support, file read notifications
• js: Rx256 JS extension added that uses xoshiro256 for random number generation
• live.banks: added warnings to explain non-reactivity in Max-only
• matrixctrl: new dialmode 2 for float gain tracking, stores cell values as floats
• max-fileformats: add mTXT for objects which exclusively want a .txt file save option
• MC Wrapper: 'applymessages' message to pass symbols and ints
• MC wrapper: 'op' attribute (like mc.generate~)
• MC Wrapper: voiceprob attribute
• mc.assign: assign messages to MC objects
• mc.channelcount~: signal outlet
• mc.chord~: output a variable-size list of values across MC channels
• mc.generate~: Generate values for a range of channels
• mc.in~ / mc.out~: MC versions of poly~ signal input objects
• mc.list~: 'chans' attribute
• mc.midiplayer~: Generate MIDI events from audio signals
• mc.pattern~: signal pattern sequencer and recorder
• mc.s~ / mc.r~: aliases to mc.send~/mc.receive~
• mc.snowphasor~: control many phasors
• mc.wrapper~: 'decide' message
• mcs.gate~ / mcs.selector~: new objects
• mcs.poly~: mcs version of poly~
• opendialog: 'path' and 'setpath' messages
• Patcher Dependencies: 'savedependencies' Max preference (defaults to 1)
• peakamp~: @interval attribute
• pgmin/pgmout: 'zerobased' attribute to use 0 / 1 for program count base
• phasegroove~: phasor-based groove-style sample playback
• phasor~: 'jitter' & 'limit' attributes
• plot~: 'applyfont' attribute
• preset: fifth outlet that can be connected to object to capture state of attributes
• qlim: usurp mode
• ramp~: a single ramp triggered by a signal
• random: 'classic' attribute
• sah~: 'triggermode' attribute
• savedialog: 'path' & 'setpath' messages
• select: fuzzy attribute (fuzzy float matching)
• sfplay~: 'openraw' message to open Raw audio formats
• sfplay~: Support for ~5GB wave files and wave64 files
• sfrecord~: @dither attribute option to apply triangular dither (TPDF) with noise shaping when writing PCM files
• sfrecord~: @resample is an attribute
• sfrecord~: bitdepth attribute
• shape~: phasor-driven line~
• slide~ / rampsmooth~: attributized / added signal inlets
• snowfall~: phasor-driven particle
• stash~: store and recall audio signal values
• Styles: 'Remove Unused Styles' option
• subdiv~: integer subdivision of a phasor
• swing~: subdivide a phasor
• sync~: @rtport attribute for direct MIDI input
• table~: signal table lookup
• twist~: non-linearize incoming ramps
• updown~: Trapezoidal function generator with constant attack and release
• what~: sample triggers based on a list of signal values
• where~: elapsed + predicted phasor~ time
• zigzag~: 'append' & 'insert' messages
• zigzag~: 'maxpoints' attribute
• zigzag~: set points with function object via line message

Fixed Bugs
• amxd~: uses correct name in errors and menus
• Audio Drivers: fixed delay when stopping audio
• AVF Video Engine: fixed crash when image frame loaded from movie file
• AVF Video engine: support for 16-bit images
• chooser: fixed scrolling when using a key
• click~, edge~, line~ (output only), snapshot~, peakamp~, sig~, subdiv~, what~, curve~: sample-accurate when SIAI is enabled
• closebang: fixed issues with views / recursion
• dict.pack: fix crash if no key is matched to inlet
• dict.pack: sending name message no longer invalidates dictionary
• dict.pack/unpack: outlet created when there is no argument
• DSP: prevent connections that happen during load from restarting audio
• Dynamic Colors: changed label of ‘live_control_fg’ to ‘Text /Icon’
• function: reduced minimum size
• GL3 jit.gl.cubemap: import/conversion of exr equirectangular images, with optional gamma correction
• GL3 jit.gl.gridshape: fixed cylinder end cap shading
• GL3 jit.gl.gridshape/mesh: fixed tangents (auto_tangents smooth_tangents attribute option)
• GL3 jit.gl.multiple: fixed crash with multiple textures and changing instance count
• GL3: fixed crash on shader compilation failure when texture is bound to state
• GL3: fixed lighting glitches on Apple M1 machines
• GL3: fixed mesh autonormals
• in~: non-MC is not multichannel
• inlet / outlet assistance: fixed crash with long strings
• Inspector: filter text is retained when reopening sidebar
• Inspector: fixed crash with modal text editor and focus changes
• jit.cellblock: exposed 'neverdirty' attribute to prevent dirtying the patcher
• jit.gl.asyncread: fixed crash when input type changes
• jit.gl.material: fixed broken materials in standalones
• jit.gl.model GL3: matrixoutput does not output when automatic is disabled
• jit.gl.multiple: fixed intermittent crash when bound to jit.gl.node and drawto set
• jit.gl.texture: fixed 'thru' attribute
• jit.gl.texture: setting type attribute forces type
• jit.matrix: 'importmovie' reports correct file name
• jit.matrix: improved native colorspace discrepancies when loading images
• jit.movie AVF engine: fixed plane swapping bug on first frame (Mac M1)
• jit.window GL3: fixed crash with matrix input and fullscreen
• jit.window: fixed issues when exiting fullscreen when floating is enabled
• Jitter GL: fixed matrixoutput assist and type for objects that don't support it
• js File: fixed issues with explicit (second) open()
• js: enforce .js suffix in save as dialog
• js: jsglobal is appropriately deferred
• js: patcher.filepath reports path to collective
• jstrigger: fixed potential crash when copying
• jsui: new Image from graphics context preserves alpha
• jweb / CEF: fixed usage in Max for Live (Windows)
• live.* ui objects: updated color code
• live.banks: banks configuration is retained if device is opened and saved in Max
• live.comment: linecount is preserved
• live.gain~: @orientation 1 typed-in a box works as expected
• live.gain~: auto-adapts when transforming to MC version
live.observer: fixed value output after opening/closing Max editor
• Max Console / Event Probe: quotes are retained
• Max for Live / Gen: improved fixes for intermittent crashes
• Max Windows: fixed positioning in two monitor case
• MC Wrapper: attrui menu works
• mc.audiounit~: can instantiate
• mc.function: fixed crash when recalling saved data
• mc.function: handle pattrstorage interpolation more gracefully
• message extra arguments warning: can locate the receiver
• Message to Max: fixed ;something% (percent) crash
• MGraphics "tonamedmatrix": correct alpha in Jitter Matrix / "float32" support
• mgraphics: fixed tonamedmatrix drawing when not fully opaque
• mousestate: improved delta mouse reporting
• mtr: fixed track loop reporting in 'dump' message output
• multislider: select output is not deferred
• New from Clipboard: fixed amxd~ paste
• OpenGL Shader editing: retains parameter state
• OpenGL Status: align colors with other status windows
• Parameters window: reduce float display precision
• Patcher: better positioning when zooming/unzooming window
• Patcher: better sorting of styles / attributes of attributes
• patching: fixed crash when closing patcher while object box menu button is active
• patchline colors: improve dynamic color handling
• pattrstorage: 'storenext' works when there are no slots
• pattrstorage: restore behavior of 'getslotnamelist' (outputs slot 0 in unflitered mode)
• play~: sample accurate
• playlist~: fixed menu positioning when dragging from Format Palette
• plot~: definerange log actually works
• plot~: fixed dictionary updating
• pow~: accepts integers
• Quickrecord: added WAVE filetype to savedialog
• receive~: disabled 'chans' in non-MC version
• reson~: fixed typed-in argument errors
• RGB Music lesson: no longer crashes Max
• save dialog: improve default extension behavior when a generic file type is requested
• save/open dialogs: improved focus restoration
• scope~: 'displaychan' attribute is preserved
• select: 'matchfloat' aliased to 'exact'
• selector~: eliminated erroneous MC-related error
• seq: can write files with .txt extension
• seq: fixed potential crash on write
• seq: tempo improvements
• seq: writes type 0 or 1 MIDI files
• sfplay~ / sfrecord~ / sflist~: JUCE-based rewrite
• Sidebar Reference: tutorials are listed by title
• snapshot~ / timer: improved timing
• spike~: accepts ints in right inlet
• stretch~: readagain works as expected
• Styles: objects no longer erroneously inherit styles from other objects
• suspend: works as expected
• sync~: additional timing improvments
• sync~: offset works as documented
• tapin~: error messages added for non-existent attributes
• tapout~: unique mode works for signal inputs
• umenu: improved maintaining number-like symbols
• VIZZIE FOGGR: fixed changing dims
• vst~: fixed memory leak
• vst~: midievent is sample-accurate in SIAI
• waveform~: improved drawing when patcher is zoomed
• zigzag~: fixed crash with append
• zigzag~: set message and setline message jumps to the end after setting list
• zl.union: removes duplicates

Andy Maskell's icon

Thanks to all of you for all the excellent hard work and support!

Iain Duncan's icon

This release sounds fantastic, thanks and congrats! :-)

yaniki's icon

This is great! Thank you very much.

testcase's icon

typo on new in max page. mcs~.selector should be mcs.selector~

Ben Bracken's icon

@TESTCASE thanks, fixed.

Francois Weber's icon

HI,
Thanks for this release !
There must be a bug with the 'seek' message on the 'mc.sfplay~' object. playback stops after a few seconds...
thx again !

Max Patch
Copy patch and select New From Clipboard in Max.

Ben Bracken's icon

@FRANCOIS WEBER thanks, I can reproduce the problem here, and looks to be a general issue with sfplay~ 'seek'. We will investigate.

Holland Hopson's icon

Swing~! Excited about mc.in~ and mc.out~, too. Looks like a great update

VincentC's icon

Quick question about the update on snapshot~. I seem to have occasionally multiple back and forth switches now when my ramp switches between a value and 0, where it used to be a single transition. Is this expected behavior?

pdelges's icon

Although snapshot~ (and other MSP -> Max objects) seems to work fine with 8.3 (more tests are needed), fzero~ still stops working after a while on my setup.
See this topic where I gave some details.

daddymax's icon

This one looks amazing. All updates are appreciated, but every now and again there is one like this that has lots of innovative stuff. Thank you.

mistabu's icon

Max MSP always turns off (same if using a standalone) If you change the output device at Audio Settings in Mac. The same was happening in Max 8.2.2. Are you planning to fix this issue? Does it happens to anyone else?

Mellon's icon

crosspatch is really neat! one thing that would make it even better: the ability to remap the dials to something like -1. 1. for modulation matrix purposes, outside of the intended matrix~ or gate~ usage. working around it just scaling the values but yeah that would be a really elegant solution. thanks for the great update!

Florent Ghys's icon

🥰😍❤️🤓🌨

daddymax's icon

Should turning thru to 0 on a jit.gl.texture mean that it doesn't automatically pass the output unless banged? If that's the case I can't get it working currently, it just outputs new frames no matter what thru is set at?

Exit Only's icon

super excited about this release. thanks!!

Exit Only's icon

I'm curious about what "when SIAI is enabled" means

Rob Ramirez's icon

@Daddymax, the @thru attribute does in fact prevent output until banged, however remember that texture state is persistent on gl objects, so unless you are sending the texture output through something that outputs on input, like jit.gl.slab, it won't be clear that the functionality is working.

Max Patch
Copy patch and select New From Clipboard in Max.

vichug's icon

@nick "scheduler in audio interrupt" ; toggle in the Audio Status panel

daddymax's icon

@Robramirez - thanks for the explanation, I didn't know that's how it works, appreciated.

sakerdon's icon

jit.gl.texture @file xxxxxxx.jpg outputs correct dimension, but no texture
xxxxxx.png works properly
is it only my case?
MSI GE63 Raider RGB 8RE
NVIDIA GeForce GTX 1060

Exit Only's icon

oh, right! thanks

Rob Ramirez's icon

@Sakerdon, thanks for the report regarding issues with JPG loading. I believe this issue is only with viddll engine use. We are investigating a fix. apologies for the inconvenience. For now you should be able to load JPG images properly with the read message to a jit.movie object.

Ben Bracken's icon

@VincentC re: snapshot~, can you post a patch or send one to Support? Thanks!

@MISTABU we are not aware of any general issues regarding audio randomly turning off, please submit report to Support.

daddymax's icon

Some images (not all) that I'm loading into jit.movie are coming out with the dimensions skewed, like it's been twisted? I'll make a report and send examples.

MAX.XAM's icon

Thanks C74! :)

Rob Ramirez's icon

@Daddymax, that would be much appreciated, along with system and video engine 🙏

sakerdon's icon

sorry, is it possible to roll back to version 822 and keep settings?
after update to 830 textures in shaders behave absolutely different

Ben Bracken's icon

@SAKERDON You can find Max 8.2.2 here:
https://cycling74.com/downloads/older

We hope to have a fix for this VIDDLL-only matrix/texture loading issue soon.

sakerdon's icon

thanks. Yes, I found the older version, but the question is - if I roll back to older, will all the settings and additional packages (kinect, etc.) be kept in place, the same way as they are migrating from older to newer?

Ben Bracken's icon

@SAKERDON this should not affect your preferences and settings.

phiol's icon

super great update, Thanks
how do I use remove unused styles ?
There seems to be a lot of pollution when looking from the help files.

Thanks

Ben Bracken's icon

To remove unused styles from a patcher, go to the Format menu, then select 'Remove Unused Styles':

This does not remove styles from your Library, just from the patcher that is active.

Dante's icon

Wow these are really exciting new features. !!! Thanks Cycling ppl : )

phiol's icon

@ben bracken
Yes ! it worked.
Sadly I do not understand why I am still getting this bug. I have passed all my 1000s+ abstractions into the style remover patch and I still get them adding on. Hopefully this will fix it.
But I doubt I'll have to the time or will to ever do that endless task again with this new fix. maybe I should.

Thanks again for the nice update, been wanting attrui saved since it came out in 2012

Simon Smith's icon

Thanks for all your hard work this is a really fun update!

Ullstein's icon

@Francois Weber and Ben Bracken
mc.sfplay does the same anytime. I sent already a bug report...

Besides that many thanks for great update, only missing is WAVE64 support for mc.sfrecord...

Exit Only's icon

Hi. I stumbled upon a pretty nasty bug in mc.shape~ where if curvemode is set to auto (which it is by default), it does not automatically detect "setvalue ..." commands as being curved. I woke up eager to play with this stuff this morning and first thing i did was connect this as an amplitude envelope and instead of what i expected, got massive speaker-destroying distortion.

Here is an example patch (no dac~ involved here just some scopes~)

Max Patch
Copy patch and select New From Clipboard in Max.

Ben Bracken's icon

@NICK thanks for the report (non-speaker destroying version of the patch :P). The reference suggests that function must be directly connected to the object, but that still doesn't solve the problem.

We will take a look, appreciate it!

11OLSEN's icon

Thanks for the update!
Please consider the [scale] bug reported here: https://cycling74.com/forums/bug-in-scale-with-max-8-3-0/replies/1#reply-626ebea9de0fff7c0f5a1bc4

And is there a list of all new objects?

Rick's icon

https://cycling74.com/products/new-in-max

Rick's icon

or
crosspatch
matrix
mc.apply~
mc.assign
mc.chord~
mc.generate~
mc.midiplayer~
mc.pattern~
mc.snowphasor~
mcs.gate~
mcs.selector~
phasegroove~
ramp~
shape~
snowfall~
stash~
subdiv~
swing~
table~
twist~
updown~
what~
where~

11OLSEN's icon

thank you

11OLSEN's icon

Large Audio File Support -> Finally!

👏

Ben Bracken's icon

@11OLSEN We are aware of and tracking the scale bug, which was present in Max 8.2.1/8.2.2 as well.

Rob Ramirez's icon

@DADDYMAX and @SAKERDON, I have just pushed an update to the VIDDLL package (v 1.2.7) in the Package Manager that I believe fixes both of the issues you reported with loading images in the 8.3.0 update. Please update VIDDLL from the Package Manager and let us know if you are still encountering these bugs. Thanks much for your feedback.

sakerdon's icon

Yes, Now gl.texture reads .jpg properly. Thanks!

Exit Only's icon

I know I'm being "that guy" by saying this but it would be awesome of mc.midiplayer~ worked with mcs.vst~. In any case, thanks for all the new toys!

AudioMatt's icon

What is siai?
What was off about audio/scheduler objects?
There's no second inlet in sig~?

Thank you for fixing the mgraphics drawto alpha thing!
Thank you for fixing the load patch restart audio thing!
Thank you for the zig zag improvements!

Thank you for all your amazing work!!!!

Ben Bracken's icon

@AUDIOMATT

RE: SIAI: = Scheduler In Audio Interrupt

RE: sig~/right inlet, that should read: spike~: accepts ints in right inlet

Re: audio/scheduler objects: a lot of work was done to make many (but not all) objects that affect audio from event or events from audio "sample-accurate". Sample-accuracy is only possible when Scheduler in Audio Interrupt is enabled. In other modes, things should still work as you’re used to, with the exception of the signal-to-event objects like snapshot~ which should be far more robust but not necessarily any more “accurate.”

Sample-accuracy is now independent of the signal vector size for many things as long as the event affecting the audio is in the scheduler to begin with.

AudioMatt's icon

Re scheduler, like mid vector? Holy shit that’s gigantic!! How did you even do that?

I’d love to hear how exactly it works. I’ve been writing a daw in max and dealing with sample accuracy while preloading buffers before the vector starts is so fricken annoying.

I’ve been sending messages around mid audio computation but it’s clearly not the way max is supposed to work.

Iain Duncan's icon

Amazing! This is a great release. :-)

Hans Leeuw's icon

Thanks as always. I might have found an issue though. I don't know whether it is an incompatibility with external software that I use (MUBU and dynamicdsp~ in particular) or an issue that is also recognised by others.

Normally when I ask too much of MAX and the CPU is going over 50-60% in the audio status window I get crackles and pops (and sometimes audio that hangs) but when I return to a more decent use of CPU those crackles and pops disappear again. I tested in 8.2.2 and there it still works in this fashion. In 8.3.0 though, when I go back to a lower CPU usage, the crackles and pops remain and I also see the CPU spikes remaining. Turning audio off and on again, changing vector sizes and turning scheduler overdrive off and on does not help. I have to reload the patch to get rid of the issue, though I do not have to quit MAX.

I have an 8-core Intel mac from 2019 and I am on Monterey.

My patch is way too elaborate to be of any use in tackling the issue. I hope the description together with the knowledge that it is a new issue introduced in 8.3.0 rings a bell.

Thanks in advance.

Best, Hans.

Joshua Kit Clayton's icon

@hans, nothing I'm aware of should have generally affected threading behavior in this way between Max 8.3 and Max 8.2.2.

First, I'd suggest comparing the support info for each version (especially i/o and signal vectorsizes, Overdrive, Scheduler in Audio Interrupt, et cetera). That might give a clue and/or a solution for you.

Secondly, one thing that comes to mind regarding performance regressions that could stall out the audio thread if scheduler in audio interrupt is on, was a change to MultiSlider that has in certain cases led to much more CPU expensive processing for patches which did not assume. If you are using the select message, it will now correctly output the list with each select message. This was broken in some earlier version of Max, and restored in 8.3. If this is the case in your patches and you need that older behavior to set specific values without output of the list, please use the set message instead.

However that last piece is just a wild stab in the dark without any clear example patch.

If you do figure it out, and/or have a clear example patch that illustrates your issue, please let us know, since this issue otherwise isn't on our radar yet.

Thanks,
Joshua

Francois Weber's icon

Hi,
What about the sfplay~ object ?
I'm staying with version 8.2.2 because I need to use the "seek" message ... but, I would like to use the new mcs.poy ~.
Sorry for my impatience ...
Thanks again

Ben Bracken's icon

@FRANCOIS we are aware of the bug and working on a fix. Stay tuned!

VincentC's icon

@Ben Bracken, checked my patch again today (after installing 8.3.1) for the snapshot~ problem I had earlier, suddenly noticed Scheduler Overdrive was on, but Audio Interrupt was off. My bad, I thought I had enable both programmed at startup, have to check that again. With Audio Interrupt on, problem is solved. Thanks anyway!

Ben Bracken's icon

@VINCENTC thanks so much for double checking and following up, glad to know it is working!

D.Singer's icon

This particular update created a bug, that if my mac goes on sleep while DSP ON status, after wake up, no sound or midi controls will work, I need to re-select my audio device output in order to hear the sound. This doesn't happen on version 8.2.2 or earlier. Strangely that if I disable DSP then go on sleep, everything works fine after wake up.
Any way of fix this issue? Its a problems for one of my projects. This still happens on version 8.5.0
Many thanks.

Source Audio's icon

instead of letting your mac auto sleep,
set whatever states you need first and then use shell script to send your mac to bed.