BFWAV (File Format): Difference between revisions
(Imported from avsys wiki) |
|||
Line 182: | Line 182: | ||
* [[PAC-MAN 99]] | * [[PAC-MAN 99]] | ||
* [[Paper Mario: The Origami King]] | * [[Paper Mario: The Origami King]] | ||
* [[Paper Mario: The Thousand-Year Door]] (Nintendo Switch) | |||
* [[Pikmin 3 Deluxe]] | * [[Pikmin 3 Deluxe]] | ||
* [[Splatoon 2]] | * [[Splatoon 2]] |
Latest revision as of 14:59, 23 May 2024
BFWAV (Binary caFe WAVe) is common file format for storing sound on Wii U and Nintendo Switch. The format is structured similarly to WAV, where there is one info section ("fmt " in WAV, "INFO" in BFWAV) and one data section ("data" in WAV, "DATA" in BFWAV). The file consists of a header and two sections, INFO and DATA. All offsets in the file may be 0xFFFFFFFF if it links to nothing.
File Format
Header
The file starts with a header as follows:
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | File magic. Always FWAV in ASCII. |
0x04 | UInt16 | Byte-order-mark. FE FF for big endian, FF FE for little endian. |
0x06 | UInt16 | Header size. Always 0x40 due to alignment. |
0x08 | UInt32 | Version number. |
0x0C | UInt32 | File size in bytes. |
0x10 | UInt16 | Number of sections. Always 2. |
0x12 | UInt16 | Padding. |
0x14 | UInt16 | INFO section flag. Always 0x7000. |
0x16 | UInt16 | Padding. |
0x18 | UInt32 | INFO offset. |
0x1C | UInt32 | INFO size in bytes. |
0x20 | UInt16 | DATA section flag. Always 0x7001. |
0x22 | UInt16 | Padding. |
0x24 | UInt32 | DATA offset. |
0x28 | UInt32 | DATA size in bytes. |
0x2C | Byte[0x14] | Padding to align the data. |
0x40 | End of header |
INFO
The INFO section contains general information about the sound.
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | Section magic. Always INFO in ASCII. |
0x04 | UInt32 | Section size in bytes. |
0x08 | Byte | Sound encoding. 0 = PCM8, 1 = PCM16, 2 = DSP ADPCM, 3 = IMA ADPCM. |
0x09 | Byte | Loop. 0 = no loop, 1 = loop. |
0x0A | Byte[2] | Padding. |
0x0C | UInt32 | Sample rate. |
0x10 | UInt32 | Loop start in frames. 0 if not looping. |
0x14 | UInt32 | Loop end in frames. 0 if not looping. |
If version ≥ 0.1.2.0 | ||
0x18 | UInt32 | Original loop start. 0 if not looping. |
Else | ||
0x18 | UInt32 | Reserved. |
Then follows a reference table which points to the channel infos. The section flag is 0x7100.
Channel Info
The Channel Info section contains an offset to the data and may contain ADPCM information. Each entry has the following structure:
Offset | Type | Description |
---|---|---|
0x00 | UInt16 | Sound data offset flag. Always 0x1F00. |
0x02 | UInt16 | Padding. |
0x04 | Int32 | Sound data offset, relative to 0x08 into the DATA section. |
0x08 | UInt16 | ADPCM info flag. Always 0x0300. |
0x0A | UInt16 | Padding. |
0x0C | Int32 | ADPCM info offset, relative to the start of this structure. |
0x10 | UInt32 | Reserved. |
ADPCM Info
Offset | Type | Description |
---|---|---|
0x00 | UInt16[8][2] | 16-bit Coefficients. |
0x20 | UInt16 | Pred scale. |
0x22 | UInt16 | Yn 1. |
0x24 | UInt16 | Yn 2. |
0x26 | UInt16 | Loop Pred Scale. |
0x28 | UInt16 | Loop Yn 1. |
0x2A | UInt16 | Loop Yn 2. |
0x2C | UInt16 | Padding. |
DATA
The DATA section contains all the sound data.
Offset | Type | Description |
---|---|---|
0x00 | Char[4] | Section magic. Always DATA in ASCII. |
0x04 | UInt32 | S = Section size in bytes. |
0x08 | Byte[S - 8] | Sound data. |
Reference Table
A reference table is used to reference multiple structures. It has the following structure:
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | Number of references. |
The following structure follows. The amount is specified above.
Offset | Type | Description |
---|---|---|
0x00 | UInt16 | Section flag, to identify what structure it links to. |
0x02 | UInt16 | Padding. |
0x04 | Int32 | Offset to a structure, relative to the start of the header structure. |
Version List
Version | Found in |
---|---|
0.1.1.0 | |
0.1.2.0 |
|
Tools
The following tools can handle BFWAV files:
- Wexos's Toolbox, by Wexos.