Fix sound bank allocation (#2107)

And correctly initialize the volume group for sfx
This commit is contained in:
Ziemas
2023-01-08 17:23:59 +01:00
committed by GitHub
parent bdee98323d
commit 416950a166
4 changed files with 29 additions and 27 deletions
+25 -23
View File
@@ -26,18 +26,14 @@ void sbank_init_globals() {
}
void InitBanks() {
for (auto& gBank : gBanks) {
gBank->bank_handle = 0;
gBank->sound_count = 0;
for (auto bank : gBanks) {
bank->bank_handle = 0;
bank->sound_count = 0;
gBank->in_use = false;
gBank->unk4 = 0;
bank->in_use = false;
bank->unk4 = 0;
// paper over bank allocation differences
if (g_game_version == GameVersion::Jak1)
gBank->in_use = 1;
strcpy(gBank->name, "<unused>");
strcpy(bank->name, "<unused>");
}
if (g_game_version == GameVersion::Jak2) {
@@ -46,24 +42,24 @@ void InitBanks() {
gBanks[0]->spu_size = 0xAFCC0;
strncpy(gBanks[1]->name, "gun", 16);
gBanks[0]->spu_loc = 0x131740;
gBanks[0]->spu_size = 0;
gBanks[1]->spu_loc = 0x131740;
gBanks[1]->spu_size = 0;
strncpy(gBanks[2]->name, "board", 16);
gBanks[0]->spu_loc = 0x131740;
gBanks[0]->spu_size = 0;
gBanks[2]->spu_loc = 0x131740;
gBanks[2]->spu_size = 0;
strncpy(gBanks[3]->name, "level0", 16);
gBanks[0]->spu_loc = 0x131740;
gBanks[0]->spu_size = 0x42800;
gBanks[3]->spu_loc = 0x131740;
gBanks[3]->spu_size = 0x42800;
strncpy(gBanks[4]->name, "level1", 16);
gBanks[0]->spu_loc = 0x173f40;
gBanks[0]->spu_size = 0x42800;
gBanks[4]->spu_loc = 0x173f40;
gBanks[4]->spu_size = 0x42800;
strncpy(gBanks[5]->name, "level2", 16);
gBanks[0]->spu_loc = 0x1B6740;
gBanks[0]->spu_size = 0x42800;
gBanks[5]->spu_loc = 0x1B6740;
gBanks[5]->spu_size = 0x42800;
}
}
@@ -132,11 +128,17 @@ SoundBank* LookupBank(const char* name) {
if (idx < 0) {
return nullptr; // not found.
}
auto& bank = gBanks[idx];
auto bank = gBanks[idx];
// they had some weird stuff here that took advantage of the fact that this region was
// 16-byte aligned, so it probably wasn't a memcmp, but this is easier.
if ((memcmp(bank->name, name, 16) == 0) && bank->in_use) {
return bank;
if (g_game_version == GameVersion::Jak1) {
if ((memcmp(bank->name, name, 16) == 0)) {
return bank;
}
} else {
if ((memcmp(bank->name, name, 16) == 0) && bank->in_use) {
return bank;
}
}
idx--;
}
+1 -1
View File
@@ -799,7 +799,7 @@ void* RPC_Loader2(unsigned int /*fno*/, void* data, int size) {
if (!bank->unk4) {
bank->in_use = false;
}
bank->in_use = 0;
bank->in_use = false;
snd_UnloadBank(handle);
snd_ResolveBankXREFS();
} break;
+2 -2
View File
@@ -125,8 +125,8 @@ void blocksound_handler::set_vol_pan(s32 vol, s32 pan) {
}
auto volume = m_vm.make_volume(127, 0, m_cur_volume, m_cur_pan, voice->g_vol, voice->g_pan);
auto left = m_vm.adjust_vol_to_group(volume.left, m_sfx.d.VolGroup);
auto right = m_vm.adjust_vol_to_group(volume.right, m_sfx.d.VolGroup);
auto left = m_vm.adjust_vol_to_group(volume.left, m_group);
auto right = m_vm.adjust_vol_to_group(volume.right, m_group);
voice->set_volume(left >> 1, right >> 1);
}
+1 -1
View File
@@ -26,7 +26,7 @@ class blocksound_handler : public sound_handler {
s32 sfx_vol,
s32 sfx_pan,
SndPlayParams& params)
: m_sfx(sfx), m_vm(vm), m_bank(bank) {
: m_group(sfx.d.VolGroup), m_sfx(sfx), m_vm(vm), m_bank(bank) {
s32 vol, pan, pitch_mod, pitch_bend;
if (sfx_vol == -1) {
sfx_vol = sfx.d.Vol;