Skip to content

Super Timecode Converter V1.5

Choose a tag to compare

@fiverecords fiverecords released this 10 Mar 19:46
· 39 commits to main since this release
2a704ea

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.