Akai Chopshop Format
on November 13, 2009 at 8:30 pmThis page describes the Akai ChopShop wave file format which can be read on the MPC500, and created on the MPC1000/2500/4000. A ChopShop wave contains slice points which are played after an amount of MIDI ticks. This means that a sufficiently sliced sample will follow a sequence tempo. The following is the hex format which will allow you to read or write ChopShop format files. The format is playable as a normal Wave file, it just contains an additional RIFF header. For more information about RIFF waves, check out this page: http://www.sonicspot.com/guide/wavefiles.html
The following was worked out by Adam Odlund (AskR on MPC-Forums) and myself, more or less independently. I must thank Adam for bringing the file format to my attention! If you have any questions about the format, you can email either Adam.Odlund AT gmail.com or myself at Guy AT BeatButcherMPC. I have a java class to read and write these files. If that would be of interest, get in touch with me.
A ChopShop wave file contains two additional headers to a normal RIFF wave: “smpl”, and “chsh”. All Akai saved waves contain the “smpl” header, and “chsh” obviously is an abbreviation for ChopShop(though it took us a while to realise!). All integer values are written in little endian format (smallest byte first)
| Offset | Value | Description | Size |
| 0×00 | smpl | RIFF Header | 0×04 |
| 0×04 | 0×0050 | The size of the smpl chunk | 0×04 |
| 0×08 | 0×0047 | MIDI Manafacturer ID (Akai) | 0×02 |
| 0x0A | 0×10 | Model number (in theory) | 0×02 |
| 0x0C | 0x005E | Unknown | 0×04 |
| 0×10 | 1000000000 / Sample Rate | Average Nanoseconds Per Byte | 0×04 |
| 0×14 | 60 | Base MIDI note | 0×04 |
| 0×18 | 0×0000 | Padding | 0×04 |
| 0x1C | 0×0000 | Padding | 0×04 |
| 0×20 | 0×0000 | Padding | 0×04 |
| 0×24 | 0×0001 | Unknown | 0×04 |
| 0×28 | 20 | Number of extra chunk bytes | 0×04 |
| 0x2C | 0×0000 | Padding | 0×04 |
| 0×30 | 0×0000 | Padding | 0×04 |
| 0×34 | 0×0000 | Padding | 0×04 |
| 0×38 | 0×0000 | Total Number of Samples | 0×04 |
| 0x3C | 0×0000 | Padding | 0×04 |
| 0×40 | 0×0000 | Padding | 0×04 |
| 0×44 | 0×01 | Unknown | 0×02 |
| 0×46 | 60 | Base Note | 0×02 |
| 0×48 | 0 | Padding | 0×04 |
| 0x4C | 0 | Padding | 0×04 |
| 0×50 | 0 | Padding | 0×02 |
| 0×52 | 0 | Total Number of Samples | 0×04 |
| 0×56 | 0 | Padding | 0×02 |
| 0×00 | chsh | RIFF header | 0×04 |
| 0×04 | The size of the chsh chunk | 0×04 | |
| 0×08 | 0×0001 | Unknown | 0×04 |
| 0x0C | Number of markers including end, but not 0 | 0×04 | |
| 0×20 | 1351 | Unknown, doesnt seem to matter | 0×04 |
From here the MIDI markers in ticks (at 96 PPQ) are stored consecutively, interlaced with the slice point of the sample in samples. i.e 0×00000000 0×00000000, 0x0000005F 0×00007515, etc. This is followed by the normal wave “data” RIFF chunk. If you find any errors, think this could be better explained, or if you would like a sample ChopShop file to play with, please get in touch!