Cycling ’74 has dropped Max 9
Cycling ’74, a pioneering force in creative software development has announced the release of Max 9, the latest version of their renowned visual programming language. Max has long been a staple for artists, musicians, and developers seeking to create interactive media, sound installations, and complex audio-visual projects. With Max 9, Cycling ’74 introduces new features, objects, and enhancements that significantly expand the platform’s capabilities. This article delves into the key highlights of the Max 9 release, providing an in-depth look at what users can expect from this powerful update.
New Objects and Tools
Max 9 is packed with many new objects and tools designed to enhance the functionality and flexibility of the software. Among the most notable additions are the Ableton Device and DSP Objects, collectively known as ABL. These objects enable users to integrate both high-level device code and low-level algorithms used in Ableton’s products directly into their Max patches and Max for Live devices. The release includes ten new devices, such as Drift, Roar, Compressor, Limiter, and Reverb, which provide sophisticated audio processing capabilities. Fifty-five DSP objects offer fundamental components like oscillators, filters, reverb, distortion, and noise. This integration allows for more intricate sound design and processing, giving users greater control over their audio projects.
Jitter Geometry Objects
Another significant addition in Max 9 is the Jitter Geometry Objects. Previously, geometry in Jitter was managed as collections of triangles or grids of primitives stored in one-dimensional or two-dimensional matrices. While this approach was practical, it limited the complexity and flexibility of generative geometry. The new Jitter Geometry Objects introduce a more descriptive method for representing geometry, enabling advanced operations such as mesh subdivision, smoothing, re-meshing, UV generation, and accessing face properties like centroids and area. This improvement allows for more detailed and dynamic geometric designs, expanding the creative possibilities for visual projects.
Jitter FX Objects (jit. fx)
Max 9 also introduces the Jitter FX Objects or jit. Fx, which provides a diverse and user-friendly library of real-time image effects. These effects leverage the power of the GPU, ensuring efficient performance and seamless integration with patches—the jit. Fx objects wrap around existing shader-based effects from Max 8 and add many new and exciting options. This expansion simplifies adding visual effects, making it easier for users to enhance their projects with high-performance, real-time graphics without needing deep expertise in shader programming.
V8 JavaScript Engine
One of the most significant upgrades in Max 9 is the introduction of the V8 JavaScript Engine through the v8 and v8ui objects. This upgrade brings Max’s Max’s modern JavaScript (ES6+) capabilities, utilizing the same engine that powers Chrome and Node.js. This enhancement allows for more expressive and efficient JavaScript code, providing users with a powerful tool for scripting and automation within their Max projects. The existing JS and just objects support the older Mozilla JavaScript engine for compatibility, ensuring that legacy projects remain functional while offering a path forward with the V8 engine.
Codebox
The Codebox feature has significantly expanded the Max 9, offering several variants for standard Max patchers. These include v8.codebox and node. Code box, dict.codebox, coll.code box, gen. code box, and others. These objects allow users to edit text directly within the patcher, providing greater flexibility and ease of use when incorporating scripts and code into their projects. This enhancement streamlines the workflow for users who rely heavily on scripting and coding within their Max patches, making it easier to manage and modify code without leaving the patcher environment.
Parameter Connect
Parameter Connect is another innovative feature introduced in Max 9, allowing UI objects in Max to be connected to supported object attributes without the need for patch cords. All ABL, jit currently supports this feature objects, and jit.gl.slab. The new JS attribute API can also enable JavaScript V8 object support. The param object can be used within poly~ patchers to take advantage of Parameter Connect, simplifying linking UI elements to their underlying parameters. This enhancement reduces the complexity of patches, making them cleaner and easier to manage, especially in large and intricate projects.
OSC Parameters
OSC Parameters introduce new settings at the application, patcher, and parameter levels, enabling automatic communication of parameter values via OSC (Open Sound Control). Users can set global OSC addresses and ports or configure them per-patcher.—the new param. Osc object facilitates easy monitoring of all parameters within a patch as OSC packets, while the OSC. The code box object allows a straightforward display of OSC packets as dictionaries. This enhancement improves interoperability with other software and hardware that supports OSC, broadening the scope of Max 9 projects and making integrating with external systems and devices more accessible.
New Jitter Passes
The Jitter pass architecture has been enhanced with several new passes in Max 9, supporting advanced rendering passes and post-processing effects. These improvements take full advantage of the capabilities of jit.gl.pass, including new pass effects such as global illumination, screen space ambient occlusion (SSAO), depth of field, vignetting, and more. These additions allow for more sophisticated and visually rich rendering in Jitter-based projects, enabling users to create more realistic and detailed visual effects.
New Jitter Time Objects
Max 9 also introduces new Jitter Time Objects, including jit. Line, jit. Bang, and jit. framecoich provides reliable timing information for real-time and non-real-time rendering modes. These objects ensure precise control over the timing and synchronization of events within a patch, enhancing the accuracy and stability of animations and other time-dependent processes. Reliable timing is crucial for creating smooth and consistent visual and audio outputs; these new objects provide the necessary tools.
New Jitter Gizmos
Introducing new Jitter Gizmos in Max 9 further enhances the user experience by providing more intuitive and interactive control over 3D scenes—the new transform gizmo for the jit. World object’s @auto_handle attribute defaults to rotation but can be changed to translate or scale using command and option modifiers. A shift modifier toggles between local and world axes, allowing for precise manipulation of objects. New widgets for lights and cameras can also be toggled on via the jit. World gizmos attribute gives users more control over the lighting and camera perspectives within their Jitter projects.
Jit. ui Objects
The jit. UI objects in Max 9 allow users to create UI widgets directly inside the Jitter rendering window. These widgets can be positioned and sized using mouse and keyboard input, and they automatically adjust their scaling based on the render window size. This feature makes integrating interactive elements into visual projects easier, enhancing Jitter-based interfaces’ user experience and functionality. Users can create more dynamic and responsive visual applications without leaving the Jitter environment.
Define
The Define feature is handy for package developers, as it allows general-purpose host objects like jit.gl.slab, gen~, js, and others to be used through defined aliases. This makes these objects appear and behave like unique Max objects, simplifying the process of managing complex objects and enhancing the organization and readability of patches. This abstraction is especially beneficial in large projects where managing numerous objects can become cumbersome, allowing developers to create more streamlined and maintainable patches.
Hid
The hid object replaces the legacy hi object in Max 9, offering cross-platform compatibility and providing more descriptive information about human interface devices. The new hidden object also allows users to take exclusive control of devices on OS X, improving device management and integration within Max patches. This enhancement ensures that users can seamlessly integrate a wide range of input devices, enhancing the interactivity and responsiveness of their projects.
Loudness~
The Loudness ~ object in Max 9 is designed to report the Loudness of a signal according to the EBU R 128 standard. It measures momentary, short-term, and integrated Loudness in LUFS (loudness units relative to full scale), the signal’s loudness range, and actual peak values in dB. This object is essential for audio projects that require precise loudness measurement and normalization, ensuring consistent audio levels across different media and platforms. Accurate loudness measurement is crucial for professional audio production, broadcasting, and live sound reinforcement, and Loudness ~ provides the necessary tools to achieve it.
Schedule
The Schedule object functions similarly to the deferred object but allows users to move any message to the scheduler thread, optionally with a delay. This provides functionality similar to the delay object but can be applied to any message, enhancing Max patches’ flexibility and timing control. This feature is handy for managing the timing of events and ensuring that messages are processed in the correct order, improving the overall stability and predictability of patches.
Jweb~
With the Jweb~ object, Max 9 users can render web pages and route the audio through MSP (Max Signal Processing). This integration opens up new possibilities for incorporating web-based content and audio processing in real-time, bridging the gap between web technologies and Max’s powerful audio capabilities. Users can now create interactive installations and performances that seamlessly integrate web content with live audio processing, expanding the creative horizons of what is possible within Max.
Threadcheck
The Threadcheck object reports the current execution thread for incoming messages, providing valuable information for debugging and optimizing patches. Understanding which thread handles a message can help users identify performance bottlenecks and ensure efficient patch execution. This insight is crucial for developing complex and resource-intensive projects, allowing users to optimize their patches for better performance and reliability.
New Array Objects
Max 9 introduces a range of new array objects, including array. Expr, array. Fill, array. Random, array.min, array.max, array.mean, array.median, array. Mode, and array. stddev. These objects provide advanced manipulation and analysis of arrays, enabling more complex data processing and statistical operations within patches. Users can now perform sophisticated data analysis and processing directly within their Max patches, enhancing the capabilities of their projects and enabling more intricate interactions and behaviors.
New String Objects
New string objects, such as string. Regexp and string. Sprint enhances the handling of text data in Max 9. These objects offer powerful text processing capabilities, allowing users to perform regular expression matching and string formatting directly within their patches. This streamlines workflows that involve text manipulation, making it easier to manage and process textual data alongside audio and visual elements within Max projects.
Object Enhancements
In addition to introducing new objects and tools, Max 9 includes several enhancements to existing objects, improving their functionality and user experience. These enhancements ensure that Max remains a robust and versatile platform for creative projects.
Preset Interpolation & Display
Preset Interpolation and Display enhancements allow users to connect the node object to presets to interpolate smoothly between preset states. Users can assign names to preset slots with the new username message and use the menu and chooser objects to display a list of saved presets. These enhancements make managing and transitioning between different states in a patch easier, providing a more intuitive workflow for complex projects. Smooth interpolation between presets is particularly useful for live performances and dynamic installations, where seamless transitions are essential.
Shadow Alpha / Waveform Drawing
Shadow Alpha and Waveform Drawing have improved with new modes for the multi-slider, function, table, playlist~, and waveform~ objects. The waveform~ object now uses an improved path-based drawing algorithm, resulting in more accurate and visually appealing waveforms. These improvements enhance the visual feedback and control over audio signals, making it easier for users to visualize and interact with their audio data. Better waveform visualization is crucial for tasks such as audio editing, mixing, and live performance, where precise visual representations of audio signals can significantly aid in achieving the desired sound.
Embedded Textfile Support
Embedded Textfile Support has been expanded in Max 9, allowing users to save the text of the v8 node. Script, jit.gl.slab, jit.gl.shader, and jit.gl.pass objects directly within the patcher using the embed attribute. This feature simplifies the management of scripts and shaders by keeping all relevant code and data within the patch, making patches more portable and more accessible to share. Embedded textfile support ensures that all necessary patch components are included within a single file, reducing the risk of missing dependencies and making it easier to distribute patches to other users or collaborators.
Jitter Geometry Export
Jitter Geometry Export has been enhanced to export geometry from any Jitter GL object that draws geometry using the export_geometry message. Currently, Max 9 supports PLY, STL, and GLTF formats, providing users with versatile options for exporting their geometric designs. This enhancement facilitates the integration of Jitter geometry with other 3D software and workflows, broadening the scope of Max-based projects. Exporting geometry in standard formats enables users to leverage their Jitter creations in various applications, from 3D printing and animation to virtual reality and game development.
Jitter Transparency Rendering
Jitter Transparency Rendering introduces the ability to render transparent objects within jit. World by enabling the transparency attribute. Objects with color transparency or blend_enable set to 1 will be added to a transparency pass and composited with opaque objects in the scene with proper depth buffering. This feature allows for more complex and visually layered 3D scenes, enhancing the realism and depth of Jitter-rendered graphics. Proper transparency rendering is essential for creating realistic and visually compelling scenes, where objects must interact seamlessly with their surroundings and each other.
Jitter Shader Enhancements
Shader Enhancements in Max 9 add new shader state uniforms, providing parity with the built-in uniforms found in Shadertoy, such as iTime, iFrame, and iDate. These new uniforms offer greater control and flexibility for shader programming, allowing users to create more dynamic and interactive visual effects within Jitter. Enhanced shader capabilities enable users to push the boundaries of their visual projects, creating intricate and responsive graphics that react to various inputs and parameters.
Jitter Fixed Delta Time
The Jitter Fixed Delta Time feature locks animation objects bound to a jit. World context to a fixed rate using the new jit. World attribute fixed_delta. All animation objects will lock their update rate to this value when this attribute is non-zero, ensuring consistent timing and synchronization. Individual animation objects can also have their fixed_delta attribute, overriding the global setting. This feature is handy for capturing non-real-time output from jit. World while maintaining synchronized animations, enabling users to create smooth and stable animations regardless of real-time performance. Fixed delta time ensures that animations remain consistent across different systems and performance conditions, providing reliability and predictability in visual outputs.
Vst~ Enhancements
Vst~ Enhancements in Max 9 include the ability to unload the currently loaded plugin using the drop message, retrieve the currently loaded plugin with the currentplug attribute, and make the plugin editor window float with the floateditorwindow attribute. Additionally, sysex support has been added via the sysexevent message, expanding the capabilities of the Vst~ object and improving integration with external MIDI devices and plugins. These enhancements give users greater control and flexibility when working with VST plugins, making it easier to manage and interact with external audio processing tools within Max patches.
New Editor Features
Max 9 introduces several new features and improvements to the editor, enhancing the user experience and making the development process more efficient and intuitive.
Object Syntax Coloring
Object Syntax Coloring is now available. Objects display colored text to increase legibility and distinguish between object names, arguments, and attributes. Users can choose a color set using the Syntax Color Theme preference, making it easier to read and navigate patches, especially those with complex structures. Improved syntax coloring enhances the overall usability of the editor, reducing eye strain and making it more straightforward to identify different components of a patch at a glance.
Updated Toolbars
The toolbars in the Max editor have been updated to provide a more intuitive and user-friendly interface. The left sidebar can now be pinned to stay open, ensuring that essential tools and navigation elements are always accessible. A new Patcher List View shows all objects used in the current Patcher window, providing a comprehensive overview of the patch’s components. Additional updates include Jitter FPS metering, which allows users to monitor the performance of their Jitter patches in real-time, a Global Quick Record Button for instant recording, Multi-Channel Audio Meters for detailed audio monitoring, a persistent Clue Bar for essential information, and more. In the Max Console, users will find a REPL (Read, Evaluate, Print, and Loop) implementation, which allows sending messages to objects and evaluating short bits of JavaScript directly from the console. This feature streamlines the debugging and development process, enabling users to test and modify their code on the fly.
New Documentation Browser
The Documentation Browser has been completely overhauled in Max 9, providing a more organized and accessible user reference. Content is split into Reference and User Guides, with better integration of package-specific documentation. Many resources have been moved online to a new documentation website, and the API reference has been improved, making it easier for users to find the information they need and learn about new features and objects introduced in Max 9. The revamped documentation browser ensures users can access comprehensive and up-to-date information quickly, facilitating a smoother learning curve and more efficient problem-solving.
Debugging & Illustration Mode
Debugging and Illustration Mode enhancements provide more granular control over patch execution. Illustration mode allows users to execute a patch slowly, visualizing how messages travel down patch cords. Users can pause or continue execution, making it easier to understand and debug complex patches. Debugging and Illustration modes are now enabled for individual patchers rather than globally, giving users more flexibility and control when working on multiple patches simultaneously. These enhancements make it easier to diagnose issues, optimize performance, and better understand how patches operate, ultimately leading to more robust and efficient projects.
Preferences
The Preferences window in Max 9 has been redesigned for better navigation and searchability. The new window features a two-column layout with categories on the left, making it easier to find and adjust settings. Audio settings are now integrated directly into the preferences, streamlining the process of configuring audio options and ensuring that users can access all settings from a single, organized interface. The redesigned Preferences window enhances the overall user experience, making it more straightforward to customize and optimize Max according to individual needs and preferences.
File Operations
File Operations have been improved to enhance workflow efficiency. In the File menu, the Revert to Saved option allows users to reset the current patch to the last saved version, quickly undo changes, and recover previous states. Under the Help menu, a Recent Help Files entry shows all help files opened recently, making it easier to revisit necessary documentation without searching through directories. The Open and Save dialogs on Windows have been modernized, providing a more consistent and user-friendly experience across different operating systems. These improvements streamline everyday tasks, reducing the time and effort required to manage patches and access essential resources.