Difference between revisions of "AST file"

From WiiBrew
Jump to navigation Jump to search
m (Fixed mix-up of N' and N in description of file)
 
(15 intermediate revisions by 4 users not shown)
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, Legend of Zelda: Twilight Princess, and possibly in other games.
  
They contain an header, followed by BLCK chunks which are divided in blocks.<br>
+
They contain a 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 beginning of the file), except where mentioned.<br>
 
All the sizes are in bytes, except where mentioned.<br>
 
All the sizes are in bytes, except where mentioned.<br>
  
Line 31: Line 31:
 
| 0x000C
 
| 0x000C
 
| 2
 
| 2
| Number of blocks per BLCK chunk
+
| Number of channels (typically 2 = stereo)
 
|-
 
|-
 
| 0x000E
 
| 0x000E
Line 39: Line 39:
 
| 0x0010
 
| 0x0010
 
| 4
 
| 4
| Sampling rate in Hz (typically 0x7D00 = 32000 Hz)
+
| Sampling rate in Hz (typically 32000)
 
|-
 
|-
 
| 0x0014
 
| 0x0014
 
| 4
 
| 4
| Unknown
+
| Total number of samples
 
|-
 
|-
 
| 0x0018
 
| 0x0018
 
| 4
 
| 4
| Loopstart position in samples, from beginning of BLCK chunk
+
| Loopstart position in samples/bytes?
 
|-
 
|-
 
| 0x001C
 
| 0x001C
Line 55: Line 55:
 
| 0x0020
 
| 0x0020
 
| 4
 
| 4
| Block size (typically 0x2760)
+
| Block size for the first chunk? (typically 0x2760)
 
|-
 
|-
 
| 0x0024
 
| 0x0024
 
| 28
 
| 28
| Unknown
+
| Unknown (Usually all zeros except 0x0028, which is 0x7F)
 
|}
 
|}
  
=== BLCK chunk ===
+
=== BLCK chunks ===
  
 
The BLCK chunks directly follow the AST header. They contain a 32-byte header, followed by PCM16 sound data.<br>
 
The BLCK chunks directly follow the AST header. They contain a 32-byte header, followed by PCM16 sound data.<br>
Line 91: Line 91:
 
|}
 
|}
  
The data is divided into blocks. The number of blocks is defined by entry 0x000C in AST header.<br>
+
The data is divided into blocks. There's one block per channel.<br>
The length of the blocks is defined by entry 0x0020 in AST 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>
 +
 
 +
=== 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
 +
|}
  
WARNING: The PCM16 data is stored in BIG-ENDIAN! Don't forget to byteswap each sample you read or your sound will be pure junk!<br>
+
Stereo is the most common type. Some music in SMG, such as the beach theme, are 4.0 Surround, though.
Note: there's sound data for one channel only. Stereo mixing is performed by the Wii's DSP.
 
  
 
=== AST file structure ===
 
=== AST file structure ===
Line 145: Line 163:
  
 
Where:<br>
 
Where:<br>
- N is the number of blocks per BLCK chunk (entry 0x000C in AST header)<br>
+
- N' is the number of channels (entry 0x000C in AST header)<br>
- N' is the block size (entry 0x0020 in AST header)<br>
+
- N is the block size (entry 0x0004 in BLCK chunk header)<br>
 +
[[Category:File formats]]

Latest revision as of 01:05, 6 December 2019

AST files contain PCM16 (16-bit signed) sound data. They're used in Super Mario Galaxy for musics, Legend of Zelda: Twilight Princess, and possibly in other games.

They contain a 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 beginning of the 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 Total number of samples
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 (Usually all zeros except 0x0028, which is 0x7F)

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 music 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)