The pool table chunk contains a list of cues. Each cue is the offset in number of bytes from the beginning of the wave pool data (the collection of wave audio data) to a wave sample in the wave pool data.
The pool table chunk in the DLS file format has the following structure.
|Byte sequence description||Length in bytes||Starts with byte in the chunk||Value|
|chunk ID||4||0x00||The ASCII character string "ptbl"|
|size||4||0x04||The size of the chunk in number of bytes (unsigned integer) less 8 (less the size of "chunk ID" and the "size")|
|size of the structure||4||0x08||The size of the pool table structure in number of bytes (an unsigned integer), but not including the pool cues|
|number of cues||4||0x0C||The number of pool cues that follow (unsigned integer)|
|pool cues||various||0x10||A list of pool cues, where each pool cue is an unsigned integer|
Size of the structure
The size of the structure in the current DLS specifications is 8, as it is simply the sum of the 4 bytes for this "size of the structure" and the 4 bytes for the "number of cues". This size, however, is here to allow for future augmentations of the pool table structure. In future versions of the DLS specifications, this size can become different, if the pool table structure is augmented.
Example of a pool cue
For an example of a pool cue, suppose that a pool cue points to the first wave sample in the wave pool list chunk. The wave pool list chunk itself is a LIST chunk of type "wvpl" and hence its first 12 bytes are the "LIST" ASCII string, the chunk size, and the "wvpl" ASCII string. The wave samples in the wave pool list start immediately after the "wvpl" string. Thus, if a pool cue points to the first wave sample in the wave pool list, then that pool cue is zero (0x00000000). In other words, it points to the very start of the data in the wave pool list chunk.
Use of the pool table chunk
A region chunk in an DLS instrument chunk shows which wave samples should be played to produce specific notes on the instrument. Region chunks do so by incorporating wave link chunks, which are the chunks that actually contain the position of the wave sample. Instead of pointing directly to the wave sample, however, the wave link points to a pool cue in the pool table chunk. This means that changes to the wave pool list (adding and deleting wave samples) can be handled by simply changing the pool cues, rather than changing the wave links in regions.
Downloadable Sounds (DLS) format