Download the completed project file and sample media for this tutorial.
For more advanced use cases also see the Timecode plugin.
MIDI Time Code (MTC) is a specification for sending SMPTE values from a master playback application such as QLab or Apple Logic to keep the play time of other real-time music and visuals software in sync over MIDI. While MTC has a few drawbacks it can be very useful when setting up live performances where VDMX is being used alongside audio software that can send it.
In this tutorial we'll look at how to receive MTC in VDMX in two ways: First, the classic example of syncing the time position of a QuickTime movie to the incoming timecode.
In the second case instead of a traditional movie, a simple Quartz Composer patch will receive the MTC and render a real-time animated read out of the values in standard SMPTE format.
Since MTC can be accessed anywhere, it can also be used to control the time position in the LFO and Step Sequencer plugins, or sent back out over OSC to other software that can not directly receive timecode.
Step 1: Send 'MTC' from QLab.
- Double click or drag 'MTC' in the sidebar to add a new 'MTC Cue' to the project.
- Select the MTC Cue and under 'Settings' in the MIDI Destination menu choose 'To VDMX'.
- If needed, set the SMPTE Format to your movie frame rate.
Once the MTC Cue is set up in QLab, start sending timecode by clicking the 'Load' button and then the 'GO' button.
Step 2: Sync sliders in VDMX to the MTC source.
Setting up a slider or other UI item to receive MTC works just like any other MIDI data-source. You can either use the 'Detect MIDI' option from the right-click menu or enter the appropriate address path (eg. '/MIDI/ch. 0/MTC') in the UI Inspector window as shown below.
When MIDI Time Code is received by a slider in VDMX it is interpreted in number of seconds. Unlike other MIDI data such as note velocity or control values, MTC may not have an explicit maximum value- as such, sliders receiving MTC will automatically attempt to set their ranged value to this exact value in seconds- this differs from the normal default slider behavior which is to scale to the incoming MIDI data to the range of the min and max envelopes on the slider.