surge-synthesizer / surge-rack

Take Surge and factor it into modules for VCV Rack
GNU General Public License v3.0
168 stars 12 forks source link

More Advanced Auto-Hookup Options (was Expanders are Implicit Connections) #829

Closed vcvrackideas closed 9 months ago

vcvrackideas commented 1 year ago

Hi, I've just got an idea I described in title. The nice example of that connection is Lomas Gate Sequencer, although it pass no audio - cv only but works very flawlessly and that expanding very handy while patching. Regarding SurgeXT effects this can be useful to find fx route 4x time faster than with cables.

Cheers!

ContemporaryInsanity commented 1 year ago

This would be handy.

My suggestion would be, when two Surge modules touch, and the left one has stereo out and the right stereo in, the cables are patched automatically. I think this is possible but not 100% sure?

baconpaul commented 1 year ago

It’s probably possible but isn’t it a bit antisocial? I thought folks used expanders for things like extra knobs or ports not for skipping wiring?

baconpaul commented 1 year ago

(I had had the same idea and rejected it for this reason - it’s really unidiomatic)

ContemporaryInsanity commented 1 year ago

It sure would speed up patching, I'd love it. In this case it wouldn't be an 'expander' as such, just a bit of code that checks if a new rightExpander is Surge with stereo in, if so then auto-patch.

It would't be skipping wiring, just programmatically wired.

Could have a global 'Auto-patch' on / off option on the right click menu.

baconpaul commented 1 year ago

Yeah the reason I thought about it is you can share blocks also to avoid compounded latency

lemme think about this for a bit. I want to find the right idiom

ContemporaryInsanity commented 1 year ago

I agree that using expander module functionality to accomplish this without cables is a bad idea for all sorts of reasons.

SURGE XT AUTO-PATCH

How I see this working:

If a module sees a new rightExpander ID it checks to see if it's a Surge module with stereo inputs, if so then the module outputs are programatically patched to the right module inputs. As Surge modules are mostly of uniform width this would also facilitate rapid swapping of modules, just delete existing module, drag new one into place, module to the left of new module sees a new rightExpander ID so auto-patches, new module also sees new rightExpander ID (assuming there is one) so auto-patches, no further clicking & dragging required. This would obviously not work for the rightmost module in a voice when the next module is not a Surge module, but could work with a new Surge utility module that is just a stereo pass through, I consider this a might be nice to have feature for a later version.

This would make the creation of full Surge based voices so much quicker. Select VCO, select filter, select envelope, select delay, select reverb etc etc & done, all automagically patched from left to right with FAR fewer mouse clicks & drags.

Consideration needs to be given to what happens with a module that sees a new rightExpander that already has inputs patched, and what happens with a module that already has outputs patched when it sees a new rightExpander. One option is do nothing, the other, delete the existing cables, then auto-patch. I think I'd prefer the latter.

As a side note, I'm autistic and one of my autistic super powers is sometimes my mind works so fast that once I've patched a voice up manually, by the time I've finished wiring I may've forgotten the idea that inspired the voice module choice in the first place along with much of what I intended to do next, this would help immensely with that.

baconpaul commented 1 year ago

That’s an interesting idea. If you put a filter next to a vco and a vca next to a filter and nothing is connected make the cables (opt in)

heck I could even detect if you have an auxmaster in patch and add a right mouse gesture to patch into an unconnected aux

ha ha that’s way better than hidden implicit cables yeah - love it

Im head down in a different project right now but I won’t forget this idea. Good one

ContemporaryInsanity commented 1 year ago

auxmaster ???

baconpaul commented 1 year ago

The aux send receive expander from mixmaster

baconpaul commented 1 year ago

Basically imagine if you had a mixmaster with aux in your patch and drag out a surge or airwin and there’s a right mouse button “wire in as aux effect n”

ContemporaryInsanity commented 1 year ago

Stupid me, auxmaster lives in my template patch - doh! Great idea.

Andreya-Autumn commented 1 year ago

I like this idea a lot. Only thing I'm skeptical of is letting it delete/replace already patched cables. That could easily become a nuisance, I'm definitely inclined to say that should be opt-outable if so. Otherwise great idea!

