falkTX / Carla

Audio plugin host
https://kx.studio/carla
1.62k stars 146 forks source link

Plugin groups for CPU saving in multiple-song live performances #435

Open unfa opened 8 years ago

unfa commented 8 years ago

I used to tie my live performances together with Carla, having all the instuments and effects loaded for the entire gig.

The problem is - that's a big CPU hog. I'm really using just a small part of that signal chain at once - a few plugins for each song, and some that are used all the time (like a master limiter with CC controlled gain).

There's also an external Qsampler for a Piano sound, but that's not much strain when it's not playing.

I'd like to be able to assign plugins to groups.

I would create a group for each song that I'm gonna play and assign related plugins to the groups.

Then I'd like to be able to cycle between the groups to enable only the plugins in the currently active group, and have all the rest disabled to save DSP load. I'd want to be able to switch between the groups with my USB MIDI controller keyboard in two ways:

1. Assign a key that'll activate a certain group (deactivating all the others). For example: I have 8 groups for 8 songs, 1 key on my keyboard assigned to each group - I can select any an any time.

2. Assign keys to cycle between the groups in a predefined order For example: I have two keys to activate next and previous group. I play a song, I'm done, I hit the "Next" button and I'm ready for the next song. An optional BIG display of which group is currently active (number / name) could be nice.

I thought that this could be somehow badly hacked by running one Carla instance for each song (group) and using a custom script to stop and continue the Carla instances, using some raw MIDI readouts in a bash script to control this live. But this seems badly inelegant and unstable too.

Do you play gigs with Carla? Do you think this is needed?

PS: Here's a related forum post I wrote some time ago: https://linuxmusicians.com/viewtopic.php?f=47&t=16240&p=74904#p74904

progwolff commented 8 years ago

Actually I began writing something like you described in 2. for myself some days ago. I rejoined a band where I will need a differend setup for every song. My idea for now is to use 3 instances of Carla, one for the current, one for the next and one for the previous song. This way there would be no loading times between the songs, as the next song is already preloaded and the overhead of the additional carla instances should be negligible as only one will be connected at a time. I will share my results when it's kind of stable.

Sure it would be great if carla had this feature build in.

unfa commented 8 years ago

@progwolff - that's an interesting setup.

I personally would not want to have anything being loaded during the show - I'd want it all to stay in RAM, ready to unfreeze and play. I would be afraid that loading plugins into the "next" Carla instance could cause audio dropouts.

However if that's safe - I think it'd be a great approach, because it lets you use much less RAM during the show. and probably managing the song Carla projects would be easier.

I'm curious how it'll work for you.

progwolff commented 8 years ago

Performer

This seems to work for me. Still needs some testing though.

@falkTX It would be useful if there was a way to determine the jack client name of a carla instance.

falkTX commented 8 years ago

How do you want to receive the client name? Note that you can customize the client name using an env var. See https://github.com/falkTX/Carla/blob/master/source/carla_host.py#L67

progwolff commented 8 years ago

Thanks for the quick response. Even with the env var I still can not be sure what the final client name will be. It might be "-3" if there already were three other clients with that name. A reliable status line to stdout would suffice.

SpotlightKid commented 7 years ago

Maybe this will also help you to connect clients with dynamic names: https://github.com/SpotlightKid/jack-matchmaker

progwolff commented 7 years ago

Thanks, but what I want to do is not to connect all Carla instances to the same ports, but to connect only one instance of which I don't know the exact name and leave all others unconnected.

falkTX commented 7 years ago

a quick solution is just to print the client name when carla starts up. you're already capturing the output to check when it's ready, so this should work...

progwolff commented 7 years ago

Sure, this would work. Carla just does not print its real jack client name.