Switching rackspaces- I must be missing something obvious, right? and it's making me crazy

Longtime digital Musician, GP noob.

What I want to do: the band I play in sometimes changes things on the fly, and we improv a lot, so I don’t want a “song” that switches between the same 2-3 patches, definitely not in the same order. I want 10-12 plugins (organ, EP, piano etc) that I can go to at any time in any order. I want to switch between these using the buttons (which send MIDI CC) on my controller keyboard. Eventually I’m hoping to integrate guitar and audio player functions as well, but I’m using the keyboard setup to understand the process.

What I’ve tried: I just came to GP from having made a working keyboard rig like this in Reaper- it took a LOT of work with macros and is hard to change if want to add new sounds. (So I get routing and am not afraid of manuals, and yes, I’ve read the GP manual) I’ve created a rackspace with a piano sound and one with a Wurlitzer patch. Cool. I can get sound to/from both. I made a widget and set it to bypass the plug-in of one via a button on my controller and I could use that to turn one of the two on/off. i was just trying to get the hang of widgets, etc. and I KNOW that this isn’t the way to do this; primarily because of this part of the manual “You can switch from one rackspace to another instantaneously, either from your laptop, with up/down pedals, or via MIDI program change messages. Sounds will change without any glitching and sufficiently quickly that you can switch rackspaces even in the middle of a bar.” Sweet!!! Ok… how? I can’t seem to find anything anywhere that actually explains how to do this.

What is the mechanism/widget/process/menu/? Through which I switch from one rackspace to another in any order?

I have looked under global MIDI- options to switch to next rackspace or song but those options seem to step through in order- What if the singer suddenly says “keyboard solo!!” Coming out of the chorus (a guy can dream can’t he?) so now I need a mono lead instead of organ… Do I have to step through from rackspace 1 to 12?

Is it in the Rig manager? That seems like it might work, and I’m happy to go through and assign all 48 of my buttons in the Rig manager if that’s the only way to do it, but if so, I still don’t get the connection to switching rackspaces. Does setting things up in the Rig Manager make them available when they weren’t before?

I have watched at least 5 video tutorials all of which were doing things different enough from what I want to do that I couldn’t figure out how to translate them to my needs.

Then I ran across a question in the comments of one video tutorial similar to my use case. And the answer was:

"You could have 16 different rackspaces with 16 different sounds, and each one of them having a different program change number assigned to your 16 buttons on your keyboard

Yes! But… ok… How? Where? everything almost gives me the answer minus some crucial step.

This seems to be one of two things- it’s either so mind numbingly obvious that nobody seems to mention it anywhere ever and I’m going to feel stupid once I know the answer, OR it’s a major missing piece in GP’s functionality for my use case. Experience has taught me that it’s almost always the former, and given how robust GP seems to be, the latter seems highly unlikely. So- can anyone point me in the right direction? I don’t need my hand held- I just need to know where to look.

Thanks in advance!

By default, GP uses Program Change messages to switch to specific rackspaces. If you can change your controller’s buttons to send PC instead of CC that would make things easier.

PC 0 selects the first rackspace, PC 1 selected the second etc. If you want a custom PC number, double click the first variation name for each rackspace in the left pane and enter it there.

Also note there are some settings in the Global Midi options that control which of your midi controllers GP will accept PC messages from, so double check it is allowed.

Please read this article: Gig Performer | How to change sounds and control plugins from your MIDI controller

1 Like

For random access, you send program change messages from your controller, exactly the same way that you would switch the sound on a hardware synth or module.

That said, there are several other ways to do it depending on your goals. You probably need to spend some time understanding the basic architecture of GP to understand the different approaches one can take.

Personally I use an iPad that displays sheet music and sends a program change message to GP whenever I select a new song. Some people will use midi pedal controllers to send PC messages.

OK- there’s at least part of the puzzle- (I think?). I’m thinking of a rackspace and then variations being changes made to the rackspace, but if you don’t have any changes/variations, then variation 1 IS the rackspace, and has controls for PC messages, right? I was trying to find PC controls in the rackspace and ignoring the variation because I wasn’t (in my mind) using it.

