Nord Stage Kontakt GP Rack

Hi, I would like a little help with a script.

I bought the Ultimate Stage Piano HD bank by Junior Porciuncula for Kontakt to use it on stage.
I prepared all my setup, widgets… everything is perfect but for a visual question, I need a script.
I made a button widget to select piano and a text label to display the model piano (1 to 44).
Indeed, if I select Piano 1 (Royal Grand 3D), I get the value 0 in the text label widget.
If I choose the 2nd piano (Velvet Grand), the displayed value is 0.0232558 (2.4 if I look at the Value Widget).
How can I make it display the values ​​1 to 44.

Many thanks for your help.

Or keywords “Ultimate stage piano HD” on youtube.

Can you upload a small gig file?
Did you use host automation?

The plugin is probably only returning raw values between 0.0 and 1.0 rather than text strings.

Probably need to scale the value

Maybe

Yes, think you’re right.
The min value is 0 and max 1.0.

How can i send you my rack PianoPaul ?

Just upload it here

Ok, see the upload button.
Here is a light version (delete many variations…)
i want to specify, i do not use the EQ, delay, reverb of the Ultimate Stage Piano.
Only pianos and synth mith mix button.
Thanks for your help.

Nord Stage Kontakt.gig (1.8 MB)

I do not see your upload

the link is gone ! I updated message. :wink:

Finally, I’ve decided to show you how I solved the problem of displaying the pianos.
As the “White Grand” piano (Steinway B-211) is not available in this Ultimate Stage Pianos, I decided to add my favorite piano, the Galaxy Vintage-D (Steinway D-274).
If the midi channel is set to 1, I play the “Ultimate Stage pianos” module in Kontakt and select the piano sound with the “Piano” knob; if midi channel 2, it’s the Vintage-D.

The widgets I use in the code

My Code (I’m no expert, but I’m trying to learn :slight_smile: )

Var
   idPiano : widget
   namePiano : widget
   infoPiano : widget
   OutChannelMidi : widget

   Piano_List : string Array = ["White Grand", "Royal Grand 3D", "Velvet Grand", "Silver Grand", "Italian Grand", "Bright Grand", "Grand Imperial", "Grand Lady D", "Studio Grand 1", "Studio Grand 2", "Concert Grand Close", 
                                "Concert Grand Ambient", "Electric Grand Amped", "Electric Grand CP80", "Electric Grand Gerbstedt", 
                                "Baby Upright", "Amber Upright", "Bambino Upright", "Mellow Upright", "Grand Upright", "Queen Upright", "Black Upright", "HonkyTonk Upright", "Saloon Upright", "Romantic Upright", "BlueSwede Upright", "Rain Piano",  
                                "EP1 MK I, Low Deep", "EP1 MK I, Suitcase, Close Ideal", "EP3 MK II, Shallow Close", "EP4 MK V, Ideal Close", "EP5 MK I Suitcase, Bright Tines", "EP6 Sparkletop Vintage '67", "EP7 Tines Amped", "EP8 Nefertiti MKI", 
                                "Wurlitzer 1 200A", "Wurlitzer 2 Amped",
                                "DigiGrand 1", "DigiGrand 2", "DX Full Tines", "DX Rubba Tines", "Ballad EP1", "Ballad EP2", "Silver EP", "Hybrid EP",
				"No Piano"]

   Piano_Info : string Array = ["Steinway Vintage D-274", "Yamaha S6", "Blüthner Model 1", "Shigeru Kawai SK-7", "Fazioli", "Yamaha S4", "Bösendorfer Imperial", "Steinway D-274", "Yamaha C7", "Yamaha C7", "Steinway D-274", 
                                "Steinway D-274", "Yamaha CP80", "Yamaha CP80", "Yamaha CP80", 
                                "Nordiska compact", "Grotrian-Steinweg G132", "Baldwin spinet piano", "Bösendorfer C130", "Yamaha U3", "Bösendorfer", "Petrof 132", "Baumgardt", "Baumgardt", "Schimmel Fortissimo 108", "Malmsjö", "Svenska Pianofabriken", 
                                "Rhodes Stage Mk I (1978)", "Rhodes Suitcase Mk I (1975)", "Rhodes Stage Mk II (1981)", "Rhodes Stage Mk V (1984), ideal timbre", "Rhodes Suitcase Mk I (1975)", "Fender Rhodes 'Silvertop' Electric Piano (1967), ideal timbre", "Rhodes Mk I", "Rhodes Suitcase Mk I “Nefertiti Club Göteborg” (1970)",
                                "Wurlitzer A200", "Wurlitzer A200", 
                                "Roland XP80", "Roland RD1000", "FM-based Electric Piano (DX syntheziser)", "FM-based Electric Piano (DX syntheziser)", "Classic sounds from the 80's", "Classic sounds from the 80's", "Classic sounds from the 80's", "Classic sounds from the 80's",
				""]
   