baconpaul commented 1 year ago

Yeah delete nothing ever opt in for auto and in non auto mode have rmbs

I thought of an RMB “hook up left to right” where you stack 5 modules then rmb thst on 1 and it adds the 10 cables for instance

ContemporaryInsanity commented 1 year ago

"I thought of an RMB “hook up left to right” where you stack 5 modules then rmb thst on 1 and it adds the 10 cables for instance"

Interesting, but that's an extra couple of clicks over my solution and kinda breaks the option for rapid module replacement, i.e. you'd have to delete Reverb1, replace it with Reverb2, then (instead of it already being auto-patched, as Reverb2 saw a new rightExp id, as did the module to its left) you'd have to go to the first module in the stack & RMB again?

Edit: kinda missed 'opt in for auto' somehow, apologies...

baconpaul commented 1 year ago

no worries. yeah make it auto-opt-in and then rmb if you don't would be the idea. really neat idea too.

so now all that's left is to see if i can actually code it :)

but i'm off in a separate project for a week or two ... will leave this one sit for a bit while i do that.

baconpaul commented 1 year ago

RackAuto

So here's auto-connectors to mix-master as a proof of concept. Should be able to do auto-connectors to neighbors also if neighbors advertise the right API.

Just getting mixmaster right will improve my workflow!

But rack 2.2 won't be here until the fall so will be a while before this is in prod stable code.

baconpaul commented 1 year ago

BeMyNeighbor

And here's one more in the spirit of the original ask

baconpaul commented 1 year ago

I think really the only thing to do left on this issue is make sure air windows implements it too in a way that works, and then what's in the codebase is in good shape.

baconpaul commented 1 year ago

oh and probably a full aux insert for all 4 in one click.

ContemporaryInsanity commented 1 year ago

I think really the only thing to do left on this issue

Are you no longer planning to implement auto-patch where two modules placed adjacent to one another automatically link up?

baconpaul commented 1 year ago

I am going to implement tone click to wire but not auto, phew thst was my plan.

I think I will do one click to wire a sequence too

Andreya-Autumn commented 1 year ago

That sounds great!

ContemporaryInsanity commented 1 year ago

but not auto

Must admit I'm disappointed as full auto would be fastest workflow, however this is still great, thanks so much for all of your work.

baconpaul commented 1 year ago

well maybe i can add an option for when-they-kiss you wire in the onExpander but I think it would be annoying. definitely want it as an option.

Its not hard code to write now I have the connector stuff. I just am not sure it is a good feature!

I'll try it in the 2.2 cycle and decide.

baconpaul commented 1 year ago

Also @Andreya-Autumn indicates if you auto-hook with a connection there it crashes as opposes to forbids (now fixed)

baconpaul commented 11 months ago

OK 2.2 is gonna have the neighbor-hookups on every item and also the mixmaster-hookups. (Or at least will with my next commit that will fix #945). But there's more ideas in this issue so I'm going to keep it open but bounce it out of the milestone so we can ship 2.2 this year.

baconpaul commented 9 months ago

2.2.2 (about to get pushed to github and coming soon to library) will also contain the 'find any neighbor in this row' menu item which i find super handy. I've also upgraded airwin2rack and baconplugs to participate in this scheme, and may do mschack soon also.

So I think I'm going to close this issue and as we want to generally change the nature of autoconnectors, we could open separate issues for individual ideas, changes, or expansions.

Thanks so much for these ideas. They are good ones and are well recieved!

ContemporaryInsanity commented 9 months ago

Are we not having an option for full auto-patch now? Still think that would make for the ultimate workflow speed, at least for the way I work.

baconpaul commented 9 months ago

Oh you mean full left to right along the chain. Yes that's still a good idea.

Yeah let's open a separate issue for that and I can add it. I have a couple of questions about some edge cases we should hash out

I just had too much in this issue to be bite sized. I really like "one issue a commit" mode once we get basics of a feature in place - workflow just works better for me!

baconpaul commented 9 months ago

I'll open an issue now and tag you