Skip to content

CUEデータパーサーのcueStart offsetが3バイトずれている #59

@9c5s

Description

@9c5s

概要

TCNetDataPacketCUE.read()cueStart が 50 に設定されているが、仕様書 (V3.5.1B) では CUE 1 の開始は byte 47。この3バイトのずれにより、CUE IN TIME / OUT TIME が常に0として読み取られる。

再現手順

  1. CDJで曲をロードし、CUEポイントが設定された楽曲を再生
  2. requestData(CUEData, layer) でCUEデータを取得
  3. 全CUEエントリの inTime / outTime が 0 になる

原因

// network.ts - TCNetDataPacketCUE.read()
const cueStart = 50; // 仕様書では byte 47

仕様書のCUEエントリレイアウト (22バイト/エントリ):

Offset Size 説明
+0 1 CUE Type
+1 1 RESERVED
+2 4 CUE IN Time (UInt32LE)
+6 4 CUE OUT Time (UInt32LE)
+10 1 RESERVED
+11 3 CUE Color (R, G, B)
+14 8 RESERVED

start=50 の場合、IN TIME 読み取り位置 (byte 52) は実データの3バイト後方のゼロ領域にあたる。

実機ダンプによる検証

BRIDGE64 + CDJ-3000 で取得したパケットダンプ:

header (24-50): 0c01...7203000000000033
entry[0] @50: 020000...00d5
entry[1] @72: 040000...00f8

start=47 基準で IN TIME (offset +2 = byte 49) を UInt32LE で読むと:

  • byte 49-52: 33 02 00 00 → 563ms
  • byte 71-74: D5 04 00 00 → 1237ms
  • byte 93-96: F8 2E 00 00 → 12024ms
  • byte 115-118: 1A 59 00 00 → 22810ms
  • byte 137-140: 73 FE 01 00 → 130675ms (≈2:10)

いずれも楽曲のCUEポイント位置として妥当な値。

補足: TYPE フィールド

仕様上 byte 47 に CUE Type が存在するが、BRIDGE64 では常に 0 が送信される。
空エントリ判定を type === 0 から inTime === 0 && outTime === 0 に変更する必要がある。

修正方針

  1. cueStart を 50 → 47 に変更
  2. 空エントリ判定を type === 0inTime === 0 && outTime === 0 に変更

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions