Super Timecode Converter V1.5
Native Pro DJ Link Integration
v1.5 introduces a native Pro DJ Link implementation, turning STC into a direct bridge between Pioneer DJ hardware and professional show control systems — no additional software required.
Pro DJ Link Input
STC now connects directly to Pioneer CDJ and DJM hardware on the network as a Virtual CDJ.
Tested hardware:
- CDJ-3000 + DJM-900NXS2
Expected compatible (not yet verified):
- CDJ-2000NXS2, XDJ series, and other Pro DJ Link players
- DJM-V10 and other Pro DJ Link mixers
Player features:
- Automatic player discovery via Pro DJ Link keepalive protocol (port 50000)
- Absolute position tracking from CDJ-3000 (30Hz, millisecond precision, type 0x0b)
- Beat-derived position for NXS2 and older models (beatCount × 60000/BPM from status packets)
- Play state detection: Playing, Paused, Cued, Looping, Seeking, End of Track
- BPM, pitch fader, actual playback speed (including motor ramp)
- On-air status from both CDJ flags and DJM channel reports
- Master player detection
- Per-player monitoring: any engine can follow any of 6 players independently
Playhead PLL (Phase-Locked Loop):
- Smooth timecode generation from CDJ data — no frame skipping or jitter
- Driven by actual motor speed (offset 152), which includes acceleration ramps, jog wheel, and pitch fader changes
- Gentle position correction (25% per packet, converges in ~100ms on CDJ-3000)
- Hard reset on seek/hot cue/track load (>500ms position jump)
- dp/dt velocity fallback for NXS2 models that don't report actualSpeed
End of track / Pause handling:
- Pause: actualSpeed ramps to zero naturally over ~4-5s — PLL follows the deceleration, outputs stop smoothly
- End of track: CDJ freezes actualSpeed at last playing value — STC detects playState 0x11 and freezes timecode to prevent flicker
DJM Mixer Integration
STC receives real-time mixer parameter data from DJM hardware on the Pro DJ Link network.
Mixer data (58 parameters):
- Per-channel (CH1-CH4): fader, trim, EQ high/mid/low, color/FX knob, CUE button, input source, crossfader assign
- Master: crossfader, master fader, master CUE, fader curve, crossfader curve, booth level
- Headphones: cue link, mixing knob, level
- Beat FX: selector, level, on/off, assign, frequency band buttons, send/return
- Color FX: selector, parameter knob, assign
- Mic: EQ high, EQ low
VU meters:
- 6-channel peak metering: CH1-CH4 (mono) + Master L/R (stereo)
- 15 segments per channel matching the physical DJM meter strips
- Displayed as segmented VU bars alongside each fader in the PDL View
On-air status:
- Per-channel on-air flags from DJM broadcast and unicast reports
- Combined with CDJ status flags for reliable on-air detection
Mixer Map — Configurable Output Routing
New MixerMap system maps every DJM parameter to OSC, MIDI CC, MIDI Note, and Art-Net DMX independently.
58 parameters mapped:
- 9 per channel × 4 channels = 36 (fader, trim, EQ hi/mid/lo, color, CUE, input source, XF assign)
- 22 global parameters (crossfader, master, booth, headphones, beat FX, color FX, mic EQ)
Output protocols:
- OSC: normalized float 0.0–1.0, configurable address per parameter
- MIDI CC: 0–127, configurable CC number and channel per parameter
- MIDI Note: 0–127 velocity (for grandMA2/MA3 executor faders), configurable note number per parameter
- Art-Net DMX: 0–255 raw value, configurable DMX channel per parameter, configurable universe
Deduplication: values only sent when changed (per-parameter last-sent comparison).
Art-Net DMX timeout compliance: persistent buffer re-sent at 10Hz even when no values change, preventing receiver blackout on nodes with 2-3s DMX timeout.
Editor: table UI with editable OSC addresses, MIDI CC, MIDI Note, and DMX channel per row. Enable/disable toggle per parameter. Reset to defaults. Enable/disable all.
Track Map — Enhanced Triggers
Track change triggers now support independent MIDI Note, MIDI CC, Program Change, OSC, and Art-Net DMX outputs simultaneously per track.
What changed from v1.4:
- The old mutually-exclusive MIDI type selector (None / Note On / PC / CC) is replaced with independent fields — any combination can fire simultaneously on the same track change
- New Art-Net DMX trigger: send a specific value to a specific DMX channel on track change (persistent buffer — values stay until overwritten by another track's trigger)
- Configurable Art-Net trigger universe (separate from mixer universe)
- Existing TrackMap files from v1.4 are automatically migrated to the new trigger format on first load
Per-track trigger options:
- MIDI Note On (+ immediate Note Off): note number + velocity
- MIDI CC: controller number + value
- MIDI Program Change: program number
- OSC: address + typed arguments with variable expansion ({trackId}, {artist}, {title}, {offset})
- Art-Net DMX: channel + value
DbServer Client — Track Metadata
Background TCP client queries CDJ internal databases (port 12523) for track metadata.
- Artist, title, album, genre, key, BPM, duration, rating, date added
- Album artwork (JPEG, cached per artwork ID)
- Color preview waveform: ThreeBand (CDJ-3000) and ColorNxs2 formats
- LRU cache with automatic eviction (64 metadata entries, 32 artwork entries)
- Async request queue with semaphore-based wakeup (no busy-loop)
PDL View — Network Visualization
External window showing the full Pro DJ Link network state at 30Hz.
4-deck display (2×2 grid):
- Album artwork from DbServer cache
- Color waveform with playhead cursor
- Track info: artist, title, key
- BPM, pitch %, play state, position source (ABS / BEAT)
- Raw timecode + TrackMap offset timecode
- Engine assignment indicators
- On-air / master / beat-in-bar indicators
Mixer strip:
- Channel faders CH1-CH4 with per-channel VU meters (segmented, green→yellow→red)
- Crossfader with A/B position indicator
- Master fader with stereo VU (L+R)
- DJM model label
Ableton Link Bridge
BPM from the selected CDJ player is published to an Ableton Link session on the local network.
- Any Link-enabled peer (Resolume, Ableton Live, Traktor, etc.) syncs automatically
- Hysteresis: only commits when BPM changes by ≥0.1 to avoid flooding the session
- Peer count displayed in UI
- Enable/disable per engine
Other Changes
MIDI Clock output: 24ppqn clock driven by CDJ BPM, with fractional accumulator for drift-free timing. Start/Stop messages on enable/disable.
OSC BPM forward: sends current BPM as float to configurable OSC address (default: Resolume's /composition/tempocontroller/tempo). Dedup threshold: 0.05 BPM.
Frame precision fix: wallClockToTimecode epsilon (+1e-9) in both NDF and DF paths prevents floating-point truncation at frame boundaries (e.g. 0.9999 → 0 instead of 1).
Compatibility
- Windows 10/11 (VS2022, x64)
- macOS 12+ (Xcode, arm64/x86_64)
- JUCE 8.0.6, C++17
Tested hardware: CDJ-3000 + DJM-900NXS2. Other Pro DJ Link compatible hardware (CDJ-2000NXS2, XDJ series, DJM-V10, etc.) should work but has not been verified yet. Please report any issues on GitHub.
License
MIT License — © 2026 Fiverecords
Disclaimer
This project is not affiliated with, endorsed by, or associated with AlphaTheta Corporation or Pioneer DJ. PRO DJ LINK™ is a trademark of AlphaTheta Corporation. The Pro DJ Link protocol implementation is based on independent community research, particularly the DJ Link Ecosystem Analysis by Deep Symmetry. Use at your own risk — behaviour may change with future firmware updates or on untested hardware.