JUKEBOX.SI

From LEGO Island Wiki
Revision as of 12:51, 18 April 2019 by MattKC (talk | contribs)
Jump to navigation Jump to search

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