// Piano name settings according to the value returned by the Piano Knob (idPiano)
On WidgetValueChanged(newValue : double) from idPiano
 // If midi channel is set to 1
 If GetWidgetValue(OutChannelMidi) < 0.066 then

  if newValue >= 0.0  && newValue < 0.023 then SetWidgetLabel(namePiano, Piano_List[1])   SetWidgetLabel(infoPiano, Piano_Info[1])   end
  if newValue >= 0.023 && newValue < 0.046 then SetWidgetLabel(namePiano, Piano_List[2])  SetWidgetLabel(infoPiano, Piano_Info[2])   end
  if newValue >= 0.046 && newValue < 0.069 then SetWidgetLabel(namePiano, Piano_List[3])  SetWidgetLabel(infoPiano, Piano_Info[3])   end
  if newValue >= 0.069 && newValue < 0.092 then SetWidgetLabel(namePiano, Piano_List[4])  SetWidgetLabel(infoPiano, Piano_Info[4])   end
  if newValue >= 0.092 && newValue < 0.115 then SetWidgetLabel(namePiano, Piano_List[5])  SetWidgetLabel(infoPiano, Piano_Info[5])   end
  if newValue >= 0.115 && newValue < 0.139 then SetWidgetLabel(namePiano, Piano_List[6])  SetWidgetLabel(infoPiano, Piano_Info[6])   end
  if newValue >= 0.139 && newValue < 0.162 then SetWidgetLabel(namePiano, Piano_List[7])  SetWidgetLabel(infoPiano, Piano_Info[7])   end
  if newValue >= 0.162 && newValue < 0.185 then SetWidgetLabel(namePiano, Piano_List[8])  SetWidgetLabel(infoPiano, Piano_Info[8])   end
  if newValue >= 0.185 && newValue < 0.208 then SetWidgetLabel(namePiano, Piano_List[9])  SetWidgetLabel(infoPiano, Piano_Info[9])   end
  if newValue >= 0.208 && newValue < 0.232 then SetWidgetLabel(namePiano, Piano_List[10]) SetWidgetLabel(infoPiano, Piano_Info[10])  end
  if newValue >= 0.232 && newValue < 0.254 then SetWidgetLabel(namePiano, Piano_List[11]) SetWidgetLabel(infoPiano, Piano_Info[11])  end
  if newValue >= 0.254 && newValue < 0.278 then SetWidgetLabel(namePiano, Piano_List[12]) SetWidgetLabel(infoPiano, Piano_Info[12])  end
  if newValue >= 0.278 && newValue < 0.301 then SetWidgetLabel(namePiano, Piano_List[13]) SetWidgetLabel(infoPiano, Piano_Info[13])  end
  if newValue >= 0.301 && newValue < 0.325 then SetWidgetLabel(namePiano, Piano_List[14]) SetWidgetLabel(infoPiano, Piano_Info[14])  end
  if newValue >= 0.325 && newValue < 0.348 then SetWidgetLabel(namePiano, Piano_List[15]) SetWidgetLabel(infoPiano, Piano_Info[15])  end
  if newValue >= 0.348 && newValue < 0.371 then SetWidgetLabel(namePiano, Piano_List[16]) SetWidgetLabel(infoPiano, Piano_Info[16])  end
  if newValue >= 0.371 && newValue < 0.394 then SetWidgetLabel(namePiano, Piano_List[17]) SetWidgetLabel(infoPiano, Piano_Info[17])  end
  if newValue >= 0.394 && newValue < 0.418 then SetWidgetLabel(namePiano, Piano_List[18]) SetWidgetLabel(infoPiano, Piano_Info[18])  end
  if newValue >= 0.418 && newValue < 0.441 then SetWidgetLabel(namePiano, Piano_List[19]) SetWidgetLabel(infoPiano, Piano_Info[19])  end
  if newValue >= 0.441 && newValue < 0.464 then SetWidgetLabel(namePiano, Piano_List[20]) SetWidgetLabel(infoPiano, Piano_Info[20])  end
  if newValue >= 0.464 && newValue < 0.486 then SetWidgetLabel(namePiano, Piano_List[21]) SetWidgetLabel(infoPiano, Piano_Info[21])  end
  if newValue >= 0.486 && newValue < 0.511 then SetWidgetLabel(namePiano, Piano_List[22]) SetWidgetLabel(infoPiano, Piano_Info[22])  end
  if newValue >= 0.511 && newValue < 0.534 then SetWidgetLabel(namePiano, Piano_List[23]) SetWidgetLabel(infoPiano, Piano_Info[23])  end
  if newValue >= 0.534 && newValue < 0.557 then SetWidgetLabel(namePiano, Piano_List[24]) SetWidgetLabel(infoPiano, Piano_Info[24])  end
  if newValue >= 0.557 && newValue < 0.580 then SetWidgetLabel(namePiano, Piano_List[25]) SetWidgetLabel(infoPiano, Piano_Info[25])  end
  if newValue >= 0.580 && newValue < 0.604 then SetWidgetLabel(namePiano, Piano_List[26]) SetWidgetLabel(infoPiano, Piano_Info[26])  end
  if newValue >= 0.604 && newValue < 0.627 then SetWidgetLabel(namePiano, Piano_List[27]) SetWidgetLabel(infoPiano, Piano_Info[27])  end
  if newValue >= 0.627 && newValue < 0.650 then SetWidgetLabel(namePiano, Piano_List[28]) SetWidgetLabel(infoPiano, Piano_Info[28])  end
  if newValue >= 0.650 && newValue < 0.673 then SetWidgetLabel(namePiano, Piano_List[29]) SetWidgetLabel(infoPiano, Piano_Info[29])  end
  if newValue >= 0.673 && newValue < 0.697 then SetWidgetLabel(namePiano, Piano_List[30]) SetWidgetLabel(infoPiano, Piano_Info[30])  end
  if newValue >= 0.697 && newValue < 0.720 then SetWidgetLabel(namePiano, Piano_List[31]) SetWidgetLabel(infoPiano, Piano_Info[31])  end
  if newValue >= 0.720 && newValue < 0.743 then SetWidgetLabel(namePiano, Piano_List[32]) SetWidgetLabel(infoPiano, Piano_Info[32])  end
  if newValue >= 0.743 && newValue < 0.766 then SetWidgetLabel(namePiano, Piano_List[33]) SetWidgetLabel(infoPiano, Piano_Info[33])  end
  if newValue >= 0.766 && newValue < 0.790 then SetWidgetLabel(namePiano, Piano_List[34]) SetWidgetLabel(infoPiano, Piano_Info[34])  end
  if newValue >= 0.790 && newValue < 0.813 then SetWidgetLabel(namePiano, Piano_List[35]) SetWidgetLabel(infoPiano, Piano_Info[35])  end
  if newValue >= 0.813 && newValue < 0.836 then SetWidgetLabel(namePiano, Piano_List[36]) SetWidgetLabel(infoPiano, Piano_Info[36])  end
  if newValue >= 0.836 && newValue < 0.859 then SetWidgetLabel(namePiano, Piano_List[37]) SetWidgetLabel(infoPiano, Piano_Info[37])  end
  if newValue >= 0.859 && newValue < 0.883 then SetWidgetLabel(namePiano, Piano_List[38]) SetWidgetLabel(infoPiano, Piano_Info[38])  end
  if newValue >= 0.883 && newValue < 0.906 then SetWidgetLabel(namePiano, Piano_List[39]) SetWidgetLabel(infoPiano, Piano_Info[39])  end
  if newValue >= 0.906 && newValue < 0.906 then SetWidgetLabel(namePiano, Piano_List[40]) SetWidgetLabel(infoPiano, Piano_Info[40])  end
  if newValue >= 0.929 && newValue < 0.952 then SetWidgetLabel(namePiano, Piano_List[41]) SetWidgetLabel(infoPiano, Piano_Info[41])  end
  if newValue >= 0.952 && newValue < 0.976 then SetWidgetLabel(namePiano, Piano_List[42]) SetWidgetLabel(infoPiano, Piano_Info[42])  end
  if newValue >= 0.976 && newValue < 0.999 then SetWidgetLabel(namePiano, Piano_List[43]) SetWidgetLabel(infoPiano, Piano_Info[43])  end
  if newValue == 1.0			   then SetWidgetLabel(namePiano, Piano_List[44]) SetWidgetLabel(infoPiano, Piano_Info[44])  end

 End

