JUKEBOX.SI
JUKEBOX.SI is an SI file containing 60 audio tracks of music and radio dialogue. With a few exceptions[citation needed], all of Lego Island's music is stored in JUKEBOX.SI.
Details
All audio in JUKEBOX.SI is uncompressed mono PCM. Most of the tracks are in 11025 Hz and 16-bit, but a handful are 22050 Hz and 8-bit. Each track starts with a header specifying its format (sample rate, sample size, byte rate, etc.)
Due to SI files' standardization with RIFF, each track's header is Microsoft WAV compatible and can be transplanted directly into a WAV file's header. However due to SI files' chunked/interleaved nature, the PCM data cannot be directly transplanted without noticeable clicks and glitches in the output.
JUKEBOX.SI does not actually interleave its audio with any other data, making extraction easier than most SI files. However the audio is still separated into chunks and each chunk's 20-byte header (which is naturally not PCM data) is what causes the aforementioned clicks/glitches when trying to extract the data directly. These chunk headers will need to be removed to extract a clean copy of the audio.
Technical Information
Music appears to begin with a MxDa
and is split into chunks of MxCh
. The MxDa
header contains information about the PCM audio in the MxCh
chunks. The first MxCh
appears to be information about the remainder of the chunks in the MxDa
structure.
All bytes are little endian as is normal for RIFF-based files.
MxDa Header Specification
Bytes | Offset | Description |
---|---|---|
MxDa |
0 | Identifier |
MxCh |
4 | Chunk Header |
Chunk Size | 8 | 4-byte Integer |
Sub-Chunk Size | 22 | 4-byte Integer - The remaining size of this chunk after this value |
Audio Format | 26 | 2-byte Integer - 1 = PCM, others indicate some form of compression |
Number of Channels | 28 | 2-byte Integer - 1 = Mono, 2 = Stereo |
Sample Rate | 30 | 4-byte Integer |
Byte Rate | 34 | 4-byte Integer - is equal to Sample Rate * Number of Channels * BitsPerSample/8
|
Bytes per Sample | 36 | 2-byte Integer - is equal to Number of Channels * BitsPerSample/8
|
Bits per Sample per Channel | 38 | 2-byte Integer - 8 = 8-bit, 16 = 16-bit, etc. |
MxCh Specification
Bytes | Offset | Description |
---|---|---|
MxCh |
0 | Chunk Header |
Chunk Size | 4 | 4-byte Integer |
Data | 8 | Arbitrary data no more than "Chunk Size" in bytes |