Banks (.sbnk)
SBNKs or Sound Banks contain instrument information.
The Main File
The main file contains of a File Header and a Data Block.
| Type | Description |
|---|---|
| SoundFileHeader | Sound File Header (Magic: SBNK. Always contains 1 block) |
| Block | Data Block |
Data Block Body (Magic: DATA)
Contains all the instruments used in the bank.
| Offset | Type | Description |
|---|---|---|
| 0x00 | u32[8] | Padding |
| 0x20 | Table<InstrumentEntry> |
Instrument Entries |
| —- | Instrument[NumInstruments] | Instruments |
Instrument Entry
Each instrument has an entry as follows. If the offset is 0, then the instrument is null and has no data.
| Offset | Type | Description |
|---|---|---|
| 0x00 | InstrumentType | Instrument Type |
| 0x01 | a16 | Absolute offset to instrument data |
| 0x03 | u8 | Padding |
Instrument Type
An enumeration of the instrument type. Each type is a byte each.
| Identifier | Description |
|---|---|
| 0 | Null (no note info whatsoever) |
| 1 | PCM |
| 2 | PSG |
| 3 | White Noise |
| 4 | Direct PCM (Unused) |
| 5 | Null (has note info but 0’d out) |
| 16 | Drum Set |
| 17 | Key Split |
Instruments
Depending on the type of instrument, its data will differ.
Direct Instrument
This is the default instrument type and has a single note info for the entire key range. Instrument type is decided from the instrument entry linking to this.
| Offset | Type | Description |
|---|---|---|
| 0x00 | NoteInfo | Note Info |
Drum Set Instrument
This defines instruments individually for a key range. It can not contain another drum set or key split instrument.
| Offset | Type | Description |
|---|---|---|
| 0x00 | u8 | Lower Key |
| 0x01 | u8 | Upper Key |
| 0x02 | ContainedDirectInstrument[UpperKey - LowerKey + 1] | Instrument data for each key |
Key Split Instrument
This defines instruments to certain regions of the keyboard. It can not contain another drum set or key split instrument.
| Offset | Type | Description |
|---|---|---|
| 0x00 | u8[8] | Regions. A region works by the key to the byte specified. For example, { 40, 57, 60, 90, 127, 0, 0, 0 } means that there are 5 regions: 0-40, 41-57, 58-60, 61-90, 91-127 |
| 0x08 | ContainedDirectInstrument[NumActualRegions] | Instrument data for each region |
Contained Direct Instrument
A direct instrument inside of a drum set or key split instrument in it has an identifer.
| Offset | Type | Description |
|---|---|---|
| 0x00 | u8 | Padding |
| 0x01 | InstrumentType | Instrument Type |
| 0x02 | NoteInfo | Note Info |
Note Info
This is how you play back a note.
| Offset | Type | Description |
|---|---|---|
| 0x00 | u16 | Wave Id (PCM) or Duty Cycle Type (PSG) |
| 0x02 | u16 | Wave Archive Id (PCM) is hooked up to the wave archives specified by the sound data archive for the bank info that uses this file |
| 0x04 | u8 | Base Note |
| 0x05 | u8 | Attack |
| 0x06 | u8 | Decay |
| 0x07 | u8 | Sustain |
| 0x08 | u8 | Release |
| 0x09 | u8 | Pan |