BNS (File Format)
From Wexos's Wiki
BNS (BaNner Sound) is a file format used for storing Wii channel sound data.
File Format
Header
The file starts with the following header:
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | File magic. Always BNS in ASCII. |
0x04 | UInt16 | Byte-order-mark. FE FF for big endian, FF FE for little endian. |
0x06 | UInt16 | Version number of the file format. |
0x08 | UInt32 | File size in bytes. |
0x0C | UInt16 | Header size in bytes. |
0x0E | UInt16 | Number of sections stored in the file. |
0x10 | UInt32 | INFO offset. |
0x14 | UInt32 | INFO section size in bytes. |
0x18 | UInt32 | DATA offset. |
0x1C | UInt32 | DATA section size in bytes. |
INFO
The INFO section stores general information about the sound. Unlike BRSTM and BRWAV, the format is always DSP ADPCM. All offsets are relative to 0x08 into the following structure:
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | Section magic. Always INFO in ASCII. |
0x04 | UInt32 | Section size in bytes. |
0x08 | Byte | Dummy value, always 0. |
0x09 | Byte | Loop flag. |
0x0A | Byte | Number of channels. |
0x0B | Byte | Sample rate 24. Contains the upper byte of a 24-bit value. |
0x0C | UInt16 | Sample rate. |
0x0E | UInt16 | Block header start. |
0x10 | UInt32 | Loop start in frames. |
0x14 | UInt32 | Loop end in frames. |
0x18 | UInt32 | Channel table offset. Points an array of offsets which point to each channel. |
0x1C | UInt32 | Unknown. |
Channel
Each channel has the following structure:
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | Data offset into the sound data. |
0x04 | UInt32 | Channel info offset. |
0x08 | UInt32 | Unknown. |
Channel Info
A channel info contains data used to decode DSP ADPCM sound data. Each entry has the following structure:
Offset | Type | Description |
---|---|---|
0x00 | Int16[8][2] | Coefficients. |
0x20 | UInt16 | Gain. |
0x22 | UInt16 | Pred scale. |
0x24 | Int16 | Yn 1. History sample 1. |
0x26 | Int16 | Yn 2. History sample 2. |
0x28 | UInt16 | Loop pred scale. |
0x2A | Int16 | Loop yn 1. Loop history sample 1. |
0x2C | Int16 | Loop yn 2. Loop history sample 2. |
0x2E | Byte[2] | Padding. |
DATA
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | Section magic. Always DATA in ASCII. |
0x04 | UInt32 | Section size in bytes. |
0x08 | Byte[] | Sound data. |
Tools
The following tools can handle BNS files:
- (none)