End

// Piano management by midi channel 
On WidgetValueChanged(newValue : double) from OutChannelMidi
  // Channel midi out 1 for ultimate Stage Pianos
  if GetWidgetValue(OutChannelMidi) == 0.0   && GetWidgetValue(OutChannelMidi) < 0.067 then SetWidgetLabel(namePiano, Piano_List[1])  SetWidgetLabel(infoPiano, Piano_Info[1])   end
  // Channel midi out 2 for Galaxy Vintage-D
  if GetWidgetValue(OutChannelMidi) >= 0.067 && GetWidgetValue(OutChannelMidi) < 0.133 then SetWidgetLabel(namePiano, Piano_List[0])  SetWidgetLabel(infoPiano, Piano_Info[0])   end
  // Prepare for next piano (Channel midi 3 to 16 for future pianos)
  if GetWidgetValue(OutChannelMidi) >= 0.133					       then SetWidgetLabel(namePiano, Piano_List[45]) SetWidgetLabel(infoPiano, Piano_Info[45])  end
  if GetWidgetValue(OutChannelMidi) >= 0.200 && GetWidgetValue(OutChannelMidi) < 0.267 then SetWidgetLabel(namePiano, Piano_List[45]) SetWidgetLabel(infoPiano, Piano_Info[45])  end
  if GetWidgetValue(OutChannelMidi) >= 0.267 && GetWidgetValue(OutChannelMidi) < 0.334 then SetWidgetLabel(namePiano, Piano_List[45]) SetWidgetLabel(infoPiano, Piano_Info[45])  end
  if GetWidgetValue(OutChannelMidi) >= 0.334 && GetWidgetValue(OutChannelMidi) < 0.400 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.400 && GetWidgetValue(OutChannelMidi) < 0.467 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.467 && GetWidgetValue(OutChannelMidi) < 0.534 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.534 && GetWidgetValue(OutChannelMidi) < 0.600 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.600 && GetWidgetValue(OutChannelMidi) < 0.667 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.667 && GetWidgetValue(OutChannelMidi) < 0.734 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.734 && GetWidgetValue(OutChannelMidi) < 0.800 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.800 && GetWidgetValue(OutChannelMidi) < 0.867 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.867 && GetWidgetValue(OutChannelMidi) < 0.934 then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) >= 0.934 && GetWidgetValue(OutChannelMidi) < 1.0   then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end
  if GetWidgetValue(OutChannelMidi) == 1.0                                             then SetWidgetLabel(namePiano, Piano_List[45])  SetWidgetLabel(infoPiano, Piano_Info[45]) end

