Closed brunchboy closed 1 year ago
Correction: the start seems to be 4 bytes at 1b6
or 2 at 1b8
, the end 4 bytes at 1be
or 2 at 1c0
. But I can’t figure out the units. They don’t seem to be half-frames, or milliseconds, or anything we’ve seen before. They seem closest to ⅛ beat units, but even that does not work out quite right (and it also means the start and end were showing up as the same for loops shorter than that). More investigation is required.
It looks like multiplying the start/end times by 65 yields the track position in milliseconds.
Nope, not quite. It’s multiplying by 66.666… that works. Which is 1000/15, or ten times what halfFrameToTime()
returns. So beats are reported in 1/20 frame units for some weird reason.
And no again, that was another blind alley. Testing with longer tracks revealed the actual formula: take the loop position bytes, multiply by 65,536, then divide by 1,000. That actually looks right at both the beginning and end of very long tracks.
All right, this is documented in the protocol analysis, and implemented in Beat Link (and therefore in BLT).
Now that I finally have some CDJ-3000s, I can see new information in their larger status packets. The section after
1b0
provides information about looping, presumably the start and end, along with perhaps other things. The end position may be 4 bytes at1c0
, as it moves when the loop is doubled/halved. The start may be 4 bytes at1b8
? The size in beats is 2 bytes at1c8
. And there is some other stuff in there. This explains how it shows up on the other players’ screens, and it would be nice to document it and support it in Beat Link and BLT.