too many inputs to poly~

oshii's icon

Hi guys,
I‘ve made a drum synth patch with couple of OSC’s, envelopes (graphic ones with [function]), LFOs, compressor and delay.
The initial idea was to then [poly~] the whole patch and integrate it in my sequencer patch so I can use it to create the drum sounds for beats. I‘ve only realised what kind of issue I am facing now when I counted the number of inputs that poly~ would need. It’s about 100sh!
I really need an advice from you - I guess my approach is not right.. Have you done something like this and is there something smarter that can be done?

kleine's icon

you often can use e.g. parameter lists etc. to send into poly~ to reduce the inlet count...

Jean-Francois Charles's icon

Indeed, for instance, you would give in your [poly~]'s left inlet a message like "note 60 112 0.5 0.4 1.3 7.8 3. 4. 54 23."
You could have other messages like "envelope 45. 46. 23. 1.2", using the right target.
Inside poly~, use unpack / route / etc.

Florent Ghys's icon

and if you don't want to patch many patch chords, use send and receive objects!

oshii's icon

Thanks guys for the prompt reply.
I seems that I didn't explain well the issue.
I was wondering if this is really the best approach, i.e. embed the synthesiser into a sequencer patch (in my case via poly~). Isn't there a more intelligent way, which would spare me the time and hassle sending messages with hundreds of numbers? I guess this will take a lot of time also to make it work.
I said it's probably a silly question since according to my limited knowledge this seems to be the only solution for now.
I was wondering how you guys do it.

Roman Thilenius's icon

simply put, if a "synth" or "oscillator" design includes hundreds of parameters, and you want to be able to play it polyphonic, there is no way how you could avoid connecting hundreds of parameters to a poly object.

this is always required as soon as you want to connect a GUI, automate things in realtime, or save presets.

otoh, i am somehow irritated that you are really talking about several hundred parameters. that is quite a lot, maybe you can redesign or reorganize a few of these things. care to share a screenshot or a list of parameters so that we can get an idea what it is about?

-110

Florent Ghys's icon

there is also the value object if you really dont want patch chords and send/receive

oshii's icon

Romain, well, I didn't say hundreds, but 100ish.. i.e. approaching 100..
It's nothing too fancy, I'm afraid. It's pretty lame "synth", nothing complex, but I just wanted to it to be flexible, hence the number of parameters that require input.
3 OSCs, 3 Envelopes, 3 filter sections, 6 LFOS, mixing section, compressor, delay with highness filter and degrader. With each OSC there is a choice between the usual waveforms, noise, and custom wave. For the filter sections you can select between the usual types of filters - LP, HP, BP..
Then there is possibility for FM and RM, but you might select which shall be the source of the modulation frequency.

Considering my synth is so simple, I was wondering to hear from the experts here, those who have built pretty sophisticated synths in Max, do they really send hundreds of inputs to the poly~ object? Jeez.. I still can't even start doing that. I'm afraid that will take me a year to accomplish..

I

Roman Thilenius's icon

i see two different groups of parameters here. those where you would like to use audio signals and those where you are fine with messages, because you are not going to modulate them in realtime.

sending a signal into a poly object for choosing one of two or three possible modes (AM/RM? waveform?) should be avoided. as well as using a signal numberbox to control gain and Q. :)

to "poly" something by moving an existing original into poly can be stressy. the alternative would be that you start with an empty poly patcher so that you have the chance to first decide how you want to work with poly "in general" (you will find that there are many ways how to do the same thing) then eventually allow yourself making some changes to the original.

some things might not even go into the poly at all, like an LFO which doesnt have "free run" and is not "per voice" anyway.

or maybe it is easier for you the other way round: first make the GUI, then connect everything to a dummy "through" object (a subpatch with 100 inlets and outlets) to grasp what parameter you got.

oshii's icon

Unfortunately my initial estimation was too optimistic. Just counted them all, the total number is 203... I guess this would take me weeks or months to poly~. I've never had more than 5 inputs :)
I will think about your advice and hopefully I can see my way forward, or else I'm not quite sure I would really do it.

By the way, my LFOs are per voice.

Roman Thilenius's icon

LFO:

GUI elements
V
[110.921-prepend wform freq depth offset duty reset modfreq mod]
V
(voice management)
>>>
poly~
V
[route wform freq depth offset duty reset modfreq mod]
V
[p LFO1]

Roman Thilenius's icon

max v2;
#N vpatcher 38 366 1308 535;
#P inlet 1256 39 15 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 1256 83 133 196617 prepend $9;
#B color 15;
#P hidden newex 199 121 114 196617 bgcolor 150 250 50;
#P inlet 1105 39 15 0;
#P newex 1105 83 133 196617 prepend $8;
#B color 15;
#P inlet 954 39 15 0;
#P newex 954 83 133 196617 prepend $7;
#B color 15;
#P inlet 803 39 15 0;
#P newex 803 83 133 196617 prepend $6;
#B color 15;
#P inlet 652 39 15 0;
#P newex 652 83 133 196617 prepend $5;
#B color 15;
#P inlet 501 39 15 0;
#P newex 501 83 133 196617 prepend $4;
#B color 15;
#P inlet 350 39 15 0;
#P newex 350 83 133 196617 prepend $3;
#B color 15;
#P inlet 199 39 15 0;
#P newex 199 83 133 196617 prepend $2;
#B color 15;
#P outlet 9 101 15 0;
#N comlet prepend #1;
#P inlet 48 39 15 0;
#P newex 48 83 133 196617 prepend $1;
#B color 15;
#P connect 0 0 2 0;
#P connect 3 0 2 0;
#P connect 5 0 2 0;
#P connect 7 0 2 0;
#P connect 9 0 2 0;
#P connect 11 0 2 0;
#P connect 13 0 2 0;
#P connect 15 0 2 0;
#P connect 18 0 2 0;
#P connect 1 0 0 0;
#P connect 4 0 3 0;
#P connect 6 0 5 0;
#P connect 8 0 7 0;
#P connect 10 0 9 0;
#P connect 12 0 11 0;
#P connect 14 0 13 0;
#P connect 16 0 15 0;
#P connect 19 0 18 0;
#P pop;