Hi @Yann, welcome to the GP community!
If you are very new to GP, my first advice would be to take the time to discover it before scripting. Not sure what exactly you want to control, but there are many possibilities in GP for you to control plugins without scripting.
If you are sure you cannot do what you want to do without scripting, you will have to explain us precisely how and what you want to control and why you think it doesn’t work without scripting.
Have a nice time discovering GP.
Hi David , thanks a lot for your reply.
I totally agree with you that I should try first to use the out the box possibilities before playing with scripting. I will provide screenshots of what I am trying to do as soon as I can.
I was able without any problems to connect my external hw controller (Behringer BCF2000) with sync as well to a Rackspace with widgets mimicking a mixer and also connect the Widgets to the standard Audio Mixer plugin from GP. It works very well and the widgets, Audio Mixer Plugin and the BCF2000 are all in sync.
Now I have several Audio Mixer plugins in my Rackspace and what I was hoping to do is to select with a “Selector” type widget which one of the Audio Mixers I control with the BCF2000. What I tried was to add a widget that changes the midi channel of the BCF2000 midi input. But I was not able to select the changed midi output to map it to the widgets. I can only select external midi devices.
I will try to provide an example rig to help the discussion.
Hi,
I’m pretty sure the BCF just sends fader CC’s so you should be able to just learn them and tie them to widgets to control your GP favorites. I would do the MIDI Learn in Rig Manager given them names and then using the names for the actual widgets rather than learn the CC’s with widgets. That way if you change from BCF to a different controller, you can add the new controller in Rig Manager and then re-learn them for your new controller there and everything in widgets will still understand them in all of your rackspaces.
I doubt if any scripting will be required here.
Steve
If i understand correctly, you have (in one single rackspace) multiple mixer blocks with the faders bound to corresponding widgets on your panel…
Now you would like to switch the MIDI connection of your hardware faders from one mixer widget-set to another… i.e. the fader no. 1 of your Behringer is midi-wise connected to widget no. 1 of Mixer-set A, but if you toggle a (widget)switch, then the Behringer’s fader no.1 should be unbound from mixer-set A and should instead be connected to fader widget no.1 of the mixer-set B.
Is that what you want to achieve?
If that’s right, i’d say that, if it should be possible in any way, then you’d most certainly need some scripting!
But even if this “switching the target” of a hardware control source will work somehow, i guess it might bring up some issues with bidirectional MIDI-sync of the widgets and hardware faders.
Not sure if it’s possible at all…
Hello Schamass,
thanks for your message. What you describe is exactly what I’m trying to do. I suspected that it would not be that easy. It seems that I can only map a Midi device input to the widgets and not the output of the Plugin where I change the Midi channel. I thought that I could also switch the actual CC Values but I’m back to the same issue that is I can only map devices to the widgets, or it seems.
I don’t know enough about GP scripting but in other context like Protools it is possible to map the BCF2000 to sets of Faders and switch by banks of 8. In this case there is, I guess, a complete protocol using Baby HUI (from Mackie) and it’s bi-directional.
Still investigating…
Thanks all for you replies.
Yann
It is probably not impossible, but it is a bit tricky. Look for example what I did in this rackspace to have controllers changing what they control at each variation:
Regarding what you seem trying to do, we could perhaps change the MIDI channel of your control surface (at the gig script level) such that GP would see different MIDI messages depenging from the channel. But, as @schamass mentioned, the sync will also be tricky. This very special use case will need to be addressed specifically.
But what you exactly want to do is still not very clear to me.
So let’s come back to the basic question:
A gig file could perhaps better illustrate what you plan to do.
Thanks David-san,
I will prepare a example gig file. But basically I want to use the HW Controller (BCF2000) as a control surface for several Audio Mixers and select which one I control with a simple switch using a widget.
Plugin audio mixers? Those from GP others? In different rackspaces or in the same? A gig file could explain a lot of things…
Hello, yes I’m using the Audio Mixer Plugins from GP.
I prepared an example gig file but since I’m a new user to the community site, I am not allowed to upload files.
I will try to figure out how to change that and will share asap.
here is a link to a OnDrive with the file
You are now a regular user and you should be able to upload gig files. Thanks for the link. We discussed of your use case with some advanced users… hope there is, stay tuned
Why don’t you use the BCF2000 PRESET keys? each preset using, say a different MIDI CH?
Preset 1 (all controls on ch4) = Audio Mixer 1
Preset 2 (all controls on ch5) = Audio Mixer 2
Thanks Keyman,.
Thias is a very good suggestion. I have not used presets and BCF setting yet, I only used it so far with the standard USB mode. I just need to figure out how to change the Midi CH and set a different value for each preset.
I will try as soon as I can.
Yann
I tried and it works !Each Fader/Rotary/Buttons need to be programmed with the Midi Channel and then the Preset Stored.
Thanks. I am still curious about a scripting approach as it may provide more flexibility as I make things a bit more comprehensive.
This jogged my memory about my FCB1010. I’m still basically using the original preset on it. This will open up quite a few new possibilities!
Hello everyone I thought I should give you news about my BCF2000 project since thanks to many of you in the community I was able to find a solution that works very well for me. I used a combination of configuration of presets on the BCF2000 with different Midi channels as suggested by keyman and several bits of scripts I found in the forum. I’m now sharing the gig file for those interested and for any suggestion of improvement.
Basically I have two panels with a 8 stereo channel each with Fader, Pan, Mute and solo using the build in GP Plugin. I added a button to open or close the plugin and a Button to select between the two mixers.
When I press on on Select button the BCF2000 is controlling the respected Mixer and is synchronized.
Thanks too everyone. I’m starting to like scripting after this first experience.
BCF2000_Mixers(12).gig (1.0 MB)
The Rackspace Script bellow:
//Declarations
Var
BCF2000_Out : MidiOutBlock
Panel_Name: widget
PanelLabel: string
//MIX A Widgets
TriggerButton_A : Widget
CH_A1_Volume,CH_A1_Solo,CH_A1_Mute,CH_A1_Pan : Widget
CH_A2_Volume,CH_A2_Solo,CH_A2_Mute,CH_A2_Pan : Widget
CH_A3_Volume,CH_A3_Solo,CH_A3_Mute,CH_A3_Pan : Widget
CH_A4_Volume,CH_A4_Solo,CH_A4_Mute,CH_A4_Pan : Widget
CH_A5_Volume,CH_A5_Solo,CH_A5_Mute,CH_A5_Pan : Widget
CH_A6_Volume,CH_A6_Solo,CH_A6_Mute,CH_A6_Pan : Widget
CH_A7_Volume,CH_A7_Solo,CH_A7_Mute,CH_A7_Pan : Widget
CH_A8_Volume,CH_A8_Solo,CH_A8_Mute,CH_A8_Pan : Widget
CC_Array_A : widget array
//MIX B Widgets
TriggerButton_B : Widget
CH_B1_Volume,CH_B1_Solo,CH_B1_Mute,CH_B1_Pan : Widget
CH_B2_Volume,CH_B2_Solo,CH_B2_Mute,CH_B2_Pan : Widget
CH_B3_Volume,CH_B3_Solo,CH_B3_Mute,CH_B3_Pan : Widget
CH_B4_Volume,CH_B4_Solo,CH_B4_Mute,CH_B4_Pan : Widget
CH_B5_Volume,CH_B5_Solo,CH_B5_Mute,CH_B5_Pan : Widget
CH_B6_Volume,CH_B6_Solo,CH_B6_Mute,CH_B6_Pan : Widget
CH_B7_Volume,CH_B7_Solo,CH_B7_Mute,CH_B7_Pan : Widget
CH_B8_Volume,CH_B8_Solo,CH_B8_Mute,CH_B8_Pan : Widget
CC_Array_B : widget array
Initialization
CC_Array_A =
[CH_A1_Volume,CH_A1_Solo,CH_A1_Mute,CH_A1_Pan,
CH_A2_Volume,CH_A2_Solo,CH_A2_Mute,CH_A2_Pan,
CH_A3_Volume,CH_A3_Solo,CH_A3_Mute,CH_A3_Pan,
CH_A4_Volume,CH_A4_Solo,CH_A4_Mute,CH_A4_Pan,
CH_A5_Volume,CH_A5_Solo,CH_A5_Mute,CH_A5_Pan,
CH_A6_Volume,CH_A6_Solo,CH_A6_Mute,CH_A6_Pan,
CH_A7_Volume,CH_A7_Solo,CH_A7_Mute,CH_A7_Pan,
CH_A8_Volume,CH_A8_Solo,CH_A8_Mute,CH_A8_Pan]
CC_Array_B =
[CH_B1_Volume,CH_B1_Solo,CH_B1_Mute,CH_B1_Pan,
CH_B2_Volume,CH_B2_Solo,CH_B2_Mute,CH_B2_Pan,
CH_B3_Volume,CH_B3_Solo,CH_B3_Mute,CH_B3_Pan,
CH_B4_Volume,CH_B4_Solo,CH_B4_Mute,CH_B4_Pan,
CH_B5_Volume,CH_B5_Solo,CH_B5_Mute,CH_B5_Pan,
CH_B6_Volume,CH_B6_Solo,CH_B6_Mute,CH_B6_Pan,
CH_B7_Volume,CH_B7_Solo,CH_B7_Mute,CH_B7_Pan,
CH_B8_Volume,CH_B8_Solo,CH_B8_Mute,CH_B8_Pan]
End
//Change Preset Function
Function ChangePreset (Preset:integer)
var SysexMsg : SysexMessage
SysexMsg = # F0 00 20 32 00 14 22 00 F7;// Preset select sysex String
SM_ChangeValue(SysexMsg, 7, Preset);//Change byte 7 to preset value
SendSysexExternal(BCF2000_Out, SysexMsg);
End
//Synchronize BCF and Widgets Function
Function SyncBCF(CC_Array : widget array)
var x : integer
For x=0 ; x<32 ; x=x+1 Do
ResyncWidget(CC_Array[x]);
End;
End
//Select MIX A and Send Sysex MIDI messages to Change Preset to 1 when button A pressed
On WidgetValueChanged(newValueA : double) from TriggerButton_A
If newValueA == 1 Then
SetWidgetValue(TriggerButton_B, 0)
SetWidgetLabel (Panel_Name, "A")
Elsif newValueA == 0 and GetWidgetValue (TriggerButton_B) == 0 Then
End
ChangePreset(0)
SyncBCF(CC_Array_A)
End
//Select MIX B and Send Sysex MIDI messages to Change Preset to 2 when button B pressed
On WidgetValueChanged(newValueB : double) from TriggerButton_B
If newValueB == 1.0 Then
SetWidgetValue(TriggerButton_A, 0)
SetWidgetLabel (Panel_Name, "B")
Elsif newValueB == 0 and GetWidgetValue (TriggerButton_A) == 0 Then
End
ChangePreset (1)
SyncBCF(CC_Array_B)
End
Sorry keyman the auto correction changed you name into cayman .
Aha you can edit the post at any time…
Happy you got things going!!
Welcome to the ever growing GPScript family
Good job @Yann !
One comment: the “Elsif” conditions you have in each widget changed callback aren’t doing anything, as you immediately follow it with “End”.
Also, your function calls to change presets will occur on both widget activation AND deactivation. I’m assuming you intended to put this within the IF condition that’s checking that the widget was activated.