Removed audio table files to allow multiversion support

This commit is contained in:
KiritoDv
2023-10-09 22:47:18 -06:00
parent 01270a0bd0
commit 8d924c58f2
12 changed files with 66 additions and 989 deletions
-129
View File
@@ -1,129 +0,0 @@
#pragma once
#include "align_asset_macro.h"
#define dgBank00 "__OTR__sound/banks/00_bank"
static const ALIGN_ASSET(2) char gBank00[] = dgBank00;
#define dgBank01 "__OTR__sound/banks/01_bank"
static const ALIGN_ASSET(2) char gBank01[] = dgBank01;
#define dgBank02 "__OTR__sound/banks/02_bank"
static const ALIGN_ASSET(2) char gBank02[] = dgBank02;
#define dgBank03 "__OTR__sound/banks/03_bank"
static const ALIGN_ASSET(2) char gBank03[] = dgBank03;
#define dgBank04 "__OTR__sound/banks/04_bank"
static const ALIGN_ASSET(2) char gBank04[] = dgBank04;
#define dgBank05 "__OTR__sound/banks/05_bank"
static const ALIGN_ASSET(2) char gBank05[] = dgBank05;
#define dgBank06 "__OTR__sound/banks/06_bank"
static const ALIGN_ASSET(2) char gBank06[] = dgBank06;
#define dgBank07 "__OTR__sound/banks/07_bank"
static const ALIGN_ASSET(2) char gBank07[] = dgBank07;
#define dgBank08 "__OTR__sound/banks/08_bank"
static const ALIGN_ASSET(2) char gBank08[] = dgBank08;
#define dgBank09 "__OTR__sound/banks/09_bank"
static const ALIGN_ASSET(2) char gBank09[] = dgBank09;
#define dgBank0A "__OTR__sound/banks/0A_bank"
static const ALIGN_ASSET(2) char gBank0A[] = dgBank0A;
#define dgBank0B "__OTR__sound/banks/0B_bank"
static const ALIGN_ASSET(2) char gBank0B[] = dgBank0B;
#define dgBank0C "__OTR__sound/banks/0C_bank"
static const ALIGN_ASSET(2) char gBank0C[] = dgBank0C;
#define dgBank0D "__OTR__sound/banks/0D_bank"
static const ALIGN_ASSET(2) char gBank0D[] = dgBank0D;
#define dgBank0E "__OTR__sound/banks/0E_bank"
static const ALIGN_ASSET(2) char gBank0E[] = dgBank0E;
#define dgBank0F "__OTR__sound/banks/0F_bank"
static const ALIGN_ASSET(2) char gBank0F[] = dgBank0F;
#define dgBank10 "__OTR__sound/banks/10_bank"
static const ALIGN_ASSET(2) char gBank10[] = dgBank10;
#define dgBank11 "__OTR__sound/banks/11_bank"
static const ALIGN_ASSET(2) char gBank11[] = dgBank11;
#define dgBank12 "__OTR__sound/banks/12_bank"
static const ALIGN_ASSET(2) char gBank12[] = dgBank12;
#define dgBank13 "__OTR__sound/banks/13_bank"
static const ALIGN_ASSET(2) char gBank13[] = dgBank13;
#define dgBank14 "__OTR__sound/banks/14_bank"
static const ALIGN_ASSET(2) char gBank14[] = dgBank14;
#define dgBank15 "__OTR__sound/banks/15_bank"
static const ALIGN_ASSET(2) char gBank15[] = dgBank15;
#define dgBank16 "__OTR__sound/banks/16_bank"
static const ALIGN_ASSET(2) char gBank16[] = dgBank16;
#define dgBank17 "__OTR__sound/banks/17_bank"
static const ALIGN_ASSET(2) char gBank17[] = dgBank17;
#define dgBank18 "__OTR__sound/banks/18_bank"
static const ALIGN_ASSET(2) char gBank18[] = dgBank18;
#define dgBank19 "__OTR__sound/banks/19_bank"
static const ALIGN_ASSET(2) char gBank19[] = dgBank19;
#define dgBank1A "__OTR__sound/banks/1A_bank"
static const ALIGN_ASSET(2) char gBank1A[] = dgBank1A;
#define dgBank1B "__OTR__sound/banks/1B_bank"
static const ALIGN_ASSET(2) char gBank1B[] = dgBank1B;
#define dgBank1C "__OTR__sound/banks/1C_bank"
static const ALIGN_ASSET(2) char gBank1C[] = dgBank1C;
#define dgBank1D "__OTR__sound/banks/1D_bank"
static const ALIGN_ASSET(2) char gBank1D[] = dgBank1D;
#define dgBank1E "__OTR__sound/banks/1E_bank"
static const ALIGN_ASSET(2) char gBank1E[] = dgBank1E;
#define dgBank1F "__OTR__sound/banks/1F_bank"
static const ALIGN_ASSET(2) char gBank1F[] = dgBank1F;
#define dgBank20 "__OTR__sound/banks/20_bank"
static const ALIGN_ASSET(2) char gBank20[] = dgBank20;
#define dgBank21 "__OTR__sound/banks/21_bank"
static const ALIGN_ASSET(2) char gBank21[] = dgBank21;
#define dgBank22 "__OTR__sound/banks/22_bank"
static const ALIGN_ASSET(2) char gBank22[] = dgBank22;
#define dgBank23 "__OTR__sound/banks/23_bank"
static const ALIGN_ASSET(2) char gBank23[] = dgBank23;
#define dgBank24 "__OTR__sound/banks/24_bank"
static const ALIGN_ASSET(2) char gBank24[] = dgBank24;
#define dgBank25 "__OTR__sound/banks/25_bank"
static const ALIGN_ASSET(2) char gBank25[] = dgBank25;
static const char* gBankTable[] = {
gBank00, gBank01, gBank02, gBank03,
gBank04, gBank05, gBank06, gBank07,
gBank08, gBank09, gBank0A, gBank0B,
gBank0C, gBank0D, gBank0E, gBank0F,
gBank10, gBank11, gBank12, gBank13,
gBank14, gBank15, gBank16, gBank17,
gBank18, gBank19, gBank1A, gBank1B,
gBank1C, gBank1D, gBank1E, gBank1F,
gBank20, gBank21, gBank22, gBank23,
gBank24, gBank25,
};
File diff suppressed because it is too large Load Diff
-119
View File
@@ -1,119 +0,0 @@
#pragma once
#include "align_asset_macro.h"
#define dgSequence00 "__OTR__sound/sequences/00_sound_player"
static const ALIGN_ASSET(2) char gSequence00[] = dgSequence00;
#define dgSequence01 "__OTR__sound/sequences/01_cutscene_collect_star"
static const ALIGN_ASSET(2) char gSequence01[] = dgSequence01;
#define dgSequence02 "__OTR__sound/sequences/02_menu_title_screen"
static const ALIGN_ASSET(2) char gSequence02[] = dgSequence02;
#define dgSequence03 "__OTR__sound/sequences/03_level_grass"
static const ALIGN_ASSET(2) char gSequence03[] = dgSequence03;
#define dgSequence04 "__OTR__sound/sequences/04_level_inside_castle"
static const ALIGN_ASSET(2) char gSequence04[] = dgSequence04;
#define dgSequence05 "__OTR__sound/sequences/05_level_water"
static const ALIGN_ASSET(2) char gSequence05[] = dgSequence05;
#define dgSequence06 "__OTR__sound/sequences/06_level_hot"
static const ALIGN_ASSET(2) char gSequence06[] = dgSequence06;
#define dgSequence07 "__OTR__sound/sequences/07_level_boss_koopa"
static const ALIGN_ASSET(2) char gSequence07[] = dgSequence07;
#define dgSequence08 "__OTR__sound/sequences/08_level_snow"
static const ALIGN_ASSET(2) char gSequence08[] = dgSequence08;
#define dgSequence09 "__OTR__sound/sequences/09_level_slide"
static const ALIGN_ASSET(2) char gSequence09[] = dgSequence09;
#define dgSequence0A "__OTR__sound/sequences/0A_level_spooky"
static const ALIGN_ASSET(2) char gSequence0A[] = dgSequence0A;
#define dgSequence0B "__OTR__sound/sequences/0B_event_piranha_plant"
static const ALIGN_ASSET(2) char gSequence0B[] = dgSequence0B;
#define dgSequence0C "__OTR__sound/sequences/0C_level_underground"
static const ALIGN_ASSET(2) char gSequence0C[] = dgSequence0C;
#define dgSequence0D "__OTR__sound/sequences/0D_menu_star_select"
static const ALIGN_ASSET(2) char gSequence0D[] = dgSequence0D;
#define dgSequence0E "__OTR__sound/sequences/0E_event_powerup"
static const ALIGN_ASSET(2) char gSequence0E[] = dgSequence0E;
#define dgSequence0F "__OTR__sound/sequences/0F_event_metal_cap"
static const ALIGN_ASSET(2) char gSequence0F[] = dgSequence0F;
#define dgSequence10 "__OTR__sound/sequences/10_event_koopa_message"
static const ALIGN_ASSET(2) char gSequence10[] = dgSequence10;
#define dgSequence11 "__OTR__sound/sequences/11_level_koopa_road"
static const ALIGN_ASSET(2) char gSequence11[] = dgSequence11;
#define dgSequence12 "__OTR__sound/sequences/12_event_high_score"
static const ALIGN_ASSET(2) char gSequence12[] = dgSequence12;
#define dgSequence13 "__OTR__sound/sequences/13_event_merry_go_round"
static const ALIGN_ASSET(2) char gSequence13[] = dgSequence13;
#define dgSequence14 "__OTR__sound/sequences/14_event_race"
static const ALIGN_ASSET(2) char gSequence14[] = dgSequence14;
#define dgSequence15 "__OTR__sound/sequences/15_cutscene_star_spawn"
static const ALIGN_ASSET(2) char gSequence15[] = dgSequence15;
#define dgSequence16 "__OTR__sound/sequences/16_event_boss"
static const ALIGN_ASSET(2) char gSequence16[] = dgSequence16;
#define dgSequence17 "__OTR__sound/sequences/17_cutscene_collect_key"
static const ALIGN_ASSET(2) char gSequence17[] = dgSequence17;
#define dgSequence18 "__OTR__sound/sequences/18_event_endless_stairs"
static const ALIGN_ASSET(2) char gSequence18[] = dgSequence18;
#define dgSequence19 "__OTR__sound/sequences/19_level_boss_koopa_final"
static const ALIGN_ASSET(2) char gSequence19[] = dgSequence19;
#define dgSequence1A "__OTR__sound/sequences/1A_cutscene_credits"
static const ALIGN_ASSET(2) char gSequence1A[] = dgSequence1A;
#define dgSequence1B "__OTR__sound/sequences/1B_event_solve_puzzle"
static const ALIGN_ASSET(2) char gSequence1B[] = dgSequence1B;
#define dgSequence1C "__OTR__sound/sequences/1C_event_toad_message"
static const ALIGN_ASSET(2) char gSequence1C[] = dgSequence1C;
#define dgSequence1D "__OTR__sound/sequences/1D_event_peach_message"
static const ALIGN_ASSET(2) char gSequence1D[] = dgSequence1D;
#define dgSequence1E "__OTR__sound/sequences/1E_cutscene_intro"
static const ALIGN_ASSET(2) char gSequence1E[] = dgSequence1E;
#define dgSequence1F "__OTR__sound/sequences/1F_cutscene_victory"
static const ALIGN_ASSET(2) char gSequence1F[] = dgSequence1F;
#define dgSequence20 "__OTR__sound/sequences/20_cutscene_ending"
static const ALIGN_ASSET(2) char gSequence20[] = dgSequence20;
#define dgSequence21 "__OTR__sound/sequences/21_menu_file_select"
static const ALIGN_ASSET(2) char gSequence21[] = dgSequence21;
#define dgSequence22 "__OTR__sound/sequences/22_cutscene_lakitu"
static const ALIGN_ASSET(2) char gSequence22[] = dgSequence22;
static const char* gSequenceTable[] = {
gSequence00, gSequence01, gSequence02, gSequence03,
gSequence04, gSequence05, gSequence06, gSequence07,
gSequence08, gSequence09, gSequence0A, gSequence0B,
gSequence0C, gSequence0D, gSequence0E, gSequence0F,
gSequence10, gSequence11, gSequence12, gSequence13,
gSequence14, gSequence15, gSequence16, gSequence17,
gSequence18, gSequence19, gSequence1A, gSequence1B,
gSequence1C, gSequence1D, gSequence1E, gSequence1F,
gSequence20, gSequence21, gSequence22,
};
+2 -1
View File
@@ -222,7 +222,7 @@ struct AudioBank {
struct CtlEntry {
#ifndef VERSION_SH
u8 unused;
u8 bankId;
#endif
u8 numInstruments;
u8 numDrums;
@@ -238,6 +238,7 @@ struct AudioSequenceData {
u32 bankCount;
u8* banks;
u8* data;
u8 id;
};
struct M64ScriptState {
+2 -3
View File
@@ -8,7 +8,6 @@
#include "load.h"
#include "seqplayer.h"
#include "sound/sound_data.h"
#include "sequences_table.h"
#include <string.h>
#include <stdlib.h>
@@ -393,7 +392,7 @@ uint8_t* load_sequence_immediate(s32 seqId, s32 arg1) {
struct CtlEntry* load_banks_immediate(s32 seqId, u8 *outDefaultBank) {
u32 bankId;
struct AudioSequenceData *seqData = ResourceGetDataByName(gSequenceTable[seqId]);
struct AudioSequenceData *seqData = GameEngine_LoadSequence(seqId);
struct CtlEntry *output;
for(size_t i = 0; i < seqData->bankCount; i++) {
output = GameEngine_LoadBank(bankId = seqData->banks[i]);
@@ -538,7 +537,7 @@ void audio_init() {
#endif
// Load headers for sounds and sequences
gSequenceCount = sizeof(gSequenceTable) / sizeof(gSequenceTable[0]);
gSequenceCount = GameEngine_GetSequenceCount();
init_sequence_players();
gAudioLoadLock = AUDIO_LOCK_NOT_LOADING;
+1 -2
View File
@@ -954,7 +954,6 @@ u8 audioString107[] = "Error: Your assignchannel is stolen.\n";
#else
// US/JP version with macros to simulate inlining by copt. Edit if you dare.
#include "copt/seq_channel_layer_process_script_copt.inc.c"
#include "sequences_table.h"
#endif
@@ -1784,7 +1783,7 @@ void sequence_channel_process_script(struct SequenceChannel *seqChannel) {
loBits = *(sp38 + gAlBankSets);
cmd = gAlBankSets[(s32)sp38 + loBits - cmd];
#else
struct AudioSequenceData *sequence = ResourceGetDataByName(gSequenceTable[seqPlayer->seqId]);
struct AudioSequenceData *sequence = GameEngine_LoadSequence(seqPlayer->seqId);
cmd = sequence->banks[cmd];
#endif
#ifdef VERSION_SH
+46 -12
View File
@@ -4,8 +4,6 @@
#include "port/importer/AudioBankFactory.h"
#include "port/importer/AudioSampleFactory.h"
#include "port/importer/AudioSequenceFactory.h"
#include "banks_table.h"
#include "sequences_table.h"
#include "audio/GameAudio.h"
#include "ZAPDUtils/Utils/StringHelper.h"
#include "texts_table.h"
@@ -53,13 +51,13 @@ GameEngine::GameEngine(){
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Sequence, "Sequence", std::make_shared<CubeOS::AudioSequenceFactory>());
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::SDialog, "Dialog", std::make_shared<CubeOS::DialogFactory>());
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Dictionary, "Dictionary", std::make_shared<CubeOS::DictionaryFactory>());
GameEngine::AudioInit();
this->LoadDictionary();
}
void GameEngine::Create(){
GameEngine::Instance = new GameEngine();
auto instance = GameEngine::Instance = new GameEngine();
GameUI::SetupGuiElements();
instance->AudioInit();
instance->LoadDictionary();
}
void GameEngine::Destroy(){
@@ -160,7 +158,23 @@ void GameEngine::EndAudioFrame(){
}
void GameEngine::AudioInit() {
LUS::Context::GetInstance()->GetResourceManager()->LoadDirectory("sound");
auto resourceMgr = LUS::Context::GetInstance()->GetResourceManager();
resourceMgr->LoadDirectory("sound");
auto banksFiles = resourceMgr->GetArchive()->ListFiles("sound/banks/*");
for(auto& bank : *banksFiles){
auto path = "__OTR__" + bank;
auto ctl = static_cast<CtlEntry *>(ResourceGetDataByName(path.c_str()));
this->bankMapTable[bank] = ctl->bankId;
}
auto sequencesFiles = resourceMgr->GetArchive()->ListFiles("sound/sequences/*");
for(auto& sequence : *sequencesFiles){
auto path = "__OTR__" + sequence;
auto seq = static_cast<AudioSequenceData *>(ResourceGetDataByName(path.c_str()));
this->sequencesMapTable[seq->id] = path;
}
if (!audio.running) {
audio.running = true;
@@ -183,6 +197,14 @@ void GameEngine::LoadDictionary() {
this->dictionary = static_cast<std::unordered_map<std::string, std::vector<uint8_t>> *>(ResourceGetDataByName("__OTR__texts/strings/global"));
}
uint8_t GameEngine::GetBankIdByName(const std::string& name) {
auto engine = GameEngine::Instance;
if(engine->bankMapTable.contains(name)){
return engine->bankMapTable[name];
}
return 0;
}
extern "C" uint32_t GameEngine_GetInterpolatedFPS() {
return GameEngine::GetInterpolationFPS();
}
@@ -212,15 +234,20 @@ extern "C" float GameEngine_GetAspectRatio() {
extern "C" CtlEntry* GameEngine_LoadBank(uint8_t bankId) {
auto engine = GameEngine::Instance;
if(bankId > (sizeof(gBankTable) / sizeof(gBankTable[0])) - 1){
if(bankId >= engine->bankMapTable.size()){
return nullptr;
}
if(engine->banks.contains(bankId)){
return engine->banks[bankId];
}
auto ctl = static_cast<CtlEntry *>(ResourceGetDataByName(gBankTable[bankId]));
engine->banks[bankId] = ctl;
return ctl;
for(auto& bank : engine->bankMapTable){
if(bank.second == bankId){
auto ctl = static_cast<CtlEntry *>(ResourceGetDataByName(("__OTR__" + bank.first).c_str()));
engine->banks[bankId] = ctl;
return ctl;
}
}
return nullptr;
}
extern "C" uint8_t GameEngine_IsBankLoaded(uint8_t bankId) {
@@ -238,17 +265,24 @@ extern "C" void GameEngine_UnloadBank(uint8_t bankId) {
extern "C" AudioSequenceData* GameEngine_LoadSequence(uint8_t seqId) {
auto engine = GameEngine::Instance;
if(seqId > (sizeof(gSequenceTable) / sizeof(gSequenceTable[0])) - 1){
if(!engine->sequencesMapTable.contains(seqId)){
return nullptr;
}
if(engine->sequences.contains(seqId)){
return engine->sequences[seqId];
}
auto sequences = static_cast<AudioSequenceData *>(ResourceGetDataByName(gSequenceTable[seqId]));
auto sequences = static_cast<AudioSequenceData *>(ResourceGetDataByName(engine->sequencesMapTable[seqId].c_str()));
engine->sequences[seqId] = sequences;
return sequences;
}
extern "C" uint32_t GameEngine_GetSequenceCount(){
auto engine = GameEngine::Instance;
return engine->sequencesMapTable.size();
}
extern "C" uint8_t GameEngine_IsSequenceLoaded(uint8_t seqId) {
auto engine = GameEngine::Instance;
GameEngine_LoadSequence(seqId);
+5 -2
View File
@@ -22,10 +22,13 @@ class GameEngine {
std::shared_ptr<LUS::Context> context;
std::unordered_map<uint8_t, CtlEntry*> banks;
std::unordered_map<uint8_t, AudioSequenceData*> sequences;
std::unordered_map<std::string, uint8_t> bankMapTable;
std::unordered_map<uint8_t, std::string> sequencesMapTable;
std::unordered_map<std::string, std::vector<uint8_t>>* dictionary;
GameEngine();
static void Create();
void AudioInit();
void StartFrame() const;
static void RunCommands(Gfx* Commands);
void ProcessFrame(void (*run_one_game_iter)()) const;
@@ -33,14 +36,13 @@ class GameEngine {
static void HandleAudioThread();
static void StartAudioFrame();
static void EndAudioFrame();
static void AudioInit();
static void AudioExit();
static uint8_t GetBankIdByName(const std::string& name);
void LoadDictionary();
void Destroy();
};
#else
uint32_t GameEngine_GetInterpolatedFPS();
uint32_t GameEngine_GetSampleRate();
uint32_t GameEngine_GetSamplesPerFrame();
@@ -49,6 +51,7 @@ struct CtlEntry* GameEngine_LoadBank(uint8_t bankId);
uint8_t GameEngine_IsBankLoaded(uint8_t bankId);
void GameEngine_UnloadBank(uint8_t bankId);
struct AudioSequenceData* GameEngine_LoadSequence(uint8_t seqId);
uint32_t GameEngine_GetSequenceCount();
uint8_t GameEngine_IsSequenceLoaded(uint8_t seqId);
void GameEngine_UnloadSequence(uint8_t seqId);
uint32_t GameEngine_GetGameVersion();
+2 -2
View File
@@ -30,11 +30,11 @@ void CubeOS::AudioBankFactoryV0::ParseFileBinary(std::shared_ptr<LUS::BinaryRead
ResourceVersionFactory::ParseFileBinary(reader, bank);
uint8_t bankId = reader->ReadUInt32();
uint32_t instrumentCount = reader->ReadUInt32();
for(size_t i = 0; i < instrumentCount; i++){
auto* instrument = new Instrument();
// memset(instrument, 0, sizeof(Instrument));
bool valid = reader->ReadUByte();
if(!valid){
bank->instruments.push_back(nullptr);
@@ -104,7 +104,7 @@ void CubeOS::AudioBankFactoryV0::ParseFileBinary(std::shared_ptr<LUS::BinaryRead
bank->drums.push_back(drum);
}
bank->mData.unused = 1;
bank->mData.bankId = bankId;
bank->mData.numInstruments = instrumentCount;
bank->mData.numDrums = drumCount;
bank->mData.instruments = bank->instruments.data();
+6 -1
View File
@@ -1,6 +1,8 @@
#include "AudioSequenceFactory.h"
#include "port/importer/types/AudioSequence.h"
#include "spdlog/spdlog.h"
#include "port/Engine.h"
#include "port/importer/types/AudioBank.h"
std::shared_ptr<LUS::IResource> CubeOS::AudioSequenceFactory::ReadResource(std::shared_ptr<LUS::ResourceInitData> initData, std::shared_ptr<LUS::BinaryReader> reader) {
auto resource = std::make_shared<AudioSequence>(initData);
@@ -27,9 +29,11 @@ void CubeOS::AudioSequenceFactoryV0::ParseFileBinary(std::shared_ptr<LUS::Binary
ResourceVersionFactory::ParseFileBinary(reader, bank);
uint8_t id = reader->ReadUInt32();
size_t bankCount = reader->ReadUInt32();
for(size_t i = 0; i < bankCount; i++){
bank->banks.push_back(reader->ReadUByte());
std::string bankName = reader->ReadString();
bank->banks.push_back(GameEngine::GetBankIdByName(bankName));
}
size_t sampleSize = reader->ReadUInt32();
@@ -40,4 +44,5 @@ void CubeOS::AudioSequenceFactoryV0::ParseFileBinary(std::shared_ptr<LUS::Binary
bank->mData.bankCount = bankCount;
bank->mData.banks = bank->banks.data();
bank->mData.data = bank->sampleData.data();
bank->mData.id = id;
}
+1 -1
View File
@@ -34,7 +34,7 @@ struct Drum {
};
struct CtlEntry {
uint8_t unused;
uint8_t bankId;
uint8_t numInstruments;
uint8_t numDrums;
struct Instrument **instruments;
+1
View File
@@ -7,6 +7,7 @@ struct AudioSequenceData {
uint32_t bankCount;
uint8_t* banks;
uint8_t* data;
uint8_t id;
};
namespace CubeOS {