New user. A routing/splitting audio environment for deep processing through Vst
Hello,
I would like to ask for some initial advice.
I'm going to test Max/MSP to re-create my real time audio processing, which you can see here:
http://www.unguitar.com/wp-content/uploads/2015/12/routing.gif
As you can see it basically contains some Vsts and some audio controlling modules, used to split/mix and route signal.
I need to check how easy Max/MSP allows me to create such environment and how easy it allows me to control it via midi.
Beside controlling gain values of input/output and splitting modules and bypass of each Vst, I need to have a flexible "scene" management.
Consider a scene a set of values which can be saved and recalled through a midi command ( namely a cc or pc).
It should be possible to say which values such scenes are recalling and which no.
For example I need them to recall specific Vst preset but not gain values of audio modules.
It is essential such concept to be applied so that when you recall a scene the audio engine doesn't drop out as you might want to change a scene while a loop is playing.
This is the core system I need to check, once I know the way it can be organized in Max/MSP I can dive deeper to more complex intereactions.
Thank you for your advice,
Luca
I will just answer to myself so that this thread I've been starting will possibly help the next me who will be facing the same kind of investigation.
The audio flow in Max MSP is completely tweakable, a sort of combination of Audiomulch and Eventide's modular blocks concept.
Actually the blocks are truly very similar to Eventide post-4000 analog processors' internal algorithms.
It looks like the preset inspector is exactly there to manage midi control as I was mentioning in my previous post.
However Midi learn is still pretty obscure to me and I cannot find any specific and effective literature nor in the reference manual nor in the available videos.
Please, moderator, if you feel this thread might be useful this way, feel free to erase it.
Thank you
there is far more for preset management and midi control beside the new inspector stuff. if you control the ignal flow using gate~ and selector~ and the like, you can simply hook up a midiin object to control all other objects in your patch in the manner you like.
Your 'music-machine' is possible in Max. In fact, almost everything is possible in Max.
There are some restrictions and you need to get familiar with storage concepts for your settings. One restriction: I count about 30 VST effects in your picture and I don't have good experience with too many VSTs in one Max patcher. Don't compare a bunch of VSTs to modular Eventide blocks. The latter come from the same house and are similarly programmed, designed to work together. Not so with VSTs, they are individual programs and each one is wrapped into it's [vst~] object. Your milage will vary, depending on the programming of the various plugins. Keep an eye on the DSP processor usage and latency. Some plugins may not make it into your system because of their CPU requirements and maybe latency (at least I guess that this system is for live usage).
Routing ...
Routing is not the problem. As Roman said, there are several objects for audio- and MIDI routing. It just depends on your concept. Main objects for MIDI routing are [gate], [switch] and [router]. Their audio counterparts are [gate~], [selector~] and [matrix~]. [matrixctrl] can be a great help for routing, but well, there is no perfect way for humans to see and understand a complex routing in one glance. Your setup is fairly complicated, you may think about an audio matrix mixer with [matrixctrl] in dial mode, combined with [matrix~].
Organization ...
Don't connect all objects across your whole screen, you may lose the overview after hours or days. Try to organize your patches in modules. And unless you have a fixed setup, I strongly believe that you will need [bpatcher].
VST presets ...
VST programmers have different ideas for their preset management. You must not (should not) deal with each VST individually. Store your own presets in your own folder(s) within your Max project. For that you use the storage functions of the vst~ object and need to learn about handling file paths in Max. Look into help and reference of [thispatcher] and [combine]. [sprintf] and [regexp] are also useful for that. Most likely you will use [dialog] to name your presets.
Your presets ...
For storing and recalling presets in such a big machine, I think you have only one choice: [pattrstorage]. It takes a while to understand it and the communication between objects and pattrstorage, but finally it is quite easy to store and recall presets.
A detail, because you mentioned it:
Recalling VST presets without recalling their volume setting is seldom possible. Just forget about that, store the desired setting in your own preset and handle the rest with your routing and gain control.
VST control ...
Don't even think about mapping/scaling parameter controls for each parameter of each plugin, to match it to your MIDI input in a musical way. They are simply too many and too different. Stick to the 0.-1. value range supported by the vst~ object and by all plugins. You may need curve functions to make parameters 'playable' over MIDI. Look into the [function] object in curve mode, this is the most universal and easiest way to scale and shape a data stream in one go.
MIDI learn ...
You got to program this yourself, but it is not really complicated. The usual objects to filter incoming MIDI are [midiparse] and [route]. Experiment with the small 'storage devices' in Max: number boxes, [int] and [zl reg]. [coll] can store a lot of data. I think you need to store your MIDI mappings, so make sure that the values are either in objects directly readable by [pattrstorage] or can be recalled from a storage object like [coll].
Hope this overview helps – you started a big project ;-)
thank you so much Roman and Peter !
In particular Roman's in-depth feedback has been very useful indeed.
I'm checking all about preset recalling and see that I can possibly plugins' native presets at the beginning.
I just need to find how to recall them via a single program change to which they all respond loading a specific preset.
It is also interesting to check plugins' "snapshots" but I hardly find any literature about it.
max is a bit more "low level" than audiomulch or bidule are, and it is really a lot of work (eventually even mo e than in C++) to get a proper VST host system with parameter management (outside the plug-in) to work.
in my opinion it is worth the effort.
for a quick and dirty total recall solution try to write the current state of a plug-in preset from vst~ into a list of numbers (0.5 1.0 1.0 0.66. ...), and then store several of these on your harddisk in a major textfile somewhere inside the max path.
next time you open your patch or application, your custom default project data wil be loaded from /maxmsp/mycoolapp/recall.txt
the same way you can reinitialize your app from the path /maxmsp/mycoolapp/default.txt, allow project saving by exporting to custom named textfiles, or distibgiush between "plug-ins and routing with" or "without" last preset.