Widgets / Omni Midi Channel?

I am trying to setup a generic program list that can be used by any of my keyboards via GP instances. This allows me to create one patch list, instantiate it as many times as I like, and then decide in realtime, which patch I want to use for which device. This is especially useful for jamming.

Most everything is working fine…

I have created dedicated IAC Bus to receive MIDI messages. I can filter them using a button matrix (shown below). I can also filter by input device/channel (not shown). Note: It would be nice if I could use a Global Rackspace for this, but I can live with copying it to every patch for now.

My problem is that I cannot map external controllers to the instances in a generic way because you force the channel number on the MIDI assignment for the widget (as shown below).

If I could set the channel to OMNI, then all instances could respond to the same MIDI CC, but on different channels - depending on how I filter them. So, in the case below the patch would respond to CC 7 no matter what channel it comes in on. This way different instances can use the same mapping, depending on the filtering and it would allow me to create an external mixer for all the generic instances using the same CC on different MIDI channels.

I can live without it - I just won’t map a controller to the instances and use the UI instead for controlling instead, but it would be great if you could help me to get around this problem. The benefits of having one patch list for all my devices - which can be used in parallel - far outweighs the ability to control them externally via MIDI.

I’m not sure why you can’t use the global rackspace for this but in any case you could use a GigScript to remap the channel of all (or just the ones you want) incoming CC messages and reinject them. That way it wouldn’t matter from where they came, they would all have the same channel.

So, each instance would reply to the same channel (e.g., 1) as shown above?

Sorry, each instance would RESPOND to the same channel…

Hi @7i7, welcome to the GP community forum :wink:

OK, so I supposed your “program list” is a set of rackspaces, where each rackspace is a program/patch. But as it seems that you are manipulating MIDI channels I am not sure anymore. Could you explain us why you need to change the MIDI channels?

As each GP instance receives all the MIDI in port, why should you use IAC here?

What’s the purpose of this filtering?

Perhaps you could describe exactly what you want to achieve, because there are also possibilities to use OSC between instances…

1 Like

Please try to stick to these guidelines:
How to report issues and ask properly for help? - General discussion about Gig Performer - Gig Performer Community
… this will make things much, much easier for each of us.
Thank you. :beers:

1 Like

I would like to be able to run multiple instances of the same patch list.

I would like each instance to be able to respond to different controllers.

I would like to decide which controller to use while I am running it.

I can do this by filtering the midi messages from specific devices or channels by setting up widgets to control the filtering.

This works great!!!

So every device can connect to every instance together or separately - depending on how I setup the filtering.

Only problem is, the Widgets are connected to specific channels so every instance uses the same channel/cc. This means I cannot make it generic!

All I need is to be able to set the widget midi channel to OMNI and everything would work perfectly!!!

Actually, I suppose you could just group widgets — you don’t really need scripting.

So, I understand a set of Rackspace/Variations.

OK, so controller#1 controls instance GP#1, controller#2 controls instance GP#2 and so on…

This is not completely clear to me. Is it that while playing you suddenly want, say that controller#2 controls instance GP#1? :thinking: What would the interest of doing this if each instance of GP relies on the same gig file ? (or “program list”) Whatever the use case, if you want to do so, perhaps you could have all MIDI in ports present in each GP instance and activate/deactivate them? (i.e. block the note on messages which is the best way to achieve this result and avoid stuck notes)

Widgets are connected to a specific MIDI port, MIDI message including its channel.

Is it so that you want the widgets to be independent of the MIDI port and respond to a specific CC# from any of the controller in your rig as soon as it is the one you want to control the GP instance? Than as suggested by @dhj, who perhaps better understood what you want to achieve, you could have one widget per controller, one of the widgets mapped to a plugin parameter while the others are simply in the same group. You could keep only one widget displayed and use the optional hide property for the others.

This is exactly what I am doing…

Not possible to use the same cc across multiple instances

GP instances are independent each other, so the same CC# can be used in each of them.

Yeah, but if you use the same cc - all instances will be affected at the same time.

For example, if you use cc 7 to control volume of an instance. Sending a cc 7 will control the volume of all instances.

A CC#7 is supposed to control a Widget, not a volume directly. Then what this widget controls depends from how you organized your rackspaces. If you want us to now how your gig file is organized, please post it.

