The Official Sequential/Oberheim Forum

SEQUENTIAL/DSI => Pro 3 => Topic started by: chysn on October 10, 2020, 07:37:34 PM

Title: Pro 3 Wavetable SysEx Message
Post by: chysn on October 10, 2020, 07:37:34 PM
For any developers who are interested, a description of the Pro 3's wavetable system exclusive format follows. I've got a ton of ideas for composing with generated wavetables, but I probably won't have my Pro 3 until later this month or next.

Thanks to composerjk for his help to verify this information on real hardware. That said, any mistakes here are mine alone.

Wavetable Message: 112,368 Bytes

Header: 17 bytes

F0 (start of sysex)
01 (Sequential)
31 (Pro 3)
6a 6c 01 6b
Wavetable Number: nn (range of 20-3f, for wavetables 33-64)
Wavetable Name: 8 x {nn (ASCII character, range of 01-7f, with 00 terminating the name)}
00 force end of wavetable name

Packed PCM Data: 98,304 bytes packed to 112,348 bytes

Reference Wave PCM: 16 x {
  1024-word big-endian 16-bit signed PCM
  512-word down-sampled PCM
  2 x {256-word down-sampled PCM}
  8 x {128-word down-sampled PCM}
}

This is 3072 words, or 6144 bytes, of PCM per reference wave x 16 waves = 98,304 bytes, which is then packed into 8-byte packets, yielding 112,348 bytes. There's a detailed discussion of data packing here (https://forum.sequential.com/index.php/topic,43.msg106.html#msg106), and the Tenth Anniversary Edition of my C packing library is available here (https://github.com/Chysn/sequential_packing).

Checksum: 2 bytes

Checksum is a 16-bit unsigned integer initialized to 0. For each 2-byte word in the PCM data, convert it to a little-endian 16-bit unsigned integer and add it to checksum. Then, unset bits 7 and 15 of checksum (mask with 0xf7f7). Then append checksum as a 2-byte little-endian value to the sysex message.

End of sysex: 1 byte

F0
Title: Re: Pro 3 Wavetable SysEx Message
Post by: chysn on October 11, 2020, 11:56:26 AM
Error #1: End of sysex is F7, not F0