Super Timecode Converter v1.9.1
Pro DJ Link — Critical stability fixes for CDJ-2000NXS2
Three bugs discovered from a full-show Wireshark capture (37 minutes, 2× CDJ-2000NXS2) that together caused metadata failure and CDJ freezing. These fixes also improve stability on CDJ-3000 and all other Pro DJ Link hardware.
Fixed: Double notify causing CDJ subscriber accumulation
The bridge notify packet (0x55) was sent from two sockets simultaneously — statusSock (port 50002) and bridgeSock (ephemeral port). CDJs register each source port as a separate subscriber and send status updates to both, doubling the return traffic (10–13 pps instead of the normal 5 pps). When STC's internal socket changed port during the session, ghost subscribers accumulated — the CDJ never cleans up old subscribers, so traffic increased to 3× normal over time.
Impact: Both CDJ-2000NXS2 players froze for 22 seconds during a live show at the 15-minute mark. The accumulated status traffic overwhelmed the CDJ network stack.
Fix: Notify now sends from a single socket (bridgeSock with fallback to statusSock), matching Pioneer Bridge's own behavior. The subscribe packet (0x57) already used this pattern correctly.
Fixed: Port 65535 accepted as valid database port
When STC queries a CDJ-2000NXS2 for its database server port via the port discovery service (TCP 12523), the CDJ sometimes returns 0xFFFF (65535) meaning "no service available". STC's validation (port > 65535) had an off-by-one error that accepted 65535 as valid, then attempted TCP connections to port 65535 — which always fail.
Impact: Metadata took 15 minutes to load. STC wasted 5 connection attempts on an invalid port before falling back to a working path.
Fix: Validation changed to port >= 65535.
Fixed: Zombie database connections blocking CDJ metadata
Database connections (DbServerClient) had no idle timeout. A connection established at startup could remain idle for 10+ minutes, exchanging TCP keepalive probes every 10 seconds without transferring any data. CDJ-2000NXS2 has limited NFS connection slots — the zombie connection occupied a slot, preventing actual metadata requests from going through.
Impact: Metadata was blocked for the first 10 minutes of the session.
Fix: Added 30-second idle timeout (kIdleTimeoutMs). Connections with no activity for 30 seconds are automatically closed, freeing CDJ resources.
Network — Shared input cleanup
StageLinQ and Pro DJ Link shared inputs now automatically stop when no engine uses them as input source. Previously, if an engine was configured for StageLinQ and later switched to Pro DJ Link, the StageLinQ thread continued broadcasting discovery packets (1 pps on UDP 51337) for the entire session. Same for Pro DJ Link keepalives when all engines switched away.
Impact: Unnecessary broadcast/multicast traffic on the CDJ network is eliminated.
HippoNet Input — Temporarily disabled
The HippoNet input (Hippotizer integration) is temporarily hidden from the UI pending hardware validation with a real Hippotizer system. All code is preserved and will be re-enabled in a future release.
Settings that had HippoNet as input source will automatically fall back to Generator on launch.
Protocol improvements developed for this release (will take effect when re-enabled):
- Variable block size support (18-byte and 26-byte TC blocks)
- Peer announcement broadcast on UDP port 6092
- HippoEngineHost connection detection for correct subscribe routing
Bug Fix — Linux compilation
- Fixed ambiguous
int64_tcast fromjuce::varinAppSettings.h— changed tojuce::int64for GCC compatibility
Pro DJ Link — Connection hardening
Additional robustness improvements to the database connection layer, addressing patterns observed in long-running sessions with CDJ-2000NXS2 hardware.
Port discovery retry
The dbserver port discovery query (TCP 12523) now retries up to 3 times with 1-second delays. Players may not be ready to respond immediately after booting or loading media — a single failed attempt previously caused metadata to be unavailable until the next track load.
Player disappearance cleanup
When a CDJ disappears from the network (10 seconds without keepalive), STC now immediately closes all TCP connections and clears cached metadata for that player. Previously, stale connections could persist indefinitely, holding CDJ resources and causing issues when the player reconnected.
TCP_NODELAY on database connections
Database server connections now set TCP_NODELAY to ensure each protocol message is sent as a single TCP segment. Some players fail to parse messages that arrive split across multiple packets due to Nagle's algorithm.
Files Changed
ProDJLinkInput.h— Single-socket notify;onPlayerLostcallback on GC timeoutDbServerClient.h— Port ≥65535 validation; idle timeout (30s); port discovery retry (3×); TCP_NODELAY; includes for socket optionsMainComponent.cpp— Shared input auto-stop; HippoNet input hidden;onPlayerLost→invalidatePlayerwiring; layout skip for hidden buttonsHippotizerInput.h— Protocol improvements (hidden, pending validation)AppSettings.h— Linux compilation fixMain.cpp— Version 1.9.1README.md— Updated