End

The results



Future plans :

  • Perhaps manage the Synth part of the utimate stage pianos (which I don’t use on a daily basis).
  • Add effects to Gig Performer for electric pianos (Tremolo, autopan, chorus, flanger, overdrive), that would be great.
  • Add other pianos, such as a “Felt Piano” on the midi channel midi 3 or 4 …

Thanks to the Gig Performer team for making Gig Performer, the best tool you can use for live performance.

2 Likes

You’re going to be an expert :grinning:.

Possible improvement: Depending on how often WidgetValueChanged is called, you could use select. This also prevents that there are lots of useless if newValue == tests that result in false are performed, while the one that evaluates to true has already been found.

Furthermore you can also eliminate doing multiple times GetWidgetValue(OutChannelMidi) by using select

More info on the select statement:

1 Like

I’ve taken your comments on board and made the changes.
1/ “Select” instead of using “if”
2/ Change " GetWidgetValue(OutChannelMidi)" by “newValue”
Everything works very well!
Thank you so much

1 Like

really liking the design of the red panel :slight_smile:

1 Like

@Niquau

You have a very nice panels. You may want to share them at some point :slight_smile:

1 Like

Many thanks for your comments :wink:
I promise to share it with you, but I’d like to finish the synth part.

1 Like

And share with us -
panels are awesome