Plans on incorporating Timecode for setlists?

I’m wondering if there are any plans to include some way to use Timecode (SMPTE or Midi Timecode) to trigger setlist/variation changes?

For shows that run on some (or a lot) of playback and synched lights (and pyro), timecode is usually used to keep all in sync - instead of having all cues/triggers/events triggered from one single master.

So there’s a master timecode running for the show, or each segment/song in the show, could be controlled from the bandleader, and then the video rig, lighting rig and cues (DMX) and other elements are listening to that timecode and the events/triggers are mapped onto specific timecode-values.

This is also used a lot for MIDI-switching patches for keyboards and guitars etc, where the benefit is that e.g. the guitarist can add/delete/edit all the events that need to be triggered, based on the incoming timecode, without having to bug the MD.

So I would think that a setlist/variation triggering system, based on incoming Timecode would be valuable for some Gig Performer users.

Any plans of implementing this type of function?

cheers,

It’s actually possible right now to respond to MTC using GP Script. I wrote an example script that does this. In the gif below, the program on the left is generating MTC (the 8 messages version) and sending them to GP via an IAC port. On the right is the GP Script log displaying the received time code (it just prints a new value when the “second” changes)

Building this in to the system to make it even easier is in our list but I can’t say when it might be implemented

FD2821EC-F3EB-4102-8E94-7822C2EC2D68-97533-000074DC7901047E

Here’s the gp script code I wrote to do this. In this version, in the function currently called DoSomething, you could compare the time with specific values and switch to songs or parts (or in fact anything you want)

Var
   TimeCode : MidiInBlock

   TimeCodeArray : integer [8] // Stores the 8 values that represent a time

// Indexes to make it clear
Const
   FrameLow : integer = 0
   FrameHigh : integer = 1
   SecondsLow : integer = 2
   SecondsHigh : integer = 3
   MinutesLow  : integer = 4
   MinutesHigh : integer = 5
   HoursLow    : integer = 6
   FrameAndHoursHigh : integer= 7

   
Function DoSomething(hours : integer, minutes : integer, seconds : integer)
 
   Print("" + hours + ":" + minutes + ":" + seconds)

   // Replace the above with tests for specific times 
   // and call the appropriate function to switch songs or parts
End
   
var
   prevSecond : integer = -1  // Only print when this changes

Function CalculateTime()
var
   //frame : integer = TimeCodeArray[FrameLow] + (TimeCodeArray[FrameHigh] >> 4)
   seconds : integer = TimeCodeArray[SecondsLow] + 
                       (TimeCodeArray[SecondsHigh] << 4)
   minutes : integer
   hours : integer
   if (seconds != prevSecond)
       then
          prevSecond = seconds 
          minutes = TimeCodeArray[MinutesLow] + 
                    (TimeCodeArray[MinutesHigh] << 4)
          hours = TimeCodeArray[HoursLow] + 
                  ((TimeCodeArray[FrameAndHoursHigh] And 1) << 4)
          
          // Now do something based on the values
          DoSomething(hours, minutes, seconds)          
   end   
End   
   
var
    
    index : integer
    byte : integer
    value : integer

On MidiEvent(m : MidiMessage) from TimeCode
    if GetByte(m, 0) == 0xF1
       then
          byte = GetByte(m,1)
          index = (byte And 0xF0) >> 4
          value = byte And 0x0F
          TimeCodeArray[index] = value
          if index == 7
             then CalculateTime() // I.e, only do this when we have a full message
          end      
    end      

    
End

OK, it’s cool that this is a possibility at least.
Is my understanding correct that the triggers for different events would need to be in the GP script,
and all timing changes for those triggers would have to be editied in individual lines in the script?

cheers,