diff --git a/configure.py b/configure.py index ab7ccc0a5..630a63d1f 100755 --- a/configure.py +++ b/configure.py @@ -871,7 +871,7 @@ config.libs = [ Object(Matching, "JSystem/JAudio/JASBasicBank.cpp"), Object(Matching, "JSystem/JAudio/JASBasicInst.cpp"), Object(Matching, "JSystem/JAudio/JASDrumSet.cpp"), - Object(NonMatching, "JSystem/JAudio/JASBasicWaveBank.cpp"), + Object(Matching, "JSystem/JAudio/JASBasicWaveBank.cpp"), Object(Matching, "JSystem/JAudio/JASSimpleWaveBank.cpp"), Object(Matching, "JSystem/JAudio/JASInstEffect.cpp"), Object(Matching, "JSystem/JAudio/JASInstSense.cpp"), diff --git a/include/JSystem/JAudio/JASTrack.h b/include/JSystem/JAudio/JASTrack.h index 16d43ffef..ceedcd091 100644 --- a/include/JSystem/JAudio/JASTrack.h +++ b/include/JSystem/JAudio/JASTrack.h @@ -282,7 +282,7 @@ namespace JASystem { u8 checkImport(int i) const { return mTrackPort.checkImport(i); } u8 checkExport(int i) const { return mTrackPort.checkExport(i); } void getActivity() const {} - void getRoute() const {} + int getRoute() const { return mRoute; } TSeqCtrl* getSeq() { return &mSeqCtrl; } void pauseTrackAll() { pause(true, true); } void unPauseTrackAll() { pause(false, true); } @@ -311,7 +311,7 @@ namespace JASystem { /* 0x360 */ TOuterParam* mOuterParam; /* 0x364 */ f32 field_0x364; /* 0x368 */ f32 field_0x368; - /* 0x36C */ int field_0x36c; + /* 0x36C */ int mRoute; /* 0x370 */ u32 mUpdateFlags; /* 0x374 */ u16 field_0x374; /* 0x376 */ u16 field_0x376; diff --git a/src/JSystem/JAudio/JAIBasic.cpp b/src/JSystem/JAudio/JAIBasic.cpp index 178afc07d..5994ccc13 100644 --- a/src/JSystem/JAudio/JAIBasic.cpp +++ b/src/JSystem/JAudio/JAIBasic.cpp @@ -414,12 +414,13 @@ void JAIBasic::stopAllSound(u32 soundID, void* param_2) { void JAIBasic::deleteObject(void* param_1) { /* Nonmatching */ JAInter::DummyVec* r30 = NULL; + bool r29; for (int i = 0; i < JAIGlobalParameter::getParamSeCategoryMax(); i++) { JAISound* sound = JAInter::SeMgr::seRegist[i].field_0x4; while (sound) { JAISound* nextSound = sound->field_0x34; if (sound->field_0x24 == param_1) { - bool r29 = false; + r29 = false; if (sound->checkSwBit(0x8000)) { r29 = true; if (!r30) { @@ -445,12 +446,18 @@ void JAIBasic::deleteObject(void* param_1) { /* 80290D94-80290DA0 .text getMapInfoFxline__8JAIBasicFUl */ BOOL JAIBasic::getMapInfoFxline(u32 param_1) { - return param_1 ? TRUE : FALSE; + if (param_1 != 0) { + return TRUE; + } + return FALSE; } /* 80290DA0-80290DAC .text getMapInfoGround__8JAIBasicFUl */ BOOL JAIBasic::getMapInfoGround(u32 param_1) { - return param_1 ? TRUE : FALSE; + if (param_1 != 0) { + return TRUE; + } + return FALSE; } /* 80290DAC-80290DC4 .text getMapInfoFxParameter__8JAIBasicFUl */ @@ -481,9 +488,9 @@ void JAIBasic::setSeCategoryVolume(u8 param_1, u8 param_2) { } /* 80290E50-80291034 .text setParameterSeqSync__8JAIBasicFPQ28JASystem6TTrackUs */ -u16 JAIBasic::setParameterSeqSync(JASystem::TTrack* param_1, u16 param_2) { - /* Nonmatching */ - u16 r30 = 0; +u16 JAIBasic::setParameterSeqSync(JASystem::TTrack* track, u16 param_2) { + /* Nonmatching - regalloc */ + u16 result = 0; switch (param_2) { case 0: for (int i = 0; i < JAIGlobalParameter::seqPlayTrackMax; i++) { @@ -491,33 +498,33 @@ u16 JAIBasic::setParameterSeqSync(JASystem::TTrack* param_1, u16 param_2) { continue; } JAInter::SeqParameter* seqParam = JAInter::SequenceMgr::getPlayTrackInfo(i)->mSequence->getSeqParameter(); - JASystem::TTrack* track = &seqParam->mTrack; - if (track == (JAInter::SequenceMgr::getPlayTrackInfo(i)->mSequence->getID() & 0x800 ? param_1->mParent->mParent : param_1->mParent)) { - u32 r28 = JAInter::routeToTrack(param_1->field_0x36c); - r30 = JAInter::SoundTable::getInfoPointer(JAInter::SequenceMgr::getPlayTrackInfo(i)->mSequence->getID())->mFlag >> 8; - JAInter::SystemInterface::outerInit(JAInter::SequenceMgr::getPlayTrackInfo(i), param_1, r28, r30, param_2 & 1); - JAInter::SequenceMgr::getPlayTrackInfo(i)->field_0x4 |= 1 << r28; - r30 = 0; + JASystem::TTrack* seqTrack = seqParam->getRootTrackPointer(); + if (seqTrack == (JAInter::SequenceMgr::getPlayTrackInfo(i)->mSequence->getID() & 0x800 ? track->getParent()->getParent() : track->getParent())) { + u32 trackNo = JAInter::routeToTrack(track->getRoute()); + u16 paramFlags = (JAInter::SoundTable::getInfoPointer(JAInter::SequenceMgr::getPlayTrackInfo(i)->mSequence->getID())->mFlag >> 8) & 0xFFFF; + JAInter::SystemInterface::outerInit(JAInter::SequenceMgr::getPlayTrackInfo(i), track, trackNo, paramFlags, param_2 & 1); + JAInter::SequenceMgr::getPlayTrackInfo(i)->field_0x4 |= 1 << trackNo; + result = 0; i = JAIGlobalParameter::seqPlayTrackMax; } } break; case 1: { - u8 tmp = param_1->field_0x36c; - JAInter::SeMgr::seTrackUpdate_s* r31 = JAInter::SeMgr::seTrackUpdate; - JASystem::TTrack::TOuterParam* r28 = param_1->mOuterParam; - r28->setParam(OUTERPARAM_Volume, r31[tmp].mPlayingVolume); - r28->setParam(OUTERPARAM_Pan, r31[tmp].mPlayingPan); - r28->setParam(OUTERPARAM_Pitch, r31[tmp].mPlayingPitch); - r28->setParam(OUTERPARAM_Fxmix, r31[tmp].mPlayingFxmix); - r28->setParam(OUTERPARAM_Dolby, msBasic->field_0xd != 2 ? 0.0f : r31[tmp].mPlayingDolby); + u8 route = track->getRoute(); + JAInter::SeMgr::seTrackUpdate_s* trackData = JAInter::SeMgr::seTrackUpdate; + JASystem::TTrack::TOuterParam* outerParam = track->getOuterParam(); + outerParam->setParam(OUTERPARAM_Volume, trackData[route].mPlayingVolume); + outerParam->setParam(OUTERPARAM_Pan, trackData[route].mPlayingPan); + outerParam->setParam(OUTERPARAM_Pitch, trackData[route].mPlayingPitch); + outerParam->setParam(OUTERPARAM_Fxmix, trackData[route].mPlayingFxmix); + outerParam->setParam(OUTERPARAM_Dolby, msBasic->field_0xd != 2 ? 0.0f : trackData[route].mPlayingDolby); break; } case 127: - param_1->writePortApp(0, JAInter::SeMgr::seScene); + track->writePortApp(0, JAInter::SeMgr::seScene); break; } - return r30; + return result; } /* 80291034-80291114 .text setSeExtParameter__8JAIBasicFP8JAISound */ diff --git a/src/JSystem/JAudio/JAIConst.cpp b/src/JSystem/JAudio/JAIConst.cpp index 9b131354f..cdcf5a677 100644 --- a/src/JSystem/JAudio/JAIConst.cpp +++ b/src/JSystem/JAudio/JAIConst.cpp @@ -58,10 +58,10 @@ void JAInter::deleteTmpDVDFile(u8** tmpPointer) { } /* 802918FC-8029193C .text routeToTrack__7JAInterFUl */ -u32 JAInter::routeToTrack(u32 param_1) { +u32 JAInter::routeToTrack(u32 route) { u32 r4; u32 r5 = 0; - r4 = param_1 & 0xF0000000; + r4 = route & 0xF0000000; if (r4 == 0) { return 0; } @@ -70,5 +70,5 @@ u32 JAInter::routeToTrack(u32 param_1) { } else if (r4 == 0x20000000) { r5 = 0xFF; } - return param_1 & r5; + return route & r5; } diff --git a/src/JSystem/JAudio/JASBasicWaveBank.cpp b/src/JSystem/JAudio/JASBasicWaveBank.cpp index c4a713255..9c8d0c5ce 100644 --- a/src/JSystem/JAudio/JASBasicWaveBank.cpp +++ b/src/JSystem/JAudio/JASBasicWaveBank.cpp @@ -78,23 +78,21 @@ void JASystem::TBasicWaveBank::incWaveTable(const TWaveGroup* waveGroup) { /* 80285D54-80285E28 .text decWaveTable__Q28JASystem14TBasicWaveBankFPCQ38JASystem14TBasicWaveBank10TWaveGroup */ void JASystem::TBasicWaveBank::decWaveTable(const TWaveGroup* waveGroup) { - /* Nonmatching */ OSLockMutex(&mMutex); for (int i = 0; i < waveGroup->getWaveCount(); i++) { - u32 waveID = waveGroup->getWaveID(i); - TWaveInfo* waveInfo = mWaveTable[waveID]; - TWaveInfo* waveInfo2 = &waveGroup->mCtrlWaveArray[i]; - for (; waveInfo; waveInfo = waveInfo->mPrev) { - if (waveInfo != waveInfo2) { + TWaveInfo** waveTable = &mWaveTable[waveGroup->getWaveID(i)]; + TWaveInfo* waveInfo = &waveGroup->mCtrlWaveArray[i]; + for (TWaveInfo* it = *waveTable; it; it = it->mPrev) { + if (it != waveInfo) { continue; } - if (!waveInfo->mNext) { - mWaveTable[waveID] = waveInfo->mPrev; + if (!it->mNext) { + *waveTable = it->mPrev; } else { - waveInfo->mNext->mPrev = waveInfo->mPrev; + it->mNext->mPrev = it->mPrev; } - if (waveInfo->mPrev) { - waveInfo->mPrev->mNext = waveInfo->mNext; + if (it->mPrev) { + it->mPrev->mNext = it->mNext; } break; } diff --git a/src/JSystem/JAudio/JASSeqParser.cpp b/src/JSystem/JAudio/JASSeqParser.cpp index 273dcc5e0..17e41d75b 100644 --- a/src/JSystem/JAudio/JASSeqParser.cpp +++ b/src/JSystem/JAudio/JASSeqParser.cpp @@ -685,7 +685,7 @@ int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) { if (byteArray[i] == 2) { registers[i] = (int)track->getSeq()->getAddr(registers[i]); } else if (byteArray[i] == 5) { - registers[i] = track->field_0x36c; + registers[i] = track->mRoute; } else if (byteArray[i] >= 3) { registers[i] = track->exchangeRegisterValue(registers[i]); } diff --git a/src/JSystem/JAudio/JASTrack.cpp b/src/JSystem/JAudio/JASTrack.cpp index 15274896d..db97857e5 100644 --- a/src/JSystem/JAudio/JASTrack.cpp +++ b/src/JSystem/JAudio/JASTrack.cpp @@ -23,7 +23,7 @@ JASystem::TTrack::TTrack() { mParent = NULL; field_0x364 = 0.0f; field_0x368 = 0.0f; - field_0x36c = 0; + mRoute = 0; mUpdateFlags = 0; field_0x374 = 0; field_0x376 = 0x78; @@ -70,7 +70,7 @@ void JASystem::TTrack::init() { } field_0x364 = 0.0f; field_0x368 = 1.0f; - field_0x36c = 0; + mRoute = 0; mVibrate.init(); mUpdateFlags = 0; field_0x374 = 0; @@ -972,13 +972,13 @@ JASystem::TTrack* JASystem::TTrack::openChild(u8 trk_no, u8 param_2) { new_track->mParent = this; new_track->field_0x37b = param_2; - u32 top_nibble = field_0x36c & 0xf0000000; + u32 top_nibble = mRoute & 0xf0000000; if (top_nibble >= 0x70000000) { // "JASTrack:openTrack: The hierarchy exceeds 8 levels and an invalid track ID is generated.\n" OSReport("JASTrack:openTrack: 階層が8段階を超えてしまい、不正なトラックIDが生成されました\n"); } - new_track->field_0x36c = (top_nibble + 0x10000000) | - (((field_0x36c) << 4 | ((u32) trk_no)) & 0x0FFFFFFF); + new_track->mRoute = (top_nibble + 0x10000000) | + (((mRoute) << 4 | ((u32) trk_no)) & 0x0FFFFFFF); mChildren[(int)trk_no] = new_track; new_track->inherit(); return new_track;