I'm trying to figure out the file format that the Roland TR-8S drum machine uses for importing/exporting drum kits. My goal is to replace the sample (PCM) data within a kit. It's a proprietary binary format and files have the extension
.t8k. Here's what I have figured out so far:
The format consists of multiple sections that start with a four character magic code each (
SMPL etc.). I'm focusing on the
SMPL section first. Here is an example:
00000868 53 4d 50 4c 00 00 02 00 cd cd e8 7e 3c db dc dd |SMPL.......~<...| 00000878 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00020878 53 4d 50 4c 00 00 02 00 cd cd e8 7e 3c db dc dd |SMPL.......~<...|
After the 4 byte magic code there is a 32bit value (0x20000) that indicates the length of the PCM data which starts at 0x878. The PCM data is all zeros in this example. If the original sample data is shorter than 0x20000 it will get padded with zeros.
The next four bytes (
cd cd e8 7e) is a CRC32 of the whole PCM data (0x20000 zeros in the example).
The four bytes after the CRC32 (
3c db dc dd) are unknown. They change whenever the whole zero padded block of PCM data changes. Like the CRC32, they do not change if only the number of zero padding bytes changes, and they do not seem to be affected by factors outside of the
SMPL block. If the values of these bytes are incorrect, importing the kit into the drum machine fails with a generic error message.
I have tried CRC RevEng but it did not find an algorithm. Also, it seems unlikely that the unknown bytes are an additional CRC.
What might be the purpose of these four unknown bytes? Is there a method that can help me find out?