Kingdom Hearts DS Games - STRM File Format
All information was referenced from this document
STRM stands for “Stream”. It is an individual mono/stereo wave file (PCM8, PCM16 or ADPCM).
File Header
Position | Type | Name | Description |
---|---|---|---|
0x0 | char[4] | type | ‘STRM’ |
0x4 | uint32 | magic | 0x0100feff |
0x8 | uint32 | nFileSize | Size of this STRM file |
0xC | uint16 | nSize | Size of this structure = 16 |
0xE | uint16 | nBlock | Number of Blocks = 2 |
Stream Head
Position | Type | Name | Description |
---|---|---|---|
0x0 | char[4] | type | ‘HEAD’ |
0x4 | uint32 | nSize | Size of this structure |
0x8 | uint8 | nWaveType | 0 = PCM8, 1 = PCM16, 2 = (IMA-)ADPCM |
0x9 | uint8 | bLoop | Loop flag = TRUE/FALSE |
0xA | uint8 | nChannel | Channels |
0x10 | uint8 | unknown | always 0 |
0x11 | uint16 | nSampleRate | Sampling Rate (perhaps resampled from the original) |
0x13 | uint16 | nTime | (1.0 / rate * ARM7_CLOCK / 32) [ARM7_CLOCK: 33.513982MHz / 2 = 1.6756991e7] |
0x15 | uint32 | nLoopOffset | Loop Offset (samples) |
0x19 | uint32 | nSample | Number of Samples |
0x1D | uint32 | nDataOffset | Data Offset (always 68h) |
0x21 | uint32 | nBlock | Number of Blocks |
0x25 | uint32 | nBlockLen | Block Length (Per Channel) |
0x29 | uint32 | nBlockSample | Samples Per Block (Per Channel) |
0x2D | uint32 | nLastBlockLen | Last Block Length (Per Channel) |
0x31 | uint32 | nLastBlockSample | Samples Per Last Block (Per Channel) |
0x34 | uint8[32] | reserved | always 0 |
Stream Data
Position | Type | Name | Description |
---|---|---|---|
0x0 | char[4] | type | ‘DATA’ |
0x4 | uint32 | nSize | Size of this structure |
0x8 | uint8[1] | data | Arrays of wave data |
Wave Data
A Block is the same as SWAV Wave Data.
Mono (SWAV)
Block 1
Block 2
...
Block N (Last Block)
Stereo (STRM)
Block 1 L
Block 1 R
Block 2 L
Block 2 R
...
Block N L (Last Block)
Block N R (Last Block)