Skrylar / skjack-vcv

First-class JACK support for VCV Rack
Other
29 stars 8 forks source link

Should skjack automatically connect? #24

Open jamshark70 opened 4 years ago

jamshark70 commented 4 years ago

All of the other Jack-capable audio software that I use automatically connects to "system:" ports, with some mechanism to choose which ports to connect to -- so that you start the software and you can get audio immediately, without any external configuration.

VCV <--> Jack doesn't do this. It's silent until the user takes action outside of VCV. (I.e., open VCV, create oscillator --> VCA --> Jack output module, hear nothing, think "Is VCV just plain broken?")

So, for every instance of a Jack module, I have to go to qjackctl and manually connect them to the hardware outputs. It makes me want to avoid opening and closing patches.

I'm willing to take a look at this, time permitting, but first I wanted to ask -- is this a deliberate design decision? (I can imagine that you wouldn't want to assume that every Jack module should connect to "system:" -- but I can't help feeling that there must be a better way to handle this than to connect to nothing.)

Skrylar commented 4 years ago

It’s not an explicit design choice, though I do find it annoying when clients connect directly to system. Typically I have a mixing board (non mixer, ardour, ...) and programs like VLC will want to attach on the wrong side of it, and in VLCs case it deletes its client when playback stops so it’s perpetually screwing up the graph.

A more correct option would be to remember which sockets were connected to what, and re-make those connections when the new patch is loaded.

jamshark70 commented 4 years ago

It’s not an explicit design choice, though I do find it annoying when clients connect directly to system.

Agreed that it's bad if clients connect to "system" and there is no way to configure it. Out of the Jack software I use, Ardour and Audacity (and I think Pure Data too) have interface widgets to choose Jack ports, and SuperCollider uses system environment variables (which can be controlled in SC code) or you can invoke jack_connect/jack_disconnect programmatically.

Probably not hard to have a menu -- should there be one for every plug, or just one?

A more correct option would be to remember which sockets were connected to what, and re-make those connections when the new patch is loaded.

I wonder how to query existing connections... bc the user might make or break connections outside of VCV and this would have to be saved in the patch.

Maybe another alternative is to ask users to use a Jack session manager.

FWIW I would like to see Jack connections be more convenient, but I haven't done any VCV plugin development so I can't promise to move fast. (I'll have some reading to do.)

Skrylar commented 4 years ago

You can just ask JACK what is connected to what, if you use the graph APIs.

Supporting JACK sessions was in the plan before VCV went from open source to open core.