Who is gen~ for?
Just wanted to say hi in this first post and also ask my first question!
I’m new to Max/MSP and was wondering if Gen~ is something I should get straight away. As a newbie is it something that’s definitely going to be beneficial to me immediatly or can I wait until I’m more comfortable with max/msp?
This is from the documentation in Max6. It should give you some ideas as to what Gen is for:
Why Use Gen?
You want to create processes that can’t be efficiently achieved with ordinary Max/MSP/Jitter objects
You want to program visually at a low level while getting the performance of compiled C or GLSL code
You want to use a concise text based expression language (codebox) rather than visual programming or coding in GLSL
You want to avoid having to compile separate windows and macintosh versions (and in the future, 64-bit application binaries)
You want to design new algorithms and see or hear them immediately
You want to design an algorithm that can run on the CPU or GPU, on Windows and Mac
arbitrary new oscillator and filter designs using single-sample feedback loops with gen~
reverbs and physical models using networks of short feedback delays with gen~
sample-accurate buffer~ processing such as waveset distortions with gen~
efficient frequency-domain processing such as spectral delays using gen~ inside pfft~
custom video processing filters as fast as C compiled externals with jit.pix, and graphics card accelerated with jit.gl.pix
geometry manipulation and generation with jit.gen
particle system design with jit.gen
iso-surface generation with distance fields in jit.gen
consolidation of chained MSP operators or jit.ops and other MSP/Jitter objects that can be combined into one meta-object
replacement for jit.expr, performance and interface improvements
You want to be able to have a simple way to make use of the GPU for image processing both in visual and textual form
Gen refers to a technology in Max representing a new approach to the relationship between patchers and code. The patcher is the traditional Max environment – a graphical interface for linking bits of functionality together. With embedded scripting such as the js object text-based coding became an important part of working with Max as it was no longer confined to simply writing Max externals in C. Scripting however still didn’t alter the logic of the Max patcher in any fundamental way because the boundary between patcher and code was still the object box. Gen represents a fundamental change in that relationship.
I feel like somebody’s use of gen really depends on their background and their interests, and what sort of sound manipulation or coding environments they’re used to. I’m still a bit of a novice in Max (probably about 6 months deep) but had I not spend a few months with regular Max I don’t know how easily I would have been able to grasp how to use gen~ effectively.
Anyway, I’ll just give a personal example of my own gen~ use and maybe that will help answer your question.
I originally bought Max for the purpose of designing different brands of stutter effects and had no previous experience in these sorts of effects before, but had a little experience in visual and nonvisual coding. I spent a couple months learning the ropes and designing different interfaces using some of MSP’s objects for buffer playing (record~, play~, groove~, and eventually peek~, poke~, etc.). The last two objects started to give me a bit of difficulty when trying to built them into the rather complex interfaces I had made for the record~/groove~ effects, but the record~/groove objects lacked the precision that i needed for the types of really interesting effects i wanted. At this point I felt like I kind of hit a wall and ended up taking a break to start working with jitter (which interestingly ended up being my primary and most practical use for Max)
Enter Max 6. When the beta came out the first thing I investigated was gen~ and I immediately took a crack at some of my old abandoned stutter/buffer juggling effect designs. All the really precise data controlling that seems overly complex/convoluted using some old Max objects and impossible using others, came together in a couple days using gen~. Controlling very precisely on a sample level where the buffer was being played through and how in response to the interface controls was greatly aided by gen’s very basic logic operations, codebox, and general simplicity. Now, I’m having trouble building half of the entire patch in a gen object.
So basically, after some experience with other max objects I needed something simpler and more precise to be able to work with data on a more basic level and gen~ fit the bill. In my case, I would not have needed these things or gen~ had I not been introduced to those sorts of needs or to the Max interface through a few months of regular Max/MSP patching. I have a feeling that next when I try do to some more direct and basic video image processing for live visuals I’ll experience the same thing, but I haven’t felt the need to just yet because so far the jitter objects have been serving my purposes just fine. I’m finally starting to encounter things that I wish I could do more directly and precisely, and once that builds up a bit I’ll start looking towards jit.gen.
Like I said, this is just my particular experience and I’m sure it’ll be different for each different person/background/purpose. If you have no need for precision at a basic level in your application or no interest in the sort of coding it entails, then this will not happen to you. Conversely, if all you want to do is basic signal processing level stuff, then you probably won’t be able to help but jump right into gen~.
Hope this helps.
Thanks much to everyone, I have the feeling that I should get it ;)