I figured out how to do it…

I created a scriptlet called “Midi Echo”, which takes incoming MIDI messages and sends them to the Local GP Port.

On MidiEvent(m : MidiMessage)
InjectMidiEvent(“Local GP Port”, m)

I route all my devices to this scriplet. I use widgets to control the filtering.

The widgets are used to bypass the midi device and constrain the midi channel. This is how I can specify, which devices/channels are allowed into the instance.

Each patch uses the Local GP Port as its input.

All patches use Local GP Port channel 1. I use Local GP Port channel 16 to handle the master volume control messages.

I dedicated one IAC bus and used a constrainer to determine which channel the instance should use to listen for master control messages. (I will replace this bus later with OSC or a dedicated device.)

The only thing I haven’t figured out is if I can use the same mechanism for program control messages.

Nevertheless, everything else will work this way. Each instance is now “fractal”. I just don’t like it that I must manually set the master input channel. I wish there was a way to get a “global counter” across instances. If you know, please tell me… (thanks!)

A PC is a MIDI event, it works the same way.

As I told you, it is better to block note on messages in MIDI in blocks rather than bypassing the whole block. Imagine you play a note (note on), then you bypass the MIDI in block and release the note (note off). The note off won’t be sent as the MIDI in block is bypassed and the note will play forever.

It’s a good idea, but then all other midi messages come through - e.g., modulation (cc 1) will be sent to every instance.

Btw, I have the same problem with changing the channel - if I change the channel while I am holding down a key it will not release.

1 Like

Well, of course it won’t. That’s how MIDI works!

At this point, I’m afraid I’m lost — I’ve no idea any more what you’re even trying to accomplish (and I’ve re-read your first post)

  1. What is a generic program list?
  2. What does it mean to create one patch list?
  3. What does it mean to “instantiate it as many times”

It seems to me that you’re trying to create a very complicated solution to a problem that I don’t even understand (sorry)

Yeah, it has gotten a little of out control - I have to admit.

Here is my use case…

I have a KeyLab keyboard with 16 pads.
I also have a LaunchPad controller.
I have an iPad.
I have a PACER foot controller.
And I use Ableton Live.

I have created a GP file with all my favorite patches.

I want to be able to play any one of my favorite patches from any device or a combination of devices.

Why? Because when I am jamming I don’t know what I want, so I need to be able to configure everything on the fly while I am playing.

So, I launch my GP file with my favorite patches several times using instances (very cool).

As such, I may start using one patch on my keyboard and then decide to use in on the LaunchPad instead. While I am playing that, I may pick another patch to use on my keyboard using a separate instance. I may then start playing another patch on my iPad. Or, I may want to play a patch using both the keyboard and the Lauchpad. It’s all realtime, so I don’t know what I want until I am doing it. And finally, I may want to record something using Live and then loop it.

I could easily do this by saving the same file multiple times, but I would be limited to 1 channel per file. With this approach I can use all my devices with 16 channels per device. So, for example, I can loop 16 different instances with Ableton Live. Or access 16 instances from my keyboard.

I would probably never do that, but I could…

Of course, if I knew what patches I wanted to use together I would just create patches to do that in a single instance.

The point of this long story is to say that I need to have a set of patches that I can pick and choose from and use any device to play them, separately or in combination.

Clear now?

Better than having stuck notes, no? There are other solutions to block other MIDI events, e.g. using two parallel identical MIDI in blocks one with all MIDI events filters out and the other one with MIDI notes filtered out. Block the note on messages on the first one and bypass the other one at the same time (and pray not to have a pitchbend playing).

Not exactly, as changing the MIDI channel with the MIDI constrainers you used will send a bunch of All Notes Off messages.

I have to admit that I don’t understand more. Especially because you neither answered much my questions, nor the numbered ones of @dhj :confused:

Knowing the devices you own, I am wondering even more what is your use case. You have only one keyboard controller in your rig and I wonder how a LaunchPad or an iPad could be a replacement for this keyboard controller. :thinking:

1 Like

This is a very unusual use case. That said, I’d be tempted to use GPScript and OSC for this stuff — receive everything from your controllers into one instance and then send OSC messages to the other instances. Probably much less convoluted.