Deep-Symmetry / dysentery

Exploring ways to participate in a Pioneer Pro DJ Link network
Eclipse Public License 1.0
189 stars 24 forks source link

Some status packet analysis #8

Open jan2000 opened 7 years ago

jan2000 commented 7 years ago

Hi very nice project. Also very good documentation, very interesting.

One note though, why are the byte offsets in the doc not in hexadecimals? I had a hard time comparing the doc with my findings because of this.

That said, keep up the good work!

I have have tested your software with my XDJ-1000MK2 and would like to share some findings:


All numbers are hexadecimals

113
    01 02 04 08 10 20

     1  0  1  0  0  0    05  nothing loaded

     1  0  1  0  0  0    05  cue play    
     1  0  1  0  0  0    05  playing
     1  1  1  0  0  0    07  paused in cdj mode
     1  1  1  0  0  0    07  paused at cue point
     1  1  1  0  0  0    07  pitch bending
     1  1  1  0  0  0    07  starting (releasing)
     1  1  1  0  0  0    07  at end of track while playing (in single mode)
     1  1  1  0  1  0    17  pausing (braking, slowing down)
     1  1  1  0  1  0    17  paused
     1  1  1  0  1  0    17  jog pressed
     1  1  1  0  1  0    17  needle search play
     1  1  1  0  1  0    17  while still affected by scratch (for example a backspin)

     1  1  0  0  0  1    23  reverse playing
     1  1  0  0  1  1    33  reverse pausing
     1  1  0  0  1  1    33  reverse paused
     1  1  0  0  0  1    23  reverse at begin of track while playing

     1  0  1  0  0  0    05  slip playing
     1  1  1  0  1  0    17  slip pausing
     1  0  1  0  1  0    15  slip paused
     1  0  1  0  1  0    15  slip scratch
     1  0  1  0  0  1    25  slip reverse
     1  1  1  0  1  1    37  slip reverse pausing
     1  0  1  0  1  1    35  slip reverse pause 
     1  0  1  0  1  1    35  slip reverse scratch

     1  0  1  0  0  0    05  looping with length greater than 1.0 beat
     1  1  1  0  0  0    07  looping with length less or equal than 1.0 beat

    01                   1
       02                playback speed affected ?
          04             forward play mode (0 on reverse except for slip reverse)
             08          0
                10       vinyl mode: pausing, paused, jog pressed, jog wheel still turning after been pressed
                   20    reverse

90-93
    7f ff ff ff  no bpm available
    00 xx xx xx  bpm analyzed by player / rekordbox bpm loading
    80 xx xx xx  bpm available from rekordbox analysis
94-97
    7f ff ff ff  no track continuing in background in slip mode / no bpm available
    80 xx xx xx  slip mode active, bpm of track continuing in background (this can differ from current audible track)

2a
    02  file loaded without rekordbox analysis

25
    b3  update usb color of linked usb 

6a
    00 after unmount

9d
    0b  slip mode in action

da
    03  colored waveform
    01  blue waveform
brunchboy commented 7 years ago

Thanks so much for this report! When I have a chance I will integrate it into the document. One of my DJ colleagues just ordered a pair of these players himself, so I may be able to do a bit of investigation with them too. For example I would like to add support for color waveforms. Is there any way you could perform a traffic capture so we can see what the image format is, and what kind of request is used to obtain the color version of the waveform?

And I apologize about the issue you were having with the non-hexadecimal byte offsets in the text. Here is how that came to be… In the beginning, my packet diagrams used decimal numbers in the row and column headers, so the offsets were consistently decimal in both places. That felt more natural in running prose descriptions. But once I started using dysentery to look at player state, that became confusing, so I changed the packet diagrams to use the same hex labels as dysentery. But then the text became confusing, as you noted. Even I find it a bit annoying, though I’m still fairly quick at converting from hex to decimal in my head from my long-ago days of hand-assembling 6502 machine language.

Thanks for raising this, though. I will make a pass through the document and change the byte offsets to hex, and help preserve our sanity. Especially now that so many more people are looking at it!

jan2000 commented 7 years ago

Thanks for improving the docs!

Regarding the color waveform see https://github.com/brunchboy/dysentery/issues/9

Another note, in the documentation it says that in order to request data we need to emulate a CDJ, and thus limiting maximum number of players to 4. While I have never seen one (who has?) a DJM-TOUR1 seem to be able to request data from 4 CDJs at one. See: https://youtu.be/UMhMdbEZv0s?t=6m42s

brunchboy commented 7 years ago

In that video it says that the original Nexus players (which is what I have) can’t do that; the TOUR-1 loses most of its features when you try to use them, so that seems consistent with my experience. It may be that nxs2 players would not have this limitation with Beat Link Trigger. Perhaps someone can try requesting metadata when four of them are on the network. It would also be interesting to capture traffic between a TOUR-1 and nxs2 players. But, as you say, who has seen one? I don’t expect anyone will be shipping me such gear for analysis any time soon. 😉

brunchboy commented 7 years ago

Also, the Kuvo unit is able to get at least some sort of metadata from players even when there are four of them in use, but those are also hard to find, they will not even sell them to individuals, only to qualified clubs, so I have not yet been able to get any captures of how that works either.

brunchboy commented 6 years ago

OMG, @jan2000 I had forgotten completely about this thread, because it’s been quite some time since I had time to work on dysentery, but you just solved a mystery that I have been struggling with for the past several days! I am adding the ability to take over the tempo, so that people can sync from Ableton Link (Live, Traktor, or any device or software that supports that protocol) to the CDJs. I already support the CDJs controlling the tempo of an Ableton Link session, but not the other direction. And I seemed to have everything working perfectly, but the other devices were ignoring my tempo values.

And I just now reviewed your discoveries, and the answer is right there: I need to set byte 90 to the value 80, and suddenly it is all working, my virtual CDJ posing as the master player can set the tempo for any synced player and the mixer.

Thanks so much!!!