Thanks! I read that one earlier, and forgot about it. However, what if for example, I want button 42 on my controller to switch to rackspace C in this example? I can (and have) use a MIDI monitor to figure out what my button is sending, but where do I tell GP to switch to Rackspace C? This step is not included in that article, it simply says if you have a behringer controller it’ll automatically map 1-1, 2-2, etc. What if you don’t, and it doesn’t, or you do and you want to change what button maps to what? I think I now know that those settings are actually in the 1st variation for the rackspace as mentioned by rank13 above. will test when I get home. Thanks for responding- I really appreciate the help!

thanks for the response by the way. I appreciate the help in getting started, as I’m excited to see what I can make this program do!

Thanks dhj. I feel like I have a pretty solid understanding of the basic architecture- maybe my post is evidence that I don’t, but I haven’t read anything in the manual that didn’t make perfect sense to me. I just found it odd that something something so seemingly simple- please take this controller message and have it tell GP to switch to this rackspace- would be so hard to find controls or menus for. Regardless, I appreciate your taking the time to respond. Hopefully, I’m on the right track now.

Because there is no control or menu needed — you send a standard MIDI Program Change message to Gig Performer from your keyboard (or some other device you have) and Gig Performer will respond, just like any synth module would.

The section on variation properties explains specifically the idea of assigning program change messages to cause Gig Performer to switch to the specific variation upon receipt of a program change message (technically, you don’t switch to a rackspace, you switch to a variation associated with a rackspace but when there is only the default variation, it’s the same thing)

Yes it is :slight_smile: And the User Manual page is linked.

It says " You can assign explicitly program change numbers to variations in the Variation Properties."

This is from the article. And the rackspaces/variations link is also available a few passages above.

Believe me, I try to write step-by-step as possible with plethora of useful links and screenshots. Reading linked user manual pages is very important to understand these concepts.

1 Like

Hi @MacRatchet, welcome to the GP community.

As many others have mentioned previously, to switch to rackspace/variation in GP you can send a PC (Program Change) message. This means that your controller should be able to send a PC to GP and not a CC#. No MIDI solution on both face of the earth will change its program when receiving a CC# (fortunately). So please, don’t bang your fist on the table because GP doesn’t change rackspace/variation when you send him a CC# message. This is perfectly normal and the opposite would be worrying.

We don’t know much about the model of you controller, but perhaps you could configure it such that it sends PC rather than CC# when you push a button?

If not, there is a possibility to write a short Gig Script which will convert the CC# sent by your controller into the PC you want to send to GP. But, if it is necessary to go this way, you will have to tell us more about your controller especially regarding the CC# produced by all the buttons you plan to use.

Have fun with GP. :wink:

4 Likes

Thanks all for your replies ! I certainly didn’t mean to give the impression that I was being critical of the program or the manual. I knew it was something simple I was missing or misunderstanding- in my case I couldn’t get around the term “variation” in my head, as in my thinking, a variation only exists if you’re changing something from its original state, so I thought I wasn’t interested in changing variations, just “rackspaces”. That’s on me- not the manual. Yes, I was able to switch my controller to transmit PC vs CC messages on the buttons I wanted to use. In the rig I built in Reaper, it worked much better at recognizing CC vs PC to trigger my Macros to switch patches, so I always shied away from using PC, and if I had to, I’d use a MIDI converter to translate to CC. Regardless, it’s all working as expected now and I’m able to experiment with other ideas now that I’ve cleared up my initial misconception. Thanks again!

1 Like

Uhmm, that’s not really a fair comparison – you never mentioned you were using macros to interpret incoming CC messages.

Gig Performer has a powerful scripting language that can be used to let you respond to any kind of MIDI message and perform actions. For example, you could have the following GP Script in the Global Rackspace

// Global Rackspace
var
   MidiControl : MidiInBlock
   
