Holzhaus / serato-tags

Serato DJ Pro GEOB tags documentation
MIT License
69 stars 13 forks source link

Loop Unknown Fields #1

Open Stoyvo opened 5 years ago

Stoyvo commented 5 years ago

First, thanks for documenting this! I've been working with Serato's GEOB objects for a while, hoping to contribute some to your findings.

There are 8 bytes after the endPosition for a loop marker that I have yet to identify. image

This is followed by to empty bytes (0, 0). This leads me to believe the bytes in the above are null-terminated, follow by a spacer to the index uint8.

I'm hoping this could become a discussion as to what this might be. Can you confirm you have the same values for this section of the loop marker?

Holzhaus commented 5 years ago

Yes. For some reason I forgot to add them in the table in docs, but these 8 bytes are present for me as well:

$ scripts/serato_markers2.py data/saved-loops/Serato\ Markers2.octet-stream
0: ColorEntry(field1=b'\x00', color=b'\xff\xff\xff')
1: LoopEntry(field1=b'\x00', index=0, startposition=0, endposition=2086, field5=b"\xff\xff\xff\xff\x00'\xaa\xe1", field6=0, locked=False, name='')
2: LoopEntry(field1=b'\x00', index=1, startposition=0, endposition=2086, field5=b"\xff\xff\xff\xff\x00'\xaa\xe1", field6=0, locked=True, name='')
3: LoopEntry(field1=b'\x00', index=2, startposition=0, endposition=2086, field5=b"\xff\xff\xff\xff\x00'\xaa\xe1", field6=0, locked=False, name='')
4: LoopEntry(field1=b'\x00', index=3, startposition=0, endposition=2086, field5=b"\xff\xff\xff\xff\x00'\xaa\xe1", field6=0, locked=False, name='Test')
5: BpmLockEntry(enabled=False)
Holzhaus commented 5 years ago

Sorry for late answer btw, looks like I missed the notification.

I think these values might a big-endian integer, then a single-byte value and then a three-byte color code. If we're Interpreting \x27\xaa\xe1 as a color, it's some kind of blue, similar to the (currently non-changeable) color of saved loops. I'll have to test this hypothesis when I find the time.

Holzhaus commented 5 years ago

\x27\xaa\xe1 is indeed the loop color. I converted the sample file to AAC (which writes marker data to an XML file in the _Serato_/Metadata directory instead of file tags). This file has the following XML tag:

<Loop type="3" index="0">
  <Position>4712</Position>
  <Color>2599649</Color>
  <LpPos>6799</LpPos>
  <LpEnable>0</LpEnable>
  <LpLocked>0</LpLocked>
</Loop>

And:

>>> hex(2599649)
'0x27aae1'