From a815e3cd89df13d0e15429b6facae61673dc0176 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Mon, 30 Oct 2023 05:17:56 -0700 Subject: [PATCH] JASWaveBankMgr --- include/JSystem/JAudio/JASWSParser.h | 24 ++++++++ include/JSystem/JAudio/JASWaveArcLoader.h | 2 +- include/JSystem/JAudio/JASWaveBankMgr.h | 26 ++++++++ src/JSystem/JAudio/JASWaveArcLoader.cpp | 2 +- src/JSystem/JAudio/JASWaveBankMgr.cpp | 75 ++++++++++++++++++----- 5 files changed, 113 insertions(+), 16 deletions(-) create mode 100644 include/JSystem/JAudio/JASWSParser.h create mode 100644 include/JSystem/JAudio/JASWaveBankMgr.h diff --git a/include/JSystem/JAudio/JASWSParser.h b/include/JSystem/JAudio/JASWSParser.h new file mode 100644 index 000000000..2e29c5365 --- /dev/null +++ b/include/JSystem/JAudio/JASWSParser.h @@ -0,0 +1,24 @@ +#ifndef JASWSPARSER_H +#define JASWSPARSER_H + +#include "dolphin/types.h" + +namespace JASystem { + class TBasicWaveBank; + class TSimpleWaveBank; + namespace WSParser { + struct TCtrl; + struct TCtrlGroup; + struct TCtrlScene; + struct TCtrlWave; + struct TWave; + struct TWaveArchive; + struct TWaveArchiveBank; + + u32 getGroupCount(void*); + TBasicWaveBank* createBasicWaveBank(void*); + TSimpleWaveBank* createSimpleWaveBank(void*); + } +} + +#endif /* JASWSPARSER_H */ diff --git a/include/JSystem/JAudio/JASWaveArcLoader.h b/include/JSystem/JAudio/JASWaveArcLoader.h index d8ae96492..2580c790a 100644 --- a/include/JSystem/JAudio/JASWaveArcLoader.h +++ b/include/JSystem/JAudio/JASWaveArcLoader.h @@ -24,7 +24,7 @@ namespace JASystem { bool eraseSetup(); static s32 loadToAramCallback(void*); bool sendLoadCmd(); - void load(Kernel::THeap*); + bool load(Kernel::THeap*); bool erase(); void onDispose(); void setEntryNum(s32); diff --git a/include/JSystem/JAudio/JASWaveBankMgr.h b/include/JSystem/JAudio/JASWaveBankMgr.h new file mode 100644 index 000000000..72c46a1a9 --- /dev/null +++ b/include/JSystem/JAudio/JASWaveBankMgr.h @@ -0,0 +1,26 @@ +#ifndef JASWAVEBANKMGR_H +#define JASWAVEBANKMGR_H + +#include "dolphin/types.h" + +namespace JASystem { + class TWaveArc; + class TWaveBank; + namespace Kernel { + class THeap; + } + namespace WaveBankMgr { + void init(int); + TWaveBank* getWaveBank(int); + bool registWaveBank(int, TWaveBank*); + bool registWaveBankWS(int, void*); + TWaveArc* getWaveArc(int, int); + bool loadWave(int, int, Kernel::THeap*); + bool eraseWave(int, int); + + extern int sTableSize; + extern TWaveBank** sWaveBank; + } +} + +#endif /* JASWAVEBANKMGR_H */ diff --git a/src/JSystem/JAudio/JASWaveArcLoader.cpp b/src/JSystem/JAudio/JASWaveArcLoader.cpp index c451154f2..b6e4706c4 100644 --- a/src/JSystem/JAudio/JASWaveArcLoader.cpp +++ b/src/JSystem/JAudio/JASWaveArcLoader.cpp @@ -138,7 +138,7 @@ bool JASystem::TWaveArc::sendLoadCmd() { } /* 80287FE4-802880A0 .text load__Q28JASystem8TWaveArcFPQ38JASystem6Kernel5THeap */ -void JASystem::TWaveArc::load(Kernel::THeap*) { +bool JASystem::TWaveArc::load(Kernel::THeap*) { /* Nonmatching */ } diff --git a/src/JSystem/JAudio/JASWaveBankMgr.cpp b/src/JSystem/JAudio/JASWaveBankMgr.cpp index 57dcbbd8d..a1438f222 100644 --- a/src/JSystem/JAudio/JASWaveBankMgr.cpp +++ b/src/JSystem/JAudio/JASWaveBankMgr.cpp @@ -3,41 +3,88 @@ // Translation Unit: JASWaveBankMgr.cpp // -#include "JASWaveBankMgr.h" -#include "dolphin/types.h" +#include "JSystem/JAudio/JASWaveBankMgr.h" +#include "JSystem/JAudio/JASBasicWaveBank.h" +#include "JSystem/JAudio/JASCalc.h" +#include "JSystem/JAudio/JASSimpleWaveBank.h" +#include "JSystem/JAudio/JASSystemHeap.h" +#include "JSystem/JAudio/JASWSParser.h" +#include "JSystem/JAudio/JASWaveArcLoader.h" +#include "JSystem/JAudio/JASWaveBank.h" +#include "JSystem/JKernel/JKRSolidHeap.h" +#include "JSystem/JUtility/JUTAssert.h" + +int JASystem::WaveBankMgr::sTableSize; +JASystem::TWaveBank** JASystem::WaveBankMgr::sWaveBank; /* 802882CC-8028835C .text init__Q28JASystem11WaveBankMgrFi */ -void JASystem::WaveBankMgr::init(int) { - /* Nonmatching */ +void JASystem::WaveBankMgr::init(int param_1) { + u32 size = param_1 * 4; + sWaveBank = (TWaveBank**) new (JASDram, 0) u8[size]; + JUT_ASSERT(39, sWaveBank != 0); + Calc::bzero(sWaveBank, size); + sTableSize = param_1; } /* 8028835C-80288390 .text getWaveBank__Q28JASystem11WaveBankMgrFi */ -void JASystem::WaveBankMgr::getWaveBank(int) { - /* Nonmatching */ +JASystem::TWaveBank* JASystem::WaveBankMgr::getWaveBank(int banknum) { + if (banknum < 0) { + return NULL; + } + if (banknum >= sTableSize) { + return NULL; + } + return sWaveBank[banknum]; } /* 80288390-80288444 .text registWaveBank__Q28JASystem11WaveBankMgrFiPQ28JASystem9TWaveBank */ -void JASystem::WaveBankMgr::registWaveBank(int, JASystem::TWaveBank*) { +bool JASystem::WaveBankMgr::registWaveBank(int banknum, TWaveBank* param_2) { /* Nonmatching */ + JUT_ASSERT(57, banknum >= 0); + JUT_ASSERT(58, banknum < sTableSize); + sWaveBank[banknum] = param_2; + return true; } /* 80288444-802884BC .text registWaveBankWS__Q28JASystem11WaveBankMgrFiPv */ -void JASystem::WaveBankMgr::registWaveBankWS(int, void*) { +bool JASystem::WaveBankMgr::registWaveBankWS(int param_1, void* param_2) { /* Nonmatching */ + TWaveBank* bank; + if (WSParser::getGroupCount(param_2) == 1) { + bank = WSParser::createSimpleWaveBank(param_2); + } else { + bank = WSParser::createBasicWaveBank(param_2); + } + if (!bank) { + return false; + } + return registWaveBank(param_1, bank); } /* 802884BC-8028850C .text getWaveArc__Q28JASystem11WaveBankMgrFii */ -void JASystem::WaveBankMgr::getWaveArc(int, int) { - /* Nonmatching */ +JASystem::TWaveArc* JASystem::WaveBankMgr::getWaveArc(int banknum, int param_2) { + TWaveBank* bank = getWaveBank(banknum); + if (bank == NULL) { + return NULL; + } + return bank->getWaveArc(param_2); } /* 8028850C-80288550 .text loadWave__Q28JASystem11WaveBankMgrFiiPQ38JASystem6Kernel5THeap */ -void JASystem::WaveBankMgr::loadWave(int, int, JASystem::Kernel::THeap*) { - /* Nonmatching */ +bool JASystem::WaveBankMgr::loadWave(int banknum, int param_2, Kernel::THeap* param_3) { + TWaveArc* arc = getWaveArc(banknum, param_2); + if (arc == NULL) { + return false; + } + return arc->load(param_3); } /* 80288550-80288594 .text eraseWave__Q28JASystem11WaveBankMgrFii */ -void JASystem::WaveBankMgr::eraseWave(int, int) { +bool JASystem::WaveBankMgr::eraseWave(int banknum, int param_2) { /* Nonmatching */ + TWaveArc* arc = getWaveArc(banknum, param_2); + if (arc == NULL) { + return false; + } + return arc->erase() != false; } -