//Called when a CC #25 message is received at a MIDI In Block in the global rackspace
On ControlChangeEvent(m : ControlChangeMessage) matching 25 from MidiControl
var
   myPC : integer
   
   myPC =  GetCCValue(m) // Convert the CC value for CC number 25 to a PC value
   SwitchToProgramNumber(myPC, 0)

End

Please see the GP Scripting language manual and the system function list, accessible through our support page, for more information.

2 Likes

Well, kinda…

Buuuuttt…
To be clear and not oversell myself, “macros” in Reaper actions are simply bundled blocks of smaller actions/commands- in my case “record-disable all tracks, de-select all tracks, select track 6, set currently selected track record enabled” became a single command that I could map to a specific controller CC message. This was how I switched “presets” with each sound being a separate track, and MIDI going to record armed track(s). While reaper does have some deep scripting, I’ve never had the guts to try it out (and really with Reaper have not yet had the need to)

As was recommended to me in an earlier reply, I was able to set my controller to send PC messages instead of CC and all is now working as expected; I’ve got a pretty solid rig built- 12 keyboard patches in switchable rackspace with 3 audio players and a guitar rig in global rackpace. pretty impressive what you can do with GP! (and a hell of a lot easier to change than what I was doing in Reaper)

The ONLY thing now that I need to figure out (and scripting might help me here if I can learn the language) is if I can make the Global Tempo switch to a different specific number (vs. using Tap Tempo or mapping to a slider). i.e. hit this button and global tempo=135. This isn’t an absolute necessity, as I can probably get pretty close with tap tempo, but it would be nice to have- again I have some homework if I’m going to play with GPScript.

Regardless, at some point I may have to rethink my whole scheme in how I’m set up to have multiple keyboard sounds, a guitar rig with pedals I can turn on and off, and a live loop player all going in one gig. There are a lot of ways to skin that cat (thanks to GP’s flexibility) and they way I did it was just what made sense to me at the time, but there’s probably a better way to do it using setlists/songs. (I also considered multiple instances, but wasn’t sure if that’s a bigger CPU hit) I just haven’t played with that part yet- but that’s usually how I roll with new software- Can I get it to make sound? Can I control specific things via MIDI? Can I get it to mostly do what I want it to do? THEN- Is there a better/more efficient way to get it to do this or do more?

Regardless, I appreciate everyone’s help and suggestions. I’ve been hoping for a piece of software like this for quite awhile!

Just use a widget and map it to global bpm and then you can set the global tempo

Yes, I know – GP Script is much more general than that but can trivially perform those kinds of actions when needed.

See for example the current list of available functions (what you call commands/actions) that you can use with GP Script - with lots more in the upcoming GP 4.5

For a trivially made up example, you could start AbletonLink set the BPM and start recording all audio inputs when you push a button - and that button can be associated with a CC message from your hardware, etc

Var 
   MyAction : Widget  // A button
   
On WidgetValueChanged(newValue : double) from MyAction    
   if newValue > 0.5 // Button was pressed
      then
        AbletonLink_Enable(true)
        SetBPM(125) // Beats Per Minute
        RecordInputs(true) // Start recording all input audio
  end      
End

Thanks dhj. Just so I’m clear- in your example above is ableton link being activated because that’s the best/easiest way to change global tempo to a specific number or because we’re trying to activate recording? In reaper I record armed tracks so that MIDI was sent to them- it was basically how I routed MIDI to different instruments- I wasn’t actually recording on the tracks. In my case i just want to sync the delays in my guitar rig (in global rack) to the specific tempo of each song in my audio players (also global)

No. I just picked picked a few functions completely at random just to show conceptually how you can trigger “actions” in GP

Alphabetically, the Ableton function was the first one in the list. No other reason!

I added SetBPM because I could!

I added the Record function because you mentioned an action for recording tracks.

There is nothing to be inferred from that example other than to show that you can trigger actions in GP

Right on. Thank you! I will read up and play around with the scripting and see what I can make it do! Again I appreciate the help!