You can assign a CC value to the TAP switch of the Helix with the Helix “Command Center” and learn it in Gig Performer to “Tap Tempo” in “Global MIDI Assignments”.
Tapping the TAP Switch triggers Helix and GP independently to determine the BPM value.
But if the Helix device should follow BPM changes within Gig Performer, the following Scriptlet might be helpful.
The Scriptlet detects BPM value changes in Gig Performer and sends CC# 64 MIDI messages within the corresponding BPM beat.
For all Helix devices (Rack, Floor, LT, Effects, Stomp) this CC#64 value is assigned to the “Tap Footswitch Emulation”.
So the Helix TAP switch is pressed remotely by Gig Performer.
The best place for this Scriptlet is the Global Rackspace. The Scriptlet detects a BPM value change and send the changes to the Helix device.
The script contains a locking mechanism to delay the TAP operation for fast continuous BPM value changes. This happens when you change the BPM value using the mouse.
Var
BPM :Double = 0.0 // store Gig Performer BPM value
TapBPM_ExecTime : Double = 0.0 // prevent the BPM tapping during a continios BPM value change
TapBPM_LockedUntil : Double = 0.0 // Blocks the function from being called up several times
// Called automatically after script is loaded
Initialization
SetTimersRunning(true)
End
// Send CC#64 Value 64 (Helix Tap Footswitch Emulation)
Function TapBPM()
var
MidiChannel : Integer = 1 // Your used Helix MIDI In channel 1-16
m : MidiMessage
if TapBPM_LockedUntil < TimeSinceStartup() Then
m = MakeMidiMessage3(MidiChannel - 1 + 176, 64, 64)
Print("Tap BPM value (" + Round(BPM) + ") to Helix device")
TapBPM_LockedUntil = TimeSinceStartup() + 2.0 * 60000.0 / BPM // Lock the process for 3 TAP times
SendNow(m) // 1st TAP
SendLater(m, 60000.0 / BPM) // 2nd TAP
SendLater(m, 2.0 * 60000.0 / BPM) // 3rd TAP
End
End
// Called by timer ticking
On TimerTick(ms : double)
If BPM <> GetBPM() Then
BPM = GetBPM()
Print("BPM value changed to : " + BPM)
TapBPM_ExecTime = ms + 2.0 * 60000.0 / BPM // We need a stable BPM value for 3 TAP times
End
// Check Execution Time
If TapBPM_ExecTime > 0.0 && TapBPM_ExecTime < ms Then
TapBPM_ExecTime = 0.0
TapBPM()
End
End