Above: Cycling 74′s just-released video highlights enhanced audio quality; our friend, French artist protofuse, has a go at working with the beta and showing off the new user interface. (See C74′s official take on the new UI below.

Max 6 in Public Beta; For Home-brewing Music Tools Graphically, Perhaps the Biggest Single Update Yet

Just because a music tool fills your screen with tools and options doesn’t necessarily make it easier to realize your ideas. From the beginning, the appeal of Max – as with other tools that let you roll your own musical tools from a set of pre-built building blocks – has been the blank canvas.

Max 6 would appear to aim to make the gap between your ideas and those tools still narrower, and to make the results more sonically-pleasing. The reveal: it could also change how you work with patches in performance and production. I was surprised when early teasers failed to impress some users, perhaps owing to scant information. Now, Max 6 is available in public beta, and the details are far clearer. Even if Max 5 was the biggest user interface overhaul in many years, Max 6 appears to be the biggest leap in actual functionality.

It’s what I’d describe as a kitchen-sink approach, adding to every aspect of the tool, so there’s almost certain to be some things here you won’t use. What could appeal to new users, though, are I think two major changes.

More visual patching feedback and discoverability. First, building upon what we saw in Max 5, Max’s approach is to provide as much visual information as possible about what you’re doing. It’s probably the polar opposite of what we saw earlier this week in something like the live-coding environment Overtone: Max’s UI is actively involved with you as you patch. There are visual tools for finding the objects you want, then visual feedback to tell you what those objects do, plus an always-visible reference bar and rewritten help. This more-active UI should make Max more accessible to people who like this sort of visual reference as they work. No approach will appeal to everyone – some people will find all that UI a bit more than they like – but Max’s developers appear to be exploiting as much as they can with interactive visual patching.

Multiple patches at once. New objects for filters and data, a 64-bit audio engine, and low-level programming are all well and good. But the change that may more profoundly impact users and workflow is be the way Max 6 handles multiple patches. Max – and by extension Pd – have in the past made each patch operate independently. Sound may stop when you open a patch, and there’s no easy or fully reliable way to use multiple patches at once. (Compare, for example, SuperCollider, which uses a server/client model that lacks this limitation.) That changes with Max 6: you can now operate multiple patches at the same time, mix them together with independent volume, mute, and solo controls, and open and close them without interrupting your audio flow. (At least one reader notes via Twitter that you can open more than one patch at once – I’d just say this makes it better, with more reliable sound and essential mixing capabilities.) Update: since I mentioned Pd, Seppo notes that the pd~ object provides similar functionality in regards to multiple patches and multi-core operation. This has been an ongoing discussion in the libpd group, so I think we’ll revisit that separately!

One upshot of this change: some users have turned to Ableton Live just to host multiple patches. For users whose live performance set involves Ableton, that’s a good thing. But it could be overkill if all you want to do is bring up a few nifty patches and play with them. Now, I think we’ll start to see more people onstage with only Max again. (Check back in a few months to see if I’m right.)

Here’s an overview of what’s new:

  • Discoverability: A “wheel” makes the mysterious functions of different objects immediately visible; Object Explorer makes them easier to find, and new help and reference sidebar keep documentation close at hand.

  • 64-bit audio engine

  • Open multiple patches, solo and mute them, open and close them without stopping audio, mix audio between them with independent volume, and take advantage of multiple processors with multiple patches.

  • Low level building blocks: You don’t get new synth objects, but you could build them yourself. New low-level data-crunching goodness work with MSP audio, Jitter Matrix, and OpenGL textures

  • More JavaScript: An overhauled JavaScript engine makes JS scripting faster and more flexible, and there’s a proper text editor with syntax highlighting (though, of course, you may still prefer your own).

  • New visuals: Vector graphics and “HTML5 Canvas-like” UI scripting (though to me it’s a shame this isn’t just the HTML5 Canvas). There are also massively-expanded Jitter powers, but those are best left to our sister site Create Digital Motion.

  • Filters: New filter-visualizing tools for audio filter construction and manipulation.

  • Dictionary data type and associated objects let you describe information in a more structured way (all kinds of potential here from control to composition)

  • Projects now let you organize data, media, and scripts in the manner more associated with conventional development environments

  • What about Ableton? No news on that front, but I expect more soon. Max for Live users will at the very least get the advantages above, since Max for Live is really Max inside Live.

Looking over all that Max does, I have to say, I’m really amazed. I wonder if computer musicians ever pause to consider how fortunate we are. Even if this isn’t the tool for you, its availability – compounded by the availability of a range of other tools – is itself worth reflection.

Max is a program that shouldn’t exist, doing a number of things it shouldn’t do, for a user base that shouldn’t exist, doing things they shouldn’t be doing.

It doesn’t make sense that you could maintain a commercial project for this kind of audience, that you’d wind up with something this mature and powerful that had a continuous lineage stretching back to the 1980s. It doesn’t make sense that musicians would embrace such a tool and produce invention. The only explanation is sheer love.

Then, even as Max reaches new heights, some of the alternatives you have for making your own music tools are simultaneously growing by leaps and bounds. They provide very different approaches to music making (compare Overtone and SuperCollider, or Pd and libpd, or AudioMulch, or new Web audio tools). There really aren’t many fields that have this kind of choice, free and commercial, in their medium. In science and engineering, there’s private and public funding, producing some amazing tools but nothing with this kind of meeting of power and accesibility. There’s just something about music.

The fact that Cycling ‘74 can maintain a business model – just as open source projects maintain volunteer contributions – is a testament to sheer passion and love for music, and a commitment to perpetually re-imagining how that music is made from an atomic level up. There was a wonderful piece on C creator and UNIX co-creator Dennis Ritchie, whom I remembered yesterday, that observed that what he did was to do what others said couldn’t be done. From Max itself to what people make with it, I think that fits nicely.

So, have a look at the public beta, and let us know what you think. The release of Max 6 has caused more people to ask what this means for Pd and other tools, or even whether to patch things from scratch at all, but I’ll leave that question to a bit later. (I do have my own opinion about which tool fits which circumstance and user, but that’s best left to a separate discussion.) For now, you can try Max yourself and see what the fuss is about. If it doesn’t fit your means of music-making, know that you have a wide array of other options – pre-built to low-level code to old-fashioned tape-and-mic approaches, and everything in between. Go out and listen and see what you discover.

http://cycling74.com/downloads/max-6-public-beta/

  • http://noisepages.com/members/griotspeak/ griotspeak

    I am slightly more excited as more details about the Javascript improvements come out. I really hope that there is a way to get strong timing. It broke my heart to discover that the timing of my patches was doomed because I like Javascript.

  • Peter Kirn

    Yes, in waxing poetic, I hope I'm not coming across as neglecting our journalistic duties –

    If you have things you don't like, or things you wish to ask Cycling about, I'd love to hear them. This isn't a review, since it's still in public beta. So ask now, and we'll investigate!

  • Peter Kirn

    Of course, as certain parties have been saying in comments lately, my sole purpose in writing is to increase sales. That's it. That's all I do. ;)

    (seriously, let us know what you want to look at!)

  • http://noisepages.com/members/julienbayle/ Julien Bayle

    not "perhaps", Peter, it IS the biggest update considering filter design, UI improvements & … 64bit audio .. at least.

    my first clicks yesterday evening/night when, just before to jump in bed I downloaded the beast:
    http://www.youtube.com/watch?v=_XME_YqR_Iw

  • Peter Kirn

    Yes, I think it is. Someone might correct me re: Max 3 or something, though, or the addition of MSP. ;)

  • Peter Kirn

    PS, Julien, double-check — your video was already embedded in the story! ;)

  • Seppo

    really nice job done by cycling74, but to take up the cudgels for max's free sister pd, You can run multiple patches and instances from within pd with the pd~ object, even taking advatages of multi-core cpus.

  • http://noisepages.com/members/griotspeak/ griotspeak

    I think that the new GEN objects are supposed to effectively 'replace' writing externals, but I would like to know if there have been changes to writing externals. I have a few ideas for externals (not audio processing) but had 'too much' trouble getting xcode 4 to play nice with max. I know it is possible, but it doesn't seem to approach straightforward.

    In thinking up all of my questions, I have realized that i used max 'incorrectly.' Most of these updates are nice, but I like text based editing so much that I only make GUI in max and then drop a JS object in to power it all.  

    there wouldn't happen to be additions to ~groove would there? :p

  • http://noisepages.com/members/griotspeak/ griotspeak

    I think much of that has to do with how much dynamic grid work I do in Max. a fixed grid doesn't perform badly in 'pure' max… but if you don't know the dimensions… fuhgetaboutit

  • http://noisepages.com/members/julienbayle/ Julien Bayle

    Peter… I didn't see.

    More asap.

    working on my probabilistic sequencer for max for live (probably as max standalone too), I'm especially concerned by the JS improvements.

    Indeed, I'm totally hesitating between pure max objects patched (probably inside a gen~) and a pure JS Core…

  • http://d.atal.us datalus

    Are there any scripting language alternatives to JavaScript? I'm not really sure it will ever be able to achieve tight timing…not to mention it's not such a great scripting syntax :/

  • Peter Kirn

    @datalus: Jitter now uses Lua.

    I'm not sure the timing issue is a deal-breaker, because you'd be doing your actual timing in Max's own objects and timing blocks. This is the same thing when we were looking at similar scripting alternatives for other languages. But maybe I'm missing something?

    If JavaScript is of interest, we can go further into how things have changed — it looks like a far more viable option for Max than it was in the past.

    (Looking at what you could do with something like JS and Pd, too, by the way… script everything!)

  • http://noisepages.com/members/griotspeak/ griotspeak

    @Peter Kirn I believe that Julien Bayle and I are both talking about using JavaScript instead using objects for logic. gs.suite was completely built this way. I did a minimal amount of the scripting you alluded to to hook control signals into my main [/js] and then I do all of the thinking and output status data for display. 

    I stopped work on all of gs.suite when I realized exactly how doomed my timing was because it was in JavaScript. (If you dragged the bottom display area in max for live back and forth quickly there was easily discernible jitter in the timing.

  • http://s.hryx.net/ Stevie

    Very nice article about a great update. I'm honestly amazed by the number of smart, useful features and fixes that were added this time. Now if only Pd would give 2 poopz about usability.

    Re: Scripting. I hadn't realized Jitter uses Lua. Why on earth doesn't all of Max use Lua?

  • http://www.humblesound.com humblesound

    For me the final video in this article, the Usability video, is the most powerful.

    For years and years I've wanted to get into MAX/MSP, downloading trials and getting frustrated with not knowing which devices and commands were used to do and create the things I wanted which always ended up in me having 30 browser windows open, nine tutorial projects, and fourteen MAX help windows.

    The ability to type in a word like oscillator, or map, or average, or anything like that, and have it search through the DESCRIPTIONS of the objects instead of their sometimes very obtuse names, and show you suggestions of what you very likely had intended to place, is super, super, super powerful.

    With say Processing or PHP or other javascript libraries documentation online is pretty easy to navigate, but I never felt like MAX really had that.

    Time for me to sell some plasma and finally get MAX.

  • Bynar

    I can honestly say that I was not really looking forward to this update all that much. That all changed when I downloaded the beta last night. I think the one feature that has been neglected to be mentioned is the return of a gui for the detonate object. Max 6 gets closer to being a real modular daw with a proper midi editor, transport objects, and now mixing between patches. I think it's time to take Max all the way. Like Peter said I would not be surprised to see more live sets using max exclusively in the next coming months. 

  • http://robinparmar.com/ robin

    I have never much liked the sound of Max and so the improvements there look massive (no pun intended). Better yet are the UI features which will go a long way towards removing the drudgery of building a patch for those who do not spend all day every day in the environment.

    All they have to do now is open source the project. :-)

  • Peter Kirn

    @Robin: the "sound" of Max still has a lot to do with the patches themselves.

    You have to choose objects carefully, and things like band-limiting aren't always a given.

    So don't read *too* much into the sound improvements, welcome as they are. They should make Max sound better, but some of the *perception* of Max (and Pd, and really all these environments) is colored by the exposure people have to *content* produced in the tool.

  • http://www.cassiel.com cassiel

    The new Javascript implementation in Max doesn't support threads running in Max's scheduler. That's a weakness of JS implementations: none supports multithreading properly.

    For scripting, if you can face the task of getting a JVM installed, I have packages which provide Groovy, Python and Clojure. All support multithreading (Clojure being especially suited to it, of course).

  • http://www.lividinstruments.com Peter Nyboer

    Regarding gen replacing writing external objects and the idea of graphic vs. text editing: gen will support text-based scripting (if it doesn't already in the beta!). So, you can have it both ways. At the beginning, I don't think gen will replace all need for writing custom externals, but it will help a lot. Regarding timing and javascript – JS will see a lot of improvement in execution speed, however, it is unclear if the priority of JS execution will change in Max.

  • http://www.cassiel.com cassiel

    The potential of gen~ and friends is that, one day, it might enable Max to operate as a cross-compiler to other (possibly embedded) DSP platforms.

  • http://cycling74.com Andrew Benson

    Just wanted to chime in with a couple of clarifications. While our Lua object is called jit.gl.lua it can actually be used for any Max scripting. It's similar feature-wise to the JS integration.

    As for using Gen vs. writing custom externals in C, here are some of the benefits to using Gen:

    - You don't have to use an IDE or leave the patching environment

    - Since Gen code is saved just like a patcher, and is generated/compiled at runtime, you can easily create code that is cross-platform without setting up multiple build machines.

    - You can easily modify and adapt your Gen code in place, while the patch is running.

    - You can integrate procedural text code and expressions with visual programming using the Gen 'codebox' object.

    - It's way more fun than using XCode.

  • http://noisepages.com/members/griotspeak/ griotspeak

    @Andrew I could get behind your points, I suppose time will tell. 

  • http://noisepages.com/members/griotspeak/ griotspeak

    I suppose my question is whether or not gen~ is 'worthwhile' when doing scripting that is not interested in audio. I want to write externals for control manipulation.

  • http://cycling74.com Andrew Benson

    @griotspeak,

    For now, Gen is specific to Audio, Jitter Matrix, and OpenGL texture processing domains. For control streams, standard Max patching, scripting, etc. are still great options. For those interested in complex control setups, I'd highly recommend trying out the new Dictionary objects as well.