Select Song via Numpad?

Hello!

I would like to use Gig Performer in the future. However, I have an important question before I buy it:

Is it possible in Gig Performer to select the individual tracks in the setlist via e.g. a number pad? E.g. track “122”, later track “45”, etc.

We don’t have a fixed setlist in my band and our frontman often decides spontaneously on the next song. So this function would be important for me to be able to react quickly.

It would be great if someone could help me, or perhaps have another tip on how I could realize a quick selection!

Many thanks and best regards

Alex

I haven’t tested it but perhaps the On Keystroke callback would work.

On Keystroke matching "1"

// Code to go to Song 1

End

https://gigperformer.com/docs_5_0/LanguageManual/

SteveC

[I am clueless, but], where is the number pad? On you keyboard? Do you know what type of midi commands it sends? Maybe check the manual and open up the Global Midi Monitor and see what it says? [Or if you do not have GP yet, there is an app that would let you see this].

But, most importantly, watch here to see what people who know what they are talking about say. Hah!

Jeff

Thanks for the quick answers!
It’s a normal USB number pad that I should have on my keyboard. No midi. It’s just normal keyboard input

This might not work as I don’t see how you can use Num Pad instead of standard keyboard. This works with top number on keyboard (for selecting rackspaces, not songs). There is no guidance for how to recognize other types of keystrokes like the Num Pad. Also I’m not sure if you can put any wildcards in.

On Keystroke Matching  "000"
    SwitchToRackspace(0 ,0)
    Print("0 pressed")
End

On Keystroke Matching  "001"
    SwitchToRackspace(1 ,0)
    Print("1 pressed")
End

You would probably also need a code generator to create code for all 999 possible song combinations. I don’t think you can use the for statement to iterate callback events.

Too bad, I almost suspected that it wouldn’t work. I’ve been looking for solutions online for a few days, but haven’t found anything.

But how do other musicians do it? Is there perhaps another solution that I can’t currently come up with myself?
I’m a keyboard player in a party band and we never have fixed set lists because we always have to react to the mood of the audience and spontaneously play a different song.

Thx

This might work for you

I suspect that they purchase a cheap MIDI controller and use the MIDI messages it sends to switch songs. Some use a MIDI foot controller. Unfortunately, even the cheapest MIDI controllers are more expensive than an external keypad. Usually $50+ USD where you can get an external keypad for under $20 UDS.

SteveC

There are any number of lyric/chord apps out there that can send external MIDI messages when loading a song. You create your songlist there, and when you select the song in that app the corresponding song can load in GP. I use LivePrompter, and OnSong is also a very popular choice.

@xandal

Is cost your main driver for using a num pad instead of something else?

A quick background: We use another player as the main player, which shows us text, generates clicks and syncs our light show via a MIDI file. That’s why I don’t have an external tablet yet, as I get the information from the screen.

I’m thinking about a numpad because at first glance it would be a simple and good solution for me to react quickly and not have to scroll through a list.
It’s not a cost issue. I’m absolutely willing to invest money in a good solution.

As someone has already mentioned, I have a commercial Gig Performer extension that provides a way to select songs from any set list at random:

Advanced Song Chooser extension

I do also have a free version with fewer features, but still offers a quick way to select songs at random from a touchscreen:

https://boulden.digital/product/basic-song-chooser-for-gig-performer/

There is also another free extension by @rank13 that also allows selection of songs at random:

GP Selector: Song and Rackspace Selector Extension

1 Like

If you head over to the Bome Forum, I can help you there. You would need to purchase Bome MIDI Translator Pro, but I could show you a project file using Bome MIDI Translator Pro that converts num pad keystrokes to Program changes (or any other MIDI Message) that you could then send via MIDI to Gig Performer.

SteveC

1 Like

Thank you. I’ll take a closer look at it tomorrow. Really great support here :smiley:

The following code in the Global Rackspace should work if you send the right MIDI message.

In this case SongSelect is a block aliases to “Song-Select” device in Rig Manager which is Bome Virtual Port “BMT 1”. I simply put this block in the global rackspace and add this code. I’m looking for CC14 and using the value generated by my Keystroke to MIDI conversion program in Bome MIDI Translator Pro to use the value generated to select a song (up to 128 songs). We would need to modify the code and possibly use 2 CC’s or NRPN to get more songs than that.


Var SongSelect : MidiInBlock
Var CCValue :Integer
Var Status : Boolean
On ControlChangeEvent (c : ControlChangeMessage) Matching 14 From SongSelect
    CCValue = GetCCValue(c)
    Print("Song Select Song " + CCValue)
    Status =  SwitchToSongByIndex(CCValue, 0)
    if Status == False then
        Print("Cannot Switch to Song " + CCValue)
    End
End

SteveC

1 Like

I re-built a num pad with pad widgets (overlayed with text labels as numbers).
I placed everything into the Global Rackspace, since this would be the most obvious place to use such a thing…
There are two scripts working in that gig file…

  1. a Gig-Script which would react to keystrokes 0-9 coming from the num-pad and then send a CC# midi message over the Local GP Port (CC#80-#89)
    BTW: the correct “matching” value for the GP-Script callback is “NUMPAD 0” :wink:
    The number pads in the Gloabla Rackspace are midi-wise connected to the corresponding CC# of the Local GP Port, so that they will be triggered from the Gig Script.
    Unfortunately there is no way to read the “Enter” key, so i left out the PC-keyboard assignments for the “CLR” and the “GO” pads - but maybe you want them to be learned with some other MIDI controller…
  2. a Global Rackspace script which will do the work for assembling the “typed in” number and then on pressing “GO”, selecting the matching song number.
    I limited the input to a 3-figure number, which should be sufficient. Also the script takes care of some other unwanted situations, which could occur.
    Pressing “CLR” clears the number, so you can type a new one.

That’s it.
There are only two caveats:
The key-stroke input only works if the GP’s main window has focus!
The Setlist mode must be active!

numpad_song-select.gig (378.0 KB)

This is the Gig-Script which reads the key strokes:

// Generate a MIDI message when pressing a key on the keyboard
On Keystroke matching "NUMPAD 0" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(80, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(80, 0))
End
On Keystroke matching "NUMPAD 1" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(81, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(81, 0))
End
On Keystroke matching "NUMPAD 2" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(82, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(82, 0))
End
On Keystroke matching "NUMPAD 3" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(83, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(83, 0))
End
On Keystroke matching "NUMPAD 4" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(84, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(84, 0))
End
On Keystroke matching "NUMPAD 5" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(85, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(85, 0))
End
On Keystroke matching "NUMPAD 6" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(86, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(86, 0))
End
On Keystroke matching "NUMPAD 7" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(87, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(87, 0))
End
On Keystroke matching "NUMPAD 8" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(88, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(88, 0))
End
On Keystroke matching "NUMPAD 9" Description "Toggle Widget"
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(89, 127))
    InjectMidiEvent("Local GP Port", MakeControlChangeMessage(89, 0))
End

and this is the Global Rackspace script:

var
num0, num1, num2, num3 ,num4, num5, num6, num7, num8, num9: widget
lbl_song : widget
pad_clr, pad_go : widget
StrSongNumber : String = ""
songChanged : boolean

// Called automatically after script is loaded
Initialization
    StrSongNumber = ""
    SetWidgetLabel (lbl_song, StrSongNumber)
End



// Called when any of several widgets changed
// The widget and index parameters are optional
On WidgetValueChanged(w : Widget, index: integer, newValue : double) from num0, num1, num2, num3 ,num4, num5, num6, num7, num8, num9, pad_clr, pad_go
    If newValue == 1.0 Then //only if the pad widget is ON
        //if it is a number-pad get the index and and it to the song-number (max. 3 fig.)
        If index >= 0 and index <=9 and Length(StrSongNumber) <3 Then
            StrSongNumber = StrSongNumber + IntToString(index)
            SetWidgetLabel (lbl_song, StrSongNumber) //set the label with each input
        end
        //pressing the CLR pad will empty the song number
        if w == pad_clr Then
            StrSongNumber = ""
            SetWidgetLabel (lbl_song, StrSongNumber)
        end
        //pressing the GO pad will select the song with the according number (if existing!)
        if w == pad_go and StringToInt(StrSongNumber) <> 0 Then
            if InSetlistMode() then
                songChanged = SwitchToSongByIndex(StringToInt(StrSongNumber)-1, 0)
                StrSongNumber = ""
                SetWidgetLabel (lbl_song, StrSongNumber)
            else
                DisplayTemporaryMessage("This works in Setlist mode only!!!")
            end
        end
    end
End

Maybe this helps… :beers:

8 Likes

This is awesome and less expensive then buying another piece of software!

With that said, using Bome MIDI Translator Pro, Gig Performer does not need to be focused for it to work.

SteveC

2 Likes

Why not have that system send a program change to GP to move to the song/rackspace

Yes, that would also be an option if I program a program change into the midi file. However, I think there will be a timing problem so that GP can load the sounds in time.
My front man starts the click file and then the song starts after 2 bars. But I think that the time between the songs, if I enter it via the numpad, is probably enough for GP to load the VSTs.