falkTX / Carla

Audio plugin host
https://kx.studio/carla
1.55k stars 144 forks source link

Select/filter MIDI channel(s) for instrument plugins #1408

Open lorenzosu opened 3 years ago

lorenzosu commented 3 years ago

TL;DR: have an option similar to the control channel assignment to select one or more MIDI channels an instrument plugin receives but for playback, ignoring all others. Of course leave an option for 'omni' (all channels) mode.

Motivation: currently most instrument plugins seem to work in omni mode by default (i.e. they will play anything coming on any MIDI channel). While this is great for with multi-instrument plugins (e.g. something like yoshimi or dexed), where you can assign each to its own channel, it's not always so great with 'single instrument' plugins like e.g. a drums plugin or something like MDA Piano, especially if being sent MIDI from a sequencer. In the sequencer I'd typically have all instruments in different tracks and use channels to assign instruments, trouble is that if I then send the sequencer-generated MIDI to Carla and route it to various 'single instrument' plugins I'll have all instrument play all channels. This can be worked around now either adding the internal MIDI Split plugin, but AFAIK this works only in Multiple client mode, or adding multiple outputs in the sequencer (the latter quite impractical if you use many instruments).

Ideally having this 'filtering' mechanism out of the box could be useful both for sequencing but also in live set-ups where e.g. you switch a channel on your MIDI keyboard (controller) to change instrument in Carla. Also in a hybrid setup where e.g. a sequencer is used as a 'backing track' and the user is playing live.

Example use case:

dingodoppelt commented 2 years ago

Hi, I'd love to see this in a future release. Maybe this is somewhat related to #363 because it could be part of the consolidation treating incoming midi data per plugin channel which should be 100% user mapable to either data for the plugin itself or controller data for the plugin channel (volume, dry/wet, pan). For example I'm using Cardinal with an Akai EWI breath controller and the hard coded breathCC control mapping to volume on the plugin channel breaks Cardinal because you can't unmap breathCC from channel volume. cheers, nils