This document is about the format of CTR Streams (CSTM).
Overview[edit]
The structure is similar to that of a BCWAV, with a few differences, such as its different INFO block format, the addition of a SEEK block, and the organization of the DATA block samples into blocks.
These files are either found in rom:\sound\stream\ or they can be inside of a CSAR.
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
4 |
Magic (CSTM)
|
0x004 |
2 |
Endianness (0xFEFF = little, 0xFFFE = big)
|
0x006 |
2 |
Header Size (0x40 due to Info Block alignment)
|
0x008 |
4 |
Version (0x02000000)
|
0x00C |
4 |
File Size
|
0x010 |
2 |
Number of Blocks (3)
|
0x012 |
2 |
Reserved
|
0x014 |
12 |
Info Block Sized Reference (Offset relative to start of file)
|
0x020 |
12 |
Seek Block Sized Reference (Offset relative to start of file)
|
0x02C |
12 |
Data Block Sized Reference (Offset relative to start of file)
|
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
4 |
Magic
|
0x004 |
4 |
Size
|
Block Types[edit]
Info Block[edit]
If encoding is DSP ADPCM:
If encoding is IMA ADPCM:
The info block is aligned to 0x20 bytes.
Encoding[edit]
VALUE |
DESCRIPTION
|
0 |
PCM8
|
1 |
PCM16
|
2 |
DSP ADPCM
|
3 |
IMA ADPCM
|
Stream Info[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
1 |
Encoding
|
0x001 |
1 |
Loop (0 = don't loop, 1 = loop)
|
0x002 |
1 |
Channel Count
|
0x003 |
1 |
Padding
|
0x004 |
4 |
Sample Rate
|
0x008 |
4 |
Loop Start Frame
|
0x00C |
4 |
Loop End Frame
|
0x010 |
4 |
Sample Block Count
|
0x014 |
4 |
Sample Block Size
|
0x018 |
4 |
Sample Block Sample Count
|
0x01C |
4 |
Last Sample Block Size
|
0x020 |
4 |
Last Sample Block Sample Count
|
0x024 |
4 |
Last Sample Block Padded Size
|
0x028 |
4 |
Seek Data Size
|
0x02C |
4 |
Seek Interval Sample Count
|
0x030 |
8 |
Sample Data Reference (Offset relative to Data Block Data field)
|
Track Info[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
1 |
Volume
|
0x001 |
1 |
Pan
|
0x002 |
2 |
Padding
|
0x004 |
8 |
Channel Index Byte Table Reference (Offset relative to Volume field)
|
0x00C |
X |
Channel Index Byte Table (Padded to 4 bytes)
|
Byte Table[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
4 |
Count
|
0x004 |
Count |
Elements
|
Channel Info[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
8 |
ADPCM Info Reference (Offset relative to this field)
|
DSP ADPCM Info[edit]
DSP ADPCM Param[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
32 |
16-bit Coefficients
|
DSP ADPCM Context[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
1 |
4-bit Predictor + 4-bit Scale
|
0x001 |
1 |
Reserved
|
0x002 |
2 |
Previous Sample
|
0x004 |
2 |
Second Previous Sample
|
IMA ADPCM Info[edit]
IMA ADPCM Context[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
2 |
Data
|
0x002 |
1 |
Table Index
|
0x003 |
1 |
Padding
|
Seek Block[edit]
The seek block is aligned to 0x20 bytes.
Data Block[edit]
The data block is aligned to 0x20 bytes, as well as the data field's actual sample data.
Reference Table[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
4 |
Count
|
0x004 |
Count * 8 |
References (Offsets relative to Count field)
|
Sized Reference[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
8 |
Reference
|
0x008 |
4 |
Size
|
Reference[edit]
OFFSET |
SIZE |
DESCRIPTION
|
0x000 |
2 |
Type ID
|
0x002 |
2 |
Padding
|
0x004 |
4 |
Offset ("null" = 0xFFFFFFFF)
|
Reference Types[edit]
The following tools can play BCSTMs and convert them to other formats: