19#define SOUND_IS_KEY_ON(id) ((u32)(id) >> 31)
20#define SOUND_IS_EXCLUSIVE(id) (((id) >> 30) & 1)
21#define SOUND_BANK(id) (((id) >> 18) & 0x7F)
22#define SOUND_PROG(id) (((id) >> 11) & 0x7F)
23#define SOUND_TONE(id) (((id) >> 7) & 0xF)
24#define SOUND_NOTE(id) ((id) & 0x7F)
25#define SOUND_SEQ(id) (((id) >> 8) & 0xFF)
26#define SOUND_SEP(id) ((id) & 0xFF)
29#define SOUND_SLOT_COUNT 3
32#define SOUND_SEP_COUNT 16
35#define SOUND_VOLUME_MAX 0x7F
38#define SOUND_SELECT 0x8004503C
39#define SOUND_MENU_CANCEL 0x800450BD
40#define SOUND_CURSOR 0x8004513E
41#define SOUND_MENU_OPEN 0x40019
42#define SOUND_MENU_CLOSE 0x4001A
43#define SOUND_MENU_MOVE 0x4001B
44#define SOUND_MENU_CONFIRM 0x4001C
45#define SOUND_COUNT 0x800452C6
46#define SOUND_RECOVERY 0x40014
47#define SOUND_TELEPORT 0x4001D
48#define SOUND_WIN_JINGLE 0x6004001E
49#define SOUND_INN_JINGLE 0x4004000D
50#define SOUND_SWITCH01 0x8004103C
51#define SOUND_SWITCH02 0x800410BD
52#define SOUND_SWITCH03 0x8004113E
53#define SOUND_COMCD103 0x800429BF
54#define SOUND_COMCD115 0xA0042FCB
55#define SOUND_COMEX113 0x800446C9
56#define SOUND_PLAYER11 0xA0045EC9
57#define SOUND_SYSTEM05 0x80045341
58#define SOUND_GONDRA_S 0x340004
59#define SOUND_SE000002 0xA40006
60#define SOUND_ELEVATER 0x1080001
61#define SOUND_CARD_001 0x800460BD
70#define MUSIC(bank, n) (0x60000000 | (bank) << 18 | (n))
74#define MUSIC_CONFUSION MUSIC(1, 0)
75#define MUSIC_GAME_OVER MUSIC(1, 8)
76#define MUSIC_BATTLE MUSIC(2, 0)
77#define MUSIC_BATTLE_1 MUSIC(3, 0)
78#define MUSIC_ASUKA_CITY MUSIC(4, 0)
79#define MUSIC_ADMIN_CENTER MUSIC(5, 0)
80#define MUSIC_SEWERS MUSIC(6, 0)
81#define MUSIC_SHOP_1 MUSIC(7, 0)
82#define MUSIC_SHOP_2 MUSIC(8, 0)
83#define MUSIC_FIELD MUSIC(9, 0)
84#define MUSIC_DUEL_ISLAND MUSIC(0xA, 0)
85#define MUSIC_PROTOCOL_RUINS MUSIC(0xB, 0)
86#define MUSIC_SEIRYU_CITY MUSIC(0xC, 0)
87#define MUSIC_MAGASTA MUSIC(0xD, 0)
88#define MUSIC_STATION MUSIC(0xE, 0)
89#define MUSIC_SHAMAN_HOUSE MUSIC(0xF, 0)
90#define MUSIC_RELIABILITY_SPOT MUSIC(0x10, 0)
91#define MUSIC_JUNGLE_SHRINE MUSIC(0x11, 0)
92#define MUSIC_SUZAKU_CITY MUSIC(0x12, 0)
93#define MUSIC_BUG_MAZE MUSIC(0x13, 0)
94#define MUSIC_BADLAND MUSIC(0x14, 0)
95#define MUSIC_SECRET_ROOM MUSIC(0x15, 0)
96#define MUSIC_MIRAGE_HALL MUSIC(0x16, 0)
97#define MUSIC_BYAKKO_CITY MUSIC(0x17, 0)
98#define MUSIC_LEGENDARY_GYM MUSIC(0x18, 0)
99#define MUSIC_DUNGEON MUSIC(0x19, 0)
100#define MUSIC_GENBU_CITY MUSIC(0x1A, 0)
101#define MUSIC_ONLINE_CENTER MUSIC(0x1B, 0)
102#define MUSIC_GUNSLINGER MUSIC(0x1C, 0)
103#define MUSIC_SEABED MUSIC(0x1D, 0)
104#define MUSIC_CIRCUIT_BOARD MUSIC(0x1E, 0)
105#define MUSIC_CITY_CRISIS MUSIC(0x1F, 0)
106#define MUSIC_MEMORY_CARD MUSIC(0x20, 0)
107#define MUSIC_TRAINING MUSIC(0x21, 2)
108#define MUSIC_BOSS MUSIC(0x22, 0)
109#define MUSIC_BOSS_1 MUSIC(0x23, 0)
110#define MUSIC_LAST_BOSS MUSIC(0x24, 0)
111#define MUSIC_LAST_BOSS_1 MUSIC(0x25, 0)
112#define MUSIC_LAST_BOSS_2 MUSIC(0x26, 0)
113#define MUSIC_CARD_BATTLE MUSIC(0x27, 4)
114#define MUSIC_STREET_CORNER MUSIC(0x29, 0)
115#define MUSIC_STREET_CORNER_1 MUSIC(0x29, 1)
116#define MUSIC_STREET_CORNER_2 MUSIC(0x29, 2)
117#define MUSIC_STREET_CORNER_3 MUSIC(0x29, 3)
118#define MUSIC_AOA_HEADQUARTERS MUSIC(0x2A, 0)
119#define MUSIC_CONTROL_ROOM MUSIC(0x2B, 0)
120#define MUSIC_WATER_TUNNEL MUSIC(0x2C, 0)
121#define MUSIC_WIRE_FOREST MUSIC(0x2D, 0)
122#define MUSIC_WIND_PRAIRIE MUSIC(0x2E, 0)
123#define MUSIC_TYRANNO_VALLEY MUSIC(0x2F, 0)
124#define MUSIC_GALE_TOWER MUSIC(0x30, 0)
125#define MUSIC_FOREST_INN_BF MUSIC(0x31, 0)
126#define MUSIC_PROTOCOL_FOREST MUSIC(0x32, 0)
127#define MUSIC_DIGIMON_LAB MUSIC(0x33, 0)
128#define MUSIC_SWAMP MUSIC(0x34, 0)
129#define MUSIC_ETHER_JUNGLE MUSIC(0x35, 0)
130#define MUSIC_COAST MUSIC(0x36, 0)
131#define MUSIC_UG_LAKE MUSIC(0x37, 0)
132#define MUSIC_DESERT MUSIC(0x38, 0)
133#define MUSIC_DUM_DUM_FACTORY MUSIC(0x39, 0)
134#define MUSIC_WEST_SEWERS MUSIC(0x3A, 0)
135#define MUSIC_STORAGE_ROOM MUSIC(0x3B, 0)
136#define MUSIC_UNDERGROUND_CAVE MUSIC(0x3C, 0)
137#define MUSIC_BOOT_MOUNTAIN MUSIC(0x3D, 0)
138#define MUSIC_FREEZE_MOUNTAIN MUSIC(0x3E, 0)
139#define MUSIC_KULON_PIT MUSIC(0x3F, 0)
140#define MUSIC_CHAMBER_ROOM MUSIC(0x40, 1)
141#define MUSIC_PELCHE_OASIS MUSIC(0x41, 0)
142#define MUSIC_EAUCTION MUSIC(0x42, 0)
143#define MUSIC_CARGO_TOWER MUSIC(0x42, 2)
144#define MUSIC_MAIN_LOBBY_DEMO MUSIC(0x43, 3)
145#define MUSIC_SATELLITE_CONTROL_ROOM MUSIC(0x44, 1)
148#define MUSIC_BANK(music) ((music) >> 18 & 0x7F)
#define FLEXIBLE
The length of an array that ends a struct and runs as far as each object of it needs: s32 seps[FLEXIB...
void stopSound(s32 packed)
Stops a sequence sound (key-on sounds are left alone)
#define SOUND_SLOT_COUNT
The banks loaded at once: slot 0 keeps bank 1 (system sounds), 1 and 2 alternate.
SoundState SOUND
rsin and rcos (libgte) read rsin_tbl[a - 0x800] and the like: their addresses before the table fall i...
SoundLoadState
SoundLoader.state: waiting for the header file, the body file, then the SPU.
short soundKeyOn(s32 slot, short prog, short note)
Plays one note of a program from the bank in slot slot; returns the voice.
short playSound(s32 packed)
Plays a packed sound id (see engine/sound.h); returns the voice of a key-on.
void fadeOutSound(s32 packed)
Fades a sequence sound out over a second (key-on sounds are left alone)
s32 isSoundLoading(void)
Whether a bank is still being loaded.
void loadSoundBankInto(s32 index, s32 id)
Closes what slot slot holds and starts loading bank id into it.
void * SOUND_HEAD_BUFFERS[]
Each slot's buffer, and its SPU address.
void loadSoundBank(s32 id)
Loads a bank into slot 1 or 2, whichever was not used last.
SoundFiles * SOUND_BANK_FILES[]
The banks by id: bits 18-24 of a sound id.
void soundKeyOff(s32 packed, s16 voice)
Releases the voice that a key-on sound id started.
void stopAllSounds(void)
Stops every track of the loaded banks and every voice.
void updateSoundLoading(void)
Header: copied to the slot's buffer, then the body goes to the SPU.
s32 findSoundBank(s32 id)
The slot (0-2) that holds bank id, or -1.
void initSound(void)
Starts libsnd, gives each slot its buffers and loads the system sounds (bank 1) into slot 0.
One of the SOUND_SLOT_COUNT loaded sound banks: a VAB and its SEP sequences.
void * headBuffer
VAB header and SEPs are copied here.
A bank's files (SOUND_BANK_FILES[id])
s32 headFile
archive: VAB header and SEPs
s32 vhIndex
of the VAB header in headFile
s32 seps[0]
indices in headFile, 0-terminated
s32 bodyFile
VAB body, sent to the SPU.
s32 bodyEntry
(file << 16) | slot
Loads a bank in the background (updateSoundLoading)
short(* keyOn)(s32 slot, short prog, short note)
s32 music
the exclusive sound playing
u8 seqTable[0x4200]
SsSetTableSize(6 SEQs, 16 SEPs)
void(* loadBankInto)(s32 slot, s32 id)
void(* stopSound)(s32 id)
void(* updateLoading)(void)
short(* playSound)(s32 id)
returns the voice of a key-on
void(* keyOff)(s32 id, s16 voice)