AST file: Difference between revisions
No edit summary |
|||
Line 1: | Line 1: | ||
AST files contain PCM16 (16-bit signed) sound data. They're used in Super Mario Galaxy for musics, and possibly in other games. | AST files contain PCM16 (16-bit signed) sound data. They're used in Super Mario Galaxy for musics, and possibly in other games. | ||
They contain an header, followed by BLCK chunks which are divided in blocks.<br> | They contain an header, followed by BLCK chunks which are divided in blocks (channels).<br> | ||
All the data in those files are big-endian, except where mentioned.<br> | All the data in those files are big-endian, except where mentioned.<br> | ||
All the offsets are absolute (from begining of file), except where mentioned.<br> | All the offsets are absolute (from begining of file), except where mentioned.<br> | ||
Line 31: | Line 31: | ||
| 0x000C | | 0x000C | ||
| 2 | | 2 | ||
| Number of | | Number of channels (typically 2 = stereo) | ||
|- | |- | ||
| 0x000E | | 0x000E | ||
Line 39: | Line 39: | ||
| 0x0010 | | 0x0010 | ||
| 4 | | 4 | ||
| Sampling rate in Hz (typically | | Sampling rate in Hz (typically 32000) | ||
|- | |- | ||
| 0x0014 | | 0x0014 | ||
Line 47: | Line 47: | ||
| 0x0018 | | 0x0018 | ||
| 4 | | 4 | ||
| Loopstart position in samples | | Loopstart position in samples/bytes? | ||
|- | |- | ||
| 0x001C | | 0x001C | ||
Line 91: | Line 91: | ||
|} | |} | ||
The data is divided into blocks. | The data is divided into blocks. There's one block per channel.<br> | ||
The length of each block is defined by entry 0x0004 in BLCK chunk header.<br> | The length of each block is defined by entry 0x0004 in BLCK chunk header.<br> | ||
WARNING: The PCM16 data is stored in BIG-ENDIAN! If you aren't working on the Wii, don't forget to byteswap each sample you read or your sound will be pure junk!<br> | WARNING: The PCM16 data is stored in BIG-ENDIAN! If you aren't working on the Wii, don't forget to byteswap each sample you read or your sound will be pure junk!<br> | ||
=== Block mapping inside BLCK chunks === | |||
{| class="wikitable" | |||
|- | |||
! Number of channels | |||
! Type | |||
! Block mapping | |||
|- | |||
| 2 | |||
| Stereo | |||
| Left; Right | |||
|- | |||
| 4 | |||
| 4.0 Surround | |||
| Left; Right; Surround left; Surround right | |||
|} | |||
Stereo is the most common type. Some musics in SMG, such as the beach theme, are 4.0 Surround, though. | |||
=== AST file structure === | === AST file structure === | ||
Line 145: | Line 163: | ||
Where:<br> | Where:<br> | ||
- N is the number of | - N is the number of channels (entry 0x000C in AST header)<br> | ||
- N' is the block size (entry 0x0004 in BLCK chunk header)<br> | - N' is the block size (entry 0x0004 in BLCK chunk header)<br> |
Revision as of 22:28, 24 September 2009
AST files contain PCM16 (16-bit signed) sound data. They're used in Super Mario Galaxy for musics, and possibly in other games.
They contain an header, followed by BLCK chunks which are divided in blocks (channels).
All the data in those files are big-endian, except where mentioned.
All the offsets are absolute (from begining of file), except where mentioned.
All the sizes are in bytes, except where mentioned.
AST header
The header is 64 bytes long. Here's a description of it:
Offset | Size | Description |
---|---|---|
0x0000 | 4 | "STRM" (0x5354524D) |
0x0004 | 4 | Size of all the BLCK chunks (size of the file minus 64) |
0x0008 | 4 | Unknown (0x00010010) |
0x000C | 2 | Number of channels (typically 2 = stereo) |
0x000E | 2 | Unknown (0xFFFF) |
0x0010 | 4 | Sampling rate in Hz (typically 32000) |
0x0014 | 4 | Unknown |
0x0018 | 4 | Loopstart position in samples/bytes? |
0x001C | 4 | Unknown (typically same as entry 0x0014) |
0x0020 | 4 | Block size for the first chunk? (typically 0x2760) |
0x0024 | 28 | Unknown |
BLCK chunks
The BLCK chunks directly follow the AST header. They contain a 32-byte header, followed by PCM16 sound data.
Here's a description of them:
Offset
(from beginning of BLCK chunk) |
Size | Description |
---|---|---|
0x0000 | 4 | "BLCK" (0x424C434B) |
0x0004 | 4 | Block size (typically 0x2760) |
0x0008 | 24 | Padding (zero) |
0x0020 | variable | PCM16 data blocks |
The data is divided into blocks. There's one block per channel.
The length of each block is defined by entry 0x0004 in BLCK chunk header.
WARNING: The PCM16 data is stored in BIG-ENDIAN! If you aren't working on the Wii, don't forget to byteswap each sample you read or your sound will be pure junk!
Block mapping inside BLCK chunks
Number of channels | Type | Block mapping |
---|---|---|
2 | Stereo | Left; Right |
4 | 4.0 Surround | Left; Right; Surround left; Surround right |
Stereo is the most common type. Some musics in SMG, such as the beach theme, are 4.0 Surround, though.
AST file structure
Element | Size |
---|---|
AST header | 64 bytes |
BLCK chunk header | 32 bytes |
PCM16 block 1 | N |
PCM16 block 2 | N |
... | |
PCM16 block N' | N |
BLCK chunk header | 32 bytes |
PCM16 block 1 | N |
PCM16 block 2 | N |
... | |
PCM16 block N' | N |
BLCK chunk header | 32 bytes |
... |
Where:
- N is the number of channels (entry 0x000C in AST header)
- N' is the block size (entry 0x0004 in BLCK chunk header)