AGSC (File Format): Difference between revisions
Jump to navigation
Jump to search
→Project
imported>Jackoalan |
imported>Jackoalan |
||
Line 966: | Line 966: | ||
The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc. | The Project properties chunk contains values for the sounds, including priority, polyphony, volume, etc. | ||
Structurally, the Project is the root of the Audio Group tree, defining one or more ''Song Groups'' or ''SFX Groups'' | |||
{|class="wikitable" | {|class="wikitable" | ||
Line 974: | Line 976: | ||
| 0x0 | | 0x0 | ||
| 4 | | 4 | ||
| ''' | | '''Group end offset''' (points to next group in project) | ||
|- | |- | ||
| 0x2 | | 0x2 | ||
| 2 | | 2 | ||
| '''Group ID''' | |||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 2 | | 2 | ||
| '''Group | | '''Group Type'''; 0 for SongGroup (for use with [[CSNG (File Format)|CSNG]]), 1 for SFXGroup. | ||
|- | |- | ||
| 0x8 | | 0x8 | ||
Line 998: | Line 1,000: | ||
| 0x14 | | 0x14 | ||
| 4 | | 4 | ||
| '''Keymaps table offset''' | | '''Keymaps table offset''' (SongGroup) | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
| 4 | | 4 | ||
| '''Layers table offset''' | | '''Layers table offset''' (SongGroup) | ||
|- | |- | ||
| 0x1C | | 0x1C | ||
| 4 | | 4 | ||
| ''' | | '''Normal page table''' (SongGroup) / '''SFX table offset''' (SFXGroup) | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| 4 | | 4 | ||
| ''' | | '''Drum page table offset''' (SongGroup) | ||
|- | |- | ||
| 0x24 | | 0x24 | ||
| 4 | | 4 | ||
| ''' | | '''MIDI Setup table offset''' (SongGroup) | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| colspan=2 {{unknown|End of | | colspan=2 {{unknown|End of group header}} | ||
|} | |} | ||
Line 1,026: | Line 1,028: | ||
This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap. | This is a table of shorts; there's no count value, so it's terminated with a value of 0xFFFF. It's a list of SoundMacro IDs present in the file. Occasionally there's gaps in the list; these gaps are signified by the top bit, 0x8000, being set on the size value preceding the gap. | ||
==== Sample ID | ==== Sample ID / Keymap / Layer Tables ==== | ||
These function the same way as the SoundMacro ID table, but indexes other types of entities instead. | |||
==== Normal / Drum Page Entry ==== | |||
Used to map [https://www.midi.org/specifications/item/gm-level-1-sound-set General MIDI program numbers] (instruments) | |||
to sound entities (macros, keymaps, layers) | |||
{|class="wikitable" | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 2 | |||
| '''ObjectID''' | |||
|- | |||
| 0x2 | |||
| 1 | |||
| '''Priority'''; voices are limited, so priority is used to play more important sounds over others | |||
|- | |||
| 0x3 | |||
| 1 | |||
| '''Max number of voices''' | |||
|- | |||
| 0x4 | |||
| 1 | |||
| '''GM Program Number''' | |||
|- | |||
| 0x5 | |||
| 1 | |||
| '''Padding''' | |||
|} | |||
==== SFX Entry ==== | |||
Used to map auto-generated <code>#define</code> IDs (used by game code) to sound entities (macros, keymaps, layers) | |||
This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes. | This table begins with a 16-bit count value, then 16 bits of padding. Each entry in the table is 10 bytes. | ||
Line 1,041: | Line 1,076: | ||
| 0x0 | | 0x0 | ||
| 2 | | 2 | ||
| ''' | | '''DefineID'''; referenced by game code | ||
|- | |- | ||
| 0x2 | | 0x2 | ||
| 2 | | 2 | ||
| ''' | | '''ObjectID''' | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 1 | | 1 | ||
| ''' | | '''Priority'''; voices are limited, so priority is used to play more important sounds over others | ||
|- | |- | ||
| 0x5 | | 0x5 | ||
| 1 | | 1 | ||
| ''' | | '''Max number of voices''' | ||
|- | |- | ||
| 0x6 | | 0x6 | ||
Line 1,067: | Line 1,102: | ||
| '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel) | | '''Definite Key'''; The default pitch (usually 0x3C00... the second byte may possibly be the MIDI channel) | ||
|} | |} | ||
==== MIDI Setup Entry ==== | |||
Table of fixed-length tables to map all 16 MIDI channels to program numbers | |||
(in-turn resolving to sound entities via the page table). | |||
Multiple MIDI Setups may be created to support Song data requiring totally different | |||
banks of instruments. | |||
Each MIDI Setup starts with a u32 '''MIDI-Setup-ID''', followed by 16 entries of the following table (one for each channel): | |||
{|class="wikitable" | |||
! Offset | |||
! Size | |||
! Description | |||
|- | |||
| 0x0 | |||
| 1 | |||
| '''Program Number''' | |||
|- | |||
| 0x1 | |||
| 1 | |||
| '''Volume''' | |||
|- | |||
| 0x2 | |||
| 1 | |||
| '''Panning''' | |||
|- | |||
| 0x3 | |||
| 1 | |||
| '''Reverb''' | |||
|- | |||
| 0x4 | |||
| 1 | |||
| '''Chorus''' | |||
|} | |||
MIDI setups continue until the ''group end offset'' is reached. | |||
=== Sample === | === Sample === |