various Z2Audio / JAudio debug cleanup (#2876)

* some JAudio work

* audio cleanup checkpoint

* checkpoint more audio cleanup

* fix symbols

* more z2 cleanup

* fix regression

* fix build

* some fixes
This commit is contained in:
TakaRikka
2025-11-27 21:19:33 -08:00
committed by GitHub
parent 767caeecc3
commit 6f96e66518
113 changed files with 6425 additions and 5542 deletions
+8 -1
View File
@@ -1,5 +1,12 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAIAudience.h"
#include "JSystem/JAudio2/JAISeMgr.h"
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAIStreamMgr.h"
JAIAudience::~JAIAudience() {}
JAIAudience::~JAIAudience() {
JUT_ASSERT(14, ! JAISeMgr::getInstance() || ( JAISeMgr::getInstance() ->getAudience() != this ));
JUT_ASSERT(15, ! JAISeqMgr::getInstance() || ( JAISeqMgr::getInstance() ->getAudience() != this ));
JUT_ASSERT(16, ! JAIStreamMgr::getInstance() || ( JAIStreamMgr::getInstance() ->getAudience() != this ));
}
+53 -41
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAISe
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISe.h"
@@ -11,56 +6,62 @@
/* 8029F03C-8029F0F8 29997C 00BC+00 0/0 1/1 0/0 .text
* __ct__5JAISeFP8JAISeMgrP27JAISoundStrategyMgr<5JAISe>Ul */
JAISe::JAISe(JAISeMgr* param_0, JAISoundStrategyMgr<JAISe>* param_1, u32 param_2) : JSULink<JAISe>(this) {
inner_.mSoundStrategyMgr = param_1;
inner_.seMgr = param_0;
inner_.mProperPriority = param_2;
JAISe::JAISe(JAISeMgr* seMgr, JAISoundStrategyMgr<JAISe>* soundStrategyMgr, u32 priority) : JSULink<JAISe>(this) {
inner_.mSoundStrategyMgr = soundStrategyMgr;
inner_.seMgr = seMgr;
inner_.mProperPriority = priority;
}
/* 8029F0F8-8029F214 299A38 011C+00 1/1 0/0 0/0 .text mixOut___5JAISeFRC14JASSoundParams
*/
void JAISe::mixOut_(JASSoundParams const& param_0) {
void JAISe::mixOut_(const JASSoundParams& params) {
inner_.track.setTempoRate(inner_.mTempoMgr.getTempo());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
JASSoundParams mixParams;
params_.mixOutAll(params, &mixParams, fader_.getIntensity());
if (inner_.field_0x278) {
inner_.field_0x278->virtual4(this, stackParams);
inner_.field_0x278->virtual4(this, mixParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
audience_->mixChannelOut(mixParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
inner_.mSoundParams = mixParams;
}
}
/* 8029F214-8029F250 299B54 003C+00 1/1 0/0 0/0 .text stopTrack___5JAISeFv */
void JAISe::stopTrack_() {
switch (inner_.track.getStatus()) {
case 0:
case JASTrack::STATUS_FREE:
break;
case 1:
case JASTrack::STATUS_RUN:
inner_.track.stopSeq();
break;
case 2:
case JASTrack::STATUS_STOP:
break;
}
}
/* 8029F250-8029F304 299B90 00B4+00 1/1 0/0 0/0 .text startTrack___5JAISeFRC14JASSoundParams */
void JAISe::startTrack_(JASSoundParams const& param_0) {
if (inner_.track.getStatus() == 2) {
void JAISe::startTrack_(const JASSoundParams& params) {
JUT_ASSERT(72, inner_.track.getStatus() != JASTrack::STATUS_RUN);
if (inner_.track.getStatus() == JASTrack::STATUS_STOP) {
inner_.track.init();
}
if (audible_) {
initTrack_JAISound_(&inner_.track);
} else {
params.mixOutAll(param_0, &inner_.mSoundParams, fader.getIntensity());
params_.mixOutAll(params, &inner_.mSoundParams, fader_.getIntensity());
inner_.track.setChannelMgrCount(1);
inner_.track.assignExtBuffer(0, &inner_.mSoundParams);
}
inner_.field_0x26c = 1;
inner_.track.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
inner_.track.startSeq();
@@ -68,27 +69,27 @@ void JAISe::startTrack_(JASSoundParams const& param_0) {
/* 8029F304-8029F4CC 299C44 01C8+00 0/0 1/1 0/0 .text
* JAISeCategoryMgr_mixOut___5JAISeFbRC14JASSoundParams16JAISoundActivity */
void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, JASSoundParams const& param_1, JAISoundActivity param_2) {
mixOut_(param_1);
void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, const JASSoundParams& params, JAISoundActivity activity) {
mixOut_(params);
if (isStopping()) {
stopTrack_();
} else if (param_0) {
if (status_.isPlaying()) {
if (inner_.field_0x26c) {
switch (inner_.track.getStatus()) {
case 2:
case JASTrack::STATUS_STOP:
if (status_.field_0x1.flags.flag1) {
startTrack_(param_1);
startTrack_(params);
} else {
stop_JAISound_();
}
break;
case 1:
inner_.track.pause(status_.isPaused() || param_2.field_0x0.flags.flag2);
inner_.track.mute(status_.isMute() || param_2.field_0x0.flags.flag1);
case JASTrack::STATUS_RUN:
inner_.track.pause(status_.isPaused() || activity.field_0x0.flags.flag2);
inner_.track.mute(status_.isMute() || activity.field_0x0.flags.flag1);
}
} else {
startTrack_(param_1);
startTrack_(params);
}
}
} else if (status_.field_0x1.flags.flag1) {
@@ -106,31 +107,33 @@ void JAISe::JAISeCategoryMgr_mixOut_(bool param_0, JASSoundParams const& param_1
/* 8029F4CC-8029F5C8 299E0C 00FC+00 0/0 1/1 0/0 .text JAISeCategoryMgr_calc___5JAISeFv */
void JAISe::JAISeCategoryMgr_calc_() {
prepare_();
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
if (inner_.field_0x278) {
inner_.field_0x278->calc(this);
}
}
if (isStopping() || mPriority == -1) {
if (isStopping() || priority_ == -1) {
inner_.mPriority = -1;
} else {
inner_.mPriority = inner_.mProperPriority + mPriority;
inner_.mPriority = inner_.mProperPriority + priority_;
}
}
/* 8029F5C8-8029F650 299F08 0088+00 2/1 0/0 0/0 .text JAISound_tryDie___5JAISeFv */
bool JAISe::JAISound_tryDie_() {
switch (inner_.track.getStatus()) {
case 0:
case 2:
case JASTrack::STATUS_FREE:
case JASTrack::STATUS_STOP:
if (inner_.field_0x278) {
inner_.mSoundStrategyMgr->virtual4(inner_.field_0x278);
inner_.field_0x278 = NULL;
}
die_JAISound_();
return true;
case 1:
case JASTrack::STATUS_RUN:
break;
}
return false;
@@ -138,11 +141,13 @@ bool JAISe::JAISound_tryDie_() {
/* 8029F650-8029F6D8 299F90 0088+00 0/0 1/1 0/0 .text
* JAISeMgr_startID___5JAISeF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISe::JAISeMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1, JAIAudience* param_2) {
start_JAISound_(param_0, param_1, param_2);
void JAISe::JAISeMgr_startID_(JAISoundID id, const JGeometry::TVec3<f32>* posPtr, JAIAudience* audience) {
JUT_ASSERT(221, inner_.track.getStatus() == JASTrack::STATUS_FREE);
start_JAISound_(id, posPtr, audience);
inner_.field_0x26c = 0;
if (inner_.mSoundStrategyMgr) {
inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(param_0);
inner_.field_0x278 = inner_.mSoundStrategyMgr->calc(id);
} else {
inner_.field_0x278 = NULL;
}
@@ -159,14 +164,17 @@ JAISoundChild* JAISe::getChild(int param_0) {
}
/* 8029F6E8-8029F6EC 29A028 0004+00 2/1 0/0 0/0 .text releaseChild__5JAISeFi */
void JAISe::releaseChild(int param_0) {
/* empty function */
}
void JAISe::releaseChild(int param_0) {}
/* 8029F6EC-8029F78C 29A02C 00A0+00 1/1 0/0 0/0 .text prepare_getSeqData___5JAISeFv */
bool JAISe::prepare_getSeqData_() {
switch (inner_.seMgr->getSeqDataMgr()->getSeqData(soundID, &inner_.mSeqData)) {
JUT_ASSERT(271, inner_.track.getStatus() != JASTrack::STATUS_RUN);
JUT_ASSERT(272, inner_.seMgr);
JUT_ASSERT(273, inner_.seMgr ->getSeqDataMgr());
switch (inner_.seMgr->getSeqDataMgr()->getSeqData(getID(), &inner_.mSeqData)) {
case 0:
OS_REPORT("Failed In Loading Sequence Data:SE(0x%08x)\n", *(u32*)&getID());
status_.state.unk = 2;
return false;
case 1:
@@ -174,7 +182,10 @@ bool JAISe::prepare_getSeqData_() {
return false;
case 2:
return true;
default:
JUT_ASSERT(296, false);
}
return false;
}
@@ -182,6 +193,7 @@ bool JAISe::prepare_getSeqData_() {
void JAISe::prepare_() {
switch (status_.state.unk) {
case 6:
JUT_ASSERT(306, false);
break;
case 2:
stop_JAISound_();
+136 -120
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeMgr
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISeMgr.h"
@@ -12,14 +7,14 @@
/* 8029F8B0-8029F91C 29A1F0 006C+00 2/1 0/0 0/0 .text
* isUsingSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
bool JAISeCategoryMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JAISe* obj = link->getObject();
if (param_0.intersects(*obj->getSeqData())) {
bool JAISeCategoryMgr::isUsingSeqData(const JAISeqDataRegion& seqDataRegion) {
JSULink<JAISe>* i = mSeList.getFirst();
while (i != NULL) {
JAISe* obj = i->getObject();
if (seqDataRegion.intersects(*obj->getSeqData())) {
return true;
}
link = link->getNext();
i = i->getNext();
}
return false;
@@ -27,67 +22,68 @@ bool JAISeCategoryMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
/* 8029F91C-8029F9C4 29A25C 00A8+00 2/1 0/0 0/0 .text
* releaseSeqData__16JAISeCategoryMgrFRC16JAISeqDataRegion */
int JAISeCategoryMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
int JAISeCategoryMgr::releaseSeqData(const JAISeqDataRegion& seqDataRegion) {
bool bVar1 = false;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0.intersects(*link->getObject()->getSeqData())) {
link->getObject()->stop();
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
if (seqDataRegion.intersects(*i->getObject()->getSeqData())) {
i->getObject()->stop();
bVar1 = true;
}
}
// Fake match. li 2 needs to come after clrlwi
u32 x = bVar1;
u32 y = x;
int rv = 2;
if (x) {
rv = 1;
}
return rv;
enum {_1 = 1, _2}; // fakematch, figure out what this enum is eventually
return bVar1 ? _1 : _2;
}
/* 8029F9C4-8029FB30 29A304 016C+00 1/1 0/0 0/0 .text JAISeMgr_calc___16JAISeCategoryMgrFv */
void JAISeCategoryMgr::JAISeMgr_calc_() {
mParams.calc();
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeCategoryMgr_calc_();
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->JAISeCategoryMgr_calc_();
}
sortByPriority_();
}
/* 8029FB30-8029FC34 29A470 0104+00 1/1 0/0 0/0 .text JAISeMgr_freeDeadSe___16JAISeCategoryMgrFv
*/
// JASPoolAllocObject<_> locations
void JAISeCategoryMgr::JAISeMgr_freeDeadSe_() {
JSULink<JAISe>* link = mSeList.getFirst();
while (link != NULL) {
JSULink<JAISe>* link_next = link->getNext();
if (link->getObject()->status_.isDead()) {
mSeList.remove(link);
delete link->getObject();
JSULink<JAISe>* i = mSeList.getFirst();
while (i != NULL) {
JSULink<JAISe>* link_next = i->getNext();
if (i->getObject()->status_.isDead()) {
JUT_ASSERT(71, ! i->getObject() ->isHandleAttached());
mSeList.remove(i);
delete i->getObject();
}
link = link_next;
i = link_next;
}
}
/* 8029FC88-8029FD40 29A5C8 00B8+00 1/1 0/0 0/0 .text
* JAISeMgr_acceptsNewSe___16JAISeCategoryMgrCFUl */
bool JAISeCategoryMgr::JAISeMgr_acceptsNewSe_(u32 param_0) const {
bool JAISeCategoryMgr::JAISeMgr_acceptsNewSe_(u32 priority) const {
s32 maxSe = getMaxSe();
if (maxSe <= 0) {
return 1;
}
s32 stopCount = 0;
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if (param_0 < link->getObject()->JAISeCategoryMgr_getProperPriority_()) {
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
if (priority < i->getObject()->JAISeCategoryMgr_getProperPriority_()) {
return 1;
}
if (!link->getObject()->isStopping()) {
if (!i->getObject()->isStopping()) {
stopCount++;
}
}
return stopCount < maxSe;
if (stopCount < maxSe) {
return true;
} else {
return false;
}
}
/* 8029FD40-8029FDE0 29A680 00A0+00 1/1 0/0 0/0 .text sortByPriority___16JAISeCategoryMgrFv */
@@ -96,6 +92,7 @@ void JAISeCategoryMgr::sortByPriority_() {
JSULink<JAISe>* link = mSeList.getFirst();
u32 lowestPriority = link->getObject()->JAISeCategoryMgr_getPriority_();
JSULink<JAISe>* current = link->getNext();
for (int j = 1; j < i; j++) {
u32 itemPriority = current->getObject()->JAISeCategoryMgr_getPriority_();
if (itemPriority < lowestPriority) {
@@ -104,32 +101,36 @@ void JAISeCategoryMgr::sortByPriority_() {
}
current = current->getNext();
}
mSeList.remove(link);
mSeList.append(link);
bool result = mSeList.remove(link);
JUT_ASSERT(131, result);
result = mSeList.append(link);
JUT_ASSERT(133, result);
}
}
/* 8029FDE0-8029FE34 29A720 0054+00 0/0 1/1 0/0 .text stop__16JAISeCategoryMgrFUl */
void JAISeCategoryMgr::stop(u32 param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
void JAISeCategoryMgr::stop(u32 fadeTime) {
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop(fadeTime);
}
}
/* 8029FE34-8029FE78 29A774 0044+00 1/1 0/0 0/0 .text stop__16JAISeCategoryMgrFv */
void JAISeCategoryMgr::stop() {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop();
}
}
/* 8029FE78-8029FEEC 29A7B8 0074+00 1/1 0/0 0/0 .text stopSoundID__16JAISeCategoryMgrF10JAISoundID
*/
void JAISeCategoryMgr::stopSoundID(JAISoundID param_0) {
if (!param_0.isAnonymous()) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_0) {
link->getObject()->stop();
void JAISeCategoryMgr::stopSoundID(JAISoundID id) {
if (!id.isAnonymous()) {
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
if ((u32)i->getObject()->getID() == (u32)id) {
i->getObject()->stop();
}
}
}
@@ -137,42 +138,44 @@ void JAISeCategoryMgr::stopSoundID(JAISoundID param_0) {
/* 8029FEEC-8029FF18 29A82C 002C+00 0/0 2/2 0/0 .text pause__16JAISeCategoryMgrFb */
void JAISeCategoryMgr::pause(bool param_0) {
for (JSULink<JAISe>* link = mSeList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->pause(param_0);
for (JSULink<JAISe>* i = mSeList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->pause(param_0);
}
}
/* 8029FF18-802A0074 29A858 015C+00 1/1 0/0 0/0 .text
* JAISeMgr_mixOut___16JAISeCategoryMgrFRC18JAISoundParamsMove16JAISoundActivity */
void JAISeCategoryMgr::JAISeMgr_mixOut_(JAISoundParamsMove const& param_0,
JAISoundActivity param_1) {
JASSoundParams aJStack_30;
aJStack_30.combine(param_0.mParams, mParams.mParams);
JSULink<JAISe>* this_00 = mSeList.getFirst();
int iVar1 = getMaxActiveSe();
void JAISeCategoryMgr::JAISeMgr_mixOut_(const JAISoundParamsMove& params,
JAISoundActivity activity) {
JASSoundParams mixParams;
mixParams.combine(params.params_, mParams.params_);
JSULink<JAISe>* i = mSeList.getFirst();
int maxActiveSe = getMaxActiveSe();
int sp28;
if (iVar1 > 0) {
while (this_00 != NULL && iVar1 > 0 && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
iVar1--;
if (maxActiveSe > 0) {
while (i != NULL && maxActiveSe > 0 && !i->getObject()->isFarAway()) {
i->getObject()->JAISeCategoryMgr_mixOut_(true, mixParams, activity);
i = i->getNext();
maxActiveSe--;
sp28 = maxActiveSe;
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
for (; i != NULL; i = i->getNext()) {
i->getObject()->JAISeCategoryMgr_mixOut_(false, mixParams, activity);
}
} else {
while (this_00 != NULL && !this_00->getObject()->isFarAway()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(true, aJStack_30, param_1);
this_00 = this_00->getNext();
while (i != NULL && !i->getObject()->isFarAway()) {
i->getObject()->JAISeCategoryMgr_mixOut_(true, mixParams, activity);
i = i->getNext();
}
for (; this_00 != NULL; this_00 = this_00->getNext()) {
this_00->getObject()->JAISeCategoryMgr_mixOut_(false, aJStack_30, param_1);
for (; i != NULL; i = i->getNext()) {
i->getObject()->JAISeCategoryMgr_mixOut_(false, mixParams, activity);
}
}
}
/* 802A0074-802A0168 29A9B4 00F4+00 0/0 1/1 0/0 .text __ct__8JAISeMgrFb */
JAISeMgr::JAISeMgr(bool param_0) : JASGlobalInstance<JAISeMgr>(param_0) {
JAISeMgr::JAISeMgr(bool setInstance) : JASGlobalInstance<JAISeMgr>(setInstance) {
mAudience = NULL;
mSeqDataMgr = NULL;
mStrategyMgr = NULL;
@@ -182,9 +185,9 @@ JAISeMgr::JAISeMgr(bool param_0) : JASGlobalInstance<JAISeMgr>(param_0) {
/* 802A0168-802A01D8 29AAA8 0070+00 1/0 0/0 0/0 .text
* isUsingSeqData__8JAISeMgrFRC16JAISeqDataRegion */
bool JAISeMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
bool JAISeMgr::isUsingSeqData(const JAISeqDataRegion& seqDataRegion) {
for (int i = 0; i < 16; i++) {
if (mCategoryMgrs[i].JAISeCategoryMgr::isUsingSeqData(param_0)) {
if (mCategoryMgrs[i].JAISeCategoryMgr::isUsingSeqData(seqDataRegion)) {
return true;
}
}
@@ -193,26 +196,27 @@ bool JAISeMgr::isUsingSeqData(JAISeqDataRegion const& param_0) {
/* 802A01D8-802A0268 29AB18 0090+00 1/0 0/0 0/0 .text
* releaseSeqData__8JAISeMgrFRC16JAISeqDataRegion */
int JAISeMgr::releaseSeqData(JAISeqDataRegion const& param_0) {
u8 r30 = 0;
int JAISeMgr::releaseSeqData(const JAISeqDataRegion& seqDataRegion) {
bool r30 = 0;
for (int i = 0; i < 16; i++) {
switch (mCategoryMgrs[i].JAISeCategoryMgr::releaseSeqData(param_0)) {
case 0:
return 0;
case 1:
r30 = 1;
break;
switch (mCategoryMgrs[i].JAISeCategoryMgr::releaseSeqData(seqDataRegion)) {
case 0:
return 0;
case 1:
r30 = 1;
break;
}
}
return (r30 != 0) ? 1 : 0;
}
/* 802A0268-802A02A0 29ABA8 0038+00 0/0 1/1 0/0 .text
* setCategoryArrangement__8JAISeMgrFRC24JAISeCategoryArrangement */
void JAISeMgr::setCategoryArrangement(JAISeCategoryArrangement const& param_0) {
void JAISeMgr::setCategoryArrangement(const JAISeCategoryArrangement& arrangement) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].setMaxActiveSe(param_0.mItems[i].mMaxActiveSe);
mCategoryMgrs[i].setMaxInactiveSe(param_0.mItems[i].mMaxInactiveSe);
mCategoryMgrs[i].setMaxActiveSe(arrangement.mItems[i].mMaxActiveSe);
mCategoryMgrs[i].setMaxInactiveSe(arrangement.mItems[i].mMaxInactiveSe);
}
}
@@ -225,9 +229,9 @@ void JAISeMgr::stop() {
/* 802A02F4-802A0358 29AC34 0064+00 0/0 1/1 0/0 .text stopSoundID__8JAISeMgrF10JAISoundID
*/
void JAISeMgr::stopSoundID(JAISoundID param_0) {
void JAISeMgr::stopSoundID(JAISoundID id) {
for (int i = 0; i < 16; i++) {
mCategoryMgrs[i].stopSoundID(param_0);
mCategoryMgrs[i].stopSoundID(id);
}
}
@@ -240,14 +244,16 @@ void JAISeMgr::initParams() {
/* 802A03D8-802A03E0 -00001 0008+00 0/0 0/0 0/0 .text setAudience__8JAISeMgrFP11JAIAudience */
void JAISeMgr::setAudience(JAIAudience* param_0) {
mAudience = param_0;
void JAISeMgr::setAudience(JAIAudience* audience) {
JUT_ASSERT(363, ! isActive());
mAudience = audience;
}
/* 802A03E0-802A0434 29AD20 0054+00 0/0 1/1 0/0 .text setSeqDataMgr__8JAISeMgrFP13JAISeqDataMgr */
void JAISeMgr::setSeqDataMgr(JAISeqDataMgr* param_0) {
void JAISeMgr::setSeqDataMgr(JAISeqDataMgr* seqDataMgr) {
JUT_ASSERT(377, ! isActive());
resetSeqDataMgr();
mSeqDataMgr = param_0;
mSeqDataMgr = seqDataMgr;
mSeqDataMgr->setSeqDataUser(this);
}
@@ -260,21 +266,25 @@ void JAISeMgr::resetSeqDataMgr() {
}
/* 802A0484-802A0574 29ADC4 00F0+00 1/1 0/0 0/0 .text newSe___8JAISeMgrFiUl */
JAISe* JAISeMgr::newSe_(int i_category, u32 param_1) {
if (i_category < 0) {
i_category = 0;
JAISe* JAISeMgr::newSe_(int category, u32 priority) {
JUT_ASSERT(396, category < NUM_CATEGORIES);
if (category < 0) {
category = 0;
}
if (!mCategoryMgrs[i_category].JAISeMgr_acceptsNewSe_(param_1)) {
JAISeCategoryMgr* categoryMgr = &mCategoryMgrs[category];
if (!categoryMgr->JAISeMgr_acceptsNewSe_(priority)) {
return NULL;
}
JAISe* se = new JAISe(this, mStrategyMgr, param_1);
JAISe* se = new JAISe(this, mStrategyMgr, priority);
if (se == NULL) {
JUT_WARN(410, "%s", "JASPoolAllocObject::<JAISe>::operator new failed .\n")
return NULL;
}
mCategoryMgrs[i_category].JAISeMgr_appendSe_(se);
categoryMgr->JAISeMgr_appendSe_(se);
return se;
}
@@ -298,43 +308,49 @@ void JAISeMgr::mixOut() {
/* 802A0768-802A08D0 29B0A8 0168+00 0/0 1/1 0/0 .text
* startSound__8JAISeMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISeMgr::startSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (param_1 && param_1->isSoundAttached()) {
param_1->getSound()->stop();
bool JAISeMgr::startSound(JAISoundID id, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr) {
if (handle && *handle) {
(*handle)->stop();
}
JAISoundInfo* pSoundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
u32 uVar4;
u32 categoryIndex;
if (pSoundInfo != NULL) {
categoryIndex = pSoundInfo->getCategory(param_0);
uVar4 = pSoundInfo->getPriority(param_0);
JAISoundInfo* soundInfoPtr = JASGlobalInstance<JAISoundInfo>::getInstance();
u32 priority;
u32 category;
if (soundInfoPtr != NULL) {
category = soundInfoPtr->getCategory(id);
priority = soundInfoPtr->getPriority(id);
} else {
categoryIndex = param_0.mId.mBytes.b1;
uVar4 = 0;
category = id.id_.info.type.parts.groupID;
priority = 0;
}
JAISe* pJAISe = newSe_(categoryIndex, uVar4);
if (pJAISe == NULL) {
JASReport("cannot new Se %08x.", param_0.mId.mFullId);
JAISe* se = newSe_(category, priority);
if (se == NULL) {
#if !PLATFORM_SHIELD
JASReport("cannot new Se %08x.", id.id_.composite_);
#endif
return false;
}
JAIAudience* pAudience = getAudience(categoryIndex);
pJAISe->JAISeMgr_startID_(param_0, param_2, pAudience);
if (pSoundInfo != NULL) {
pSoundInfo->getSeInfo(param_0, pJAISe);
JAIAudience* audiencePtr = getAudience(category);
se->JAISeMgr_startID_(id, posPtr, audiencePtr);
if (soundInfoPtr != NULL) {
soundInfoPtr->getSeInfo(id, se);
}
if (param_1 != NULL) {
pJAISe->attachHandle(param_1);
if (handle != NULL) {
se->attachHandle(handle);
}
return true;
}
/* 802A08D0-802A08FC 29B210 002C+00 0/0 2/2 0/0 .text getNumActiveSe__8JAISeMgrCFv */
int JAISeMgr::getNumActiveSe() const {
int sum = 0;
int num = 0;
for (int i = 0; i < 16; i++) {
sum += mCategoryMgrs[i].getNumSe();
num += mCategoryMgrs[i].getNumSe();
}
return sum;
return num;
}
+86 -53
View File
@@ -1,14 +1,8 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeq
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISeq.h"
#include "JSystem/JAudio2/JAISeqMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JAudio2/JAIAudience.h"
@@ -17,17 +11,17 @@ namespace {
/* 802A0A6C-802A0A8C 29B3AC 0020+00 1/1 0/0 0/0 .text
* JASTrack_isFreeOrStopped__20@unnamed@JAISeq_cpp@FP8JASTrack */
static bool JASTrack_isFreeOrStopped(JASTrack* track) {
u8 status = track->getStatus();
return status == 0 || status == 2;
u32 status = track->getStatus();
return status == JASTrack::STATUS_FREE || status == JASTrack::STATUS_STOP;
}
} // namespace
/* 802A0A8C-802A0B64 29B3CC 00D8+00 0/0 2/1 0/0 .text
* __ct__6JAISeqFP9JAISeqMgrP28JAISoundStrategyMgr<6JAISeq> */
JAISeq::JAISeq(JAISeqMgr* param_0, JAISoundStrategyMgr<JAISeq>* param_1) : JSULink<JAISeq>(this) {
inner_.seqMgr = param_0;
inner_.strategyMgr = param_1;
JAISeq::JAISeq(JAISeqMgr* seqMgr, JAISoundStrategyMgr<JAISeq>* soundStrategyMgr) : JSULink<JAISeq>(this) {
inner_.seqMgr = seqMgr;
inner_.strategyMgr = soundStrategyMgr;
inner_.mSoundParams.init();
for (int i = 0; i < 32; i++) {
inner_.mSoundChild[i] = NULL;
@@ -36,13 +30,14 @@ JAISeq::JAISeq(JAISeqMgr* param_0, JAISoundStrategyMgr<JAISeq>* param_1) : JSULi
/* 802A0B64-802A0C04 29B4A4 00A0+00 0/0 1/1 0/0 .text
* JAISeqMgr_startID___6JAISeqF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudienceii */
void JAISeq::JAISeqMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1,
JAIAudience* param_2, int param_3, int param_4) {
inner_.field_0x39c = param_3;
void JAISeq::JAISeqMgr_startID_(JAISoundID id, const JGeometry::TVec3<f32>* posPtr,
JAIAudience* audience, int category, int param_4) {
inner_.field_0x39c = category;
reserveChildTracks_(param_4);
start_JAISound_(param_0, param_1, param_2);
start_JAISound_(id, posPtr, audience);
if (inner_.strategyMgr) {
field_0x3a8 = inner_.strategyMgr->calc(param_0);
field_0x3a8 = inner_.strategyMgr->calc(id);
} else {
field_0x3a8 = NULL;
}
@@ -50,7 +45,9 @@ void JAISeq::JAISeqMgr_startID_(JAISoundID param_0, JGeometry::TVec3<f32> const*
/* 802A0C04-802A0CA4 29B544 00A0+00 1/1 0/0 0/0 .text
* playSeqData___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::playSeqData_(JASSoundParams const& param_0, JAISoundActivity param_1) {
void JAISeq::playSeqData_(const JASSoundParams& params, JAISoundActivity activity) {
JUT_ASSERT(72, JASTrack_isFreeOrStopped( & inner_.outputTrack ));
inner_.outputTrack.setSeqData(inner_.mSeqData.field_0x0, inner_.mSeqData.field_0x4);
if (audible_) {
initTrack_JAISound_(&inner_.outputTrack);
@@ -58,33 +55,42 @@ void JAISeq::playSeqData_(JASSoundParams const& param_0, JAISoundActivity param_
inner_.outputTrack.setChannelMgrCount(1);
inner_.outputTrack.assignExtBuffer(0, &inner_.mSoundParams);
}
mixOut_(param_0, param_1);
mixOut_(params, activity);
inner_.outputTrack.startSeq();
}
/* 802A0CA4-802A0E48 29B5E4 01A4+00 1/1 0/0 0/0 .text reserveChildTracks___6JAISeqFi */
void JAISeq::reserveChildTracks_(int param_0) {
JUT_ASSERT(92, inner_.outputTrack.getStatus() == JASTrack::STATUS_FREE);
for (int i = 0; i < 2; i++) {
JASTrack* track = new JASTrack();
if (track) {
track->setAutoDelete(true);
inner_.outputTrack.connectChild(i, track);
for (int j = 0; j < 16; j++) {
if (i * 16 + j >= param_0) {
int sp18 = i * 16 + j;
if (sp18 >= param_0) {
continue;
}
JASTrack* track2 = new JASTrack();
if (track2) {
track2->setAutoDelete(true);
track->connectChild(j, track2);
} else {
JUT_WARN(117, "%s", "JASPoolAllocObject::<JASTrack>::operator new failed .\n");
}
}
} else {
JUT_WARN(124, "%s", "JASPoolAllocObject::<JASTrack>::operator new failed .\n");
}
}
}
/* 802A0E48-802A0EDC 29B788 0094+00 1/1 0/0 0/0 .text releaseChildTracks___6JAISeqFv */
// NONMATCHING JASPoolAllocObject_MultiThreaded<_> locations
void JAISeq::releaseChildTracks_() {
for (u32 i = 0; i < 2; i++) {
JASTrack* track = inner_.outputTrack.getChild(i);
@@ -102,13 +108,17 @@ void JAISeq::releaseChildTracks_() {
/* 802A0EDC-802A0F90 29B81C 00B4+00 1/1 0/0 0/0 .text prepare_getSeqData___6JAISeqFv */
bool JAISeq::prepare_getSeqData_() {
JAISoundID id(soundID);
JAISoundID id(soundID_); // fakematch, should be using getID but it messes up stack
if (id.isAnonymous()) {
return true;
}
JAISeqDataMgr* seqDataMgr = inner_.seqMgr->getSeqDataMgr();
JUT_ASSERT(162, seqDataMgr);
switch (seqDataMgr->getSeqData(id, &inner_.mSeqData)) {
case 0:
OS_REPORT("Failed In Loading Sequence Data:SEQ(0x%08x)\n", getID());
status_.state.unk = 2;
break;
case 1:
@@ -117,14 +127,16 @@ bool JAISeq::prepare_getSeqData_() {
case 2:
return true;
}
return false;
}
/* 802A0F90-802A108C 29B8D0 00FC+00 2/1 0/0 0/0 .text
* prepare___6JAISeqFRC14JASSoundParams16JAISoundActivity */
bool JAISeq::prepare_(JASSoundParams const& param_0, JAISoundActivity param_1) {
bool JAISeq::prepare_(const JASSoundParams& params, JAISoundActivity activity) {
switch (status_.state.unk) {
case 6:
JUT_ASSERT(193, false);
break;
case 2:
stop_JAISound_();
@@ -132,7 +144,7 @@ bool JAISeq::prepare_(JASSoundParams const& param_0, JAISoundActivity param_1) {
case 0:
if (prepare_getSeqData_()) {
status_.state.unk = 5;
playSeqData_(param_0, param_1);
playSeqData_(params, activity);
return true;
}
break;
@@ -143,20 +155,22 @@ bool JAISeq::prepare_(JASSoundParams const& param_0, JAISoundActivity param_1) {
return false;
case 4:
status_.state.unk = 5;
playSeqData_(param_0, param_1);
playSeqData_(params, activity);
return true;
case 5:
return true;
}
return false;
}
/* 802A108C-802A1180 29B9CC 00F4+00 0/0 1/1 0/0 .text JAISeqMgr_calc___6JAISeqFv */
void JAISeq::JAISeqMgr_calc_() {
if (inner_.outputTrack.getStatus() == 2 || (inner_.outputTrack.getStatus() == 0 && status_.state.unk == 2)) {
if (inner_.outputTrack.getStatus() == JASTrack::STATUS_STOP || (inner_.outputTrack.getStatus() == JASTrack::STATUS_FREE && status_.state.unk == 2)) {
die_();
return;
}
if (calc_JAISound_()) {
inner_.mTempoMgr.calc();
for (int i = 0; i < 32; i++) {
@@ -171,18 +185,22 @@ void JAISeq::JAISeqMgr_calc_() {
}
/* 802A1180-802A1268 29BAC0 00E8+00 2/2 0/0 0/0 .text die___6JAISeqFv */
// NONMATCHING JASPoolAllocObject<_> locations
void JAISeq::die_() {
JUT_ASSERT(269, JASTrack_isFreeOrStopped( & inner_.outputTrack ));
for (int i = 0; i < 32; i++) {
if (inner_.mSoundChild[i]) {
delete inner_.mSoundChild[i];
inner_.mSoundChild[i] = NULL;
}
}
if (field_0x3a8) {
JUT_ASSERT(281, inner_.strategyMgr);
inner_.strategyMgr->virtual4(field_0x3a8);
field_0x3a8 = NULL;
}
releaseChildTracks_();
die_JAISound_();
}
@@ -193,32 +211,40 @@ bool JAISeq::JAISound_tryDie_() {
die_();
return true;
}
fader.forceOut();
fader_.forceOut();
status_.state.flags.flag1 = 1;
JASCriticalSection cs;
inner_.outputTrack.stopSeq();
{
JASCriticalSection cs;
inner_.outputTrack.stopSeq();
}
return false;
}
/* 802A1348-802A14FC 29BC88 01B4+00 2/2 0/0 0/0 .text
* mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
void JAISeq::mixOut_(const JASSoundParams& params, JAISoundActivity activity) {
inner_.outputTrack.setTempoRate(inner_.mTempoMgr.getTempo());
inner_.outputTrack.mute(param_1.field_0x0.flags.flag1 || status_.isMute());
inner_.outputTrack.pause(param_1.field_0x0.flags.flag2 || status_.isPaused());
JASSoundParams stackParams;
params.mixOutAll(param_0, &stackParams, fader.getIntensity());
inner_.outputTrack.mute(activity.field_0x0.flags.flag1 || status_.isMute());
inner_.outputTrack.pause(activity.field_0x0.flags.flag2 || status_.isPaused());
JASSoundParams outParams;
params_.mixOutAll(params, &outParams, fader_.getIntensity());
if (field_0x3a8) {
field_0x3a8->virtual4(this, stackParams);
field_0x3a8->virtual4(this, outParams);
}
if (audible_) {
int maxChannels = audience_->getMaxChannels();
for (int i = 0; i < maxChannels; i++) {
audience_->mixChannelOut(stackParams, audible_, i);
audience_->mixChannelOut(outParams, audible_, i);
}
} else {
inner_.mSoundParams = stackParams;
for (int i = 0; i < 32; i++) {
inner_.mSoundParams = outParams;
for (int i = 0; i < NUM_CHILDREN; i++) {
if (inner_.mSoundChild[i]) {
JASTrack* track = JAISeq::getChildTrack(i);
if (track) {
@@ -231,45 +257,49 @@ void JAISeq::mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
/* 802A14FC-802A1570 29BE3C 0074+00 0/0 1/1 0/0 .text
* JAISeqMgr_mixOut___6JAISeqFRC14JASSoundParams16JAISoundActivity */
void JAISeq::JAISeqMgr_mixOut_(JASSoundParams const& param_0, JAISoundActivity param_1) {
if (prepare_(param_0, param_1) && inner_.outputTrack.getStatus() == 1) {
mixOut_(param_0, param_1);
void JAISeq::JAISeqMgr_mixOut_(const JASSoundParams& params, JAISoundActivity activity) {
if (prepare_(params, activity) && inner_.outputTrack.getStatus() == JASTrack::STATUS_RUN) {
mixOut_(params, activity);
}
}
/* 802A1570-802A1578 29BEB0 0008+00 1/0 0/0 0/0 .text getNumChild__6JAISeqCFv */
s32 JAISeq::getNumChild() const {
return 32;
return NUM_CHILDREN;
}
/* 802A1578-802A165C 29BEB8 00E4+00 1/0 0/0 0/0 .text getChild__6JAISeqFi */
// NONMATCHING JASPoolAllocObject<_> locations
JAISoundChild* JAISeq::getChild(int index) {
JUT_ASSERT(371, status_.isAlive());
JUT_ASSERT(372, index >= 0);
JUT_ASSERT(373, index < NUM_CHILDREN);
if (inner_.mSoundChild[index]) {
return inner_.mSoundChild[index];
}
inner_.mSoundChild[index] = new JAISoundChild();
if (!inner_.mSoundChild[index]) {
JUT_WARN(379, "%s", "JASPoolAllocObject::<JAISoundChild>::operator new failed .\n");
return NULL;
}
return inner_.mSoundChild[index];
}
/* 802A165C-802A1728 29BF9C 00CC+00 1/0 0/0 0/0 .text releaseChild__6JAISeqFi */
// NONMATCHING JASPoolAllocObject<_> locations
void JAISeq::releaseChild(int param_0) {
if (inner_.outputTrack.getStatus() == 1 && inner_.mSoundChild[param_0]) {
JASTrack* track = getChildTrack(param_0);
void JAISeq::releaseChild(int index) {
if (inner_.outputTrack.getStatus() == JASTrack::STATUS_RUN && inner_.mSoundChild[index]) {
JASTrack* track = getChildTrack(index);
if (track) {
track->assignExtBuffer(0, NULL);
}
delete inner_.mSoundChild[param_0];
inner_.mSoundChild[param_0] = NULL;
delete inner_.mSoundChild[index];
inner_.mSoundChild[index] = NULL;
}
}
/* 802A1728-802A1730 29C068 0008+00 1/0 0/0 0/0 .text getTrack__6JAISeqFv */
JASTrack* JAISeq::getTrack() {
return &inner_.outputTrack;
@@ -277,12 +307,15 @@ JASTrack* JAISeq::getTrack() {
/* 802A1730-802A1768 29C070 0038+00 2/1 0/0 0/0 .text getChildTrack__6JAISeqFi */
JASTrack* JAISeq::getChildTrack(int param_0) {
u32 tmp = u32(param_0) >> 4;
JASTrack* track = inner_.outputTrack.getChild(tmp);
u32 index = u32(param_0) >> 4;
JASTrack* track = inner_.outputTrack.getChild(index);
if (track) {
JASTrack* track2 = track->getChild(param_0 - (tmp << 4));
u32 var_r28 = param_0 - (index << 4);
JASTrack* track2 = track->getChild(var_r28);
return track2;
}
return NULL;
}
+3 -1
View File
@@ -4,4 +4,6 @@
JAISeqDataUser::~JAISeqDataUser() {}
JAISeqDataMgr::~JAISeqDataMgr() {}
JAISeqDataMgr::~JAISeqDataMgr() {
JUT_ASSERT(14, false);
}
+55 -57
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAISeqMgr
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISeqMgr.h"
@@ -12,9 +7,9 @@
/* 802A1804-802A1870 29C144 006C+00 1/0 0/0 0/0 .text
* isUsingSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
bool JAISeqMgr::isUsingSeqData(JAISeqDataRegion const& param_1) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if (param_1.intersects(link->getObject()->getSeqData())) {
bool JAISeqMgr::isUsingSeqData(const JAISeqDataRegion& seqDataRegion) {
for (JSULink<JAISeq>* i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
if (seqDataRegion.intersects(i->getObject()->getSeqData())) {
return true;
}
}
@@ -23,25 +18,20 @@ bool JAISeqMgr::isUsingSeqData(JAISeqDataRegion const& param_1) {
/* 802A1870-802A1914 29C1B0 00A4+00 1/0 0/0 0/0 .text
* releaseSeqData__9JAISeqMgrFRC16JAISeqDataRegion */
int JAISeqMgr::releaseSeqData(JAISeqDataRegion const& param_1) {
int JAISeqMgr::releaseSeqData(const JAISeqDataRegion& seqDataRegion) {
bool bVar1 = false;
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if (param_1.intersects(link->getObject()->getSeqData())) {
link->getObject()->stop();
for (JSULink<JAISeq>* i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
if (seqDataRegion.intersects(i->getObject()->getSeqData())) {
i->getObject()->stop();
bVar1 = true;
}
}
ReleaseSeqResult uVar4;
if (!bVar1) {
uVar4 = RELEASE_SEQ_2;
} else {
uVar4 = RELEASE_SEQ_1;
}
return uVar4;
return bVar1 ? RELEASE_SEQ_1 : RELEASE_SEQ_2;
}
/* 802A1914-802A1A08 29C254 00F4+00 0/0 1/1 0/0 .text __ct__9JAISeqMgrFb */
JAISeqMgr::JAISeqMgr(bool param_1) : JASGlobalInstance<JAISeqMgr>(param_1), mAudience(NULL) {
JAISeqMgr::JAISeqMgr(bool setInstance) : JASGlobalInstance<JAISeqMgr>(setInstance), mAudience(NULL) {
seqDataMgr_ = NULL;
field_0x10 = NULL;
field_0x70 = 16;
@@ -51,38 +41,40 @@ JAISeqMgr::JAISeqMgr(bool param_1) : JASGlobalInstance<JAISeqMgr>(param_1), mAud
/* 802A1A08-802A1AF4 29C348 00EC+00 1/1 0/0 0/0 .text freeDeadSeq___9JAISeqMgrFv */
void JAISeqMgr::freeDeadSeq_() {
JSULink<JAISeq>* link = mSeqList.getFirst();
while (link != NULL) {
JAISeq* seq = link->getObject();
JSULink<JAISeq>* next = link->getNext();
JSULink<JAISeq>* i = mSeqList.getFirst();
while (i != NULL) {
JAISeq* seq = i->getObject();
JSULink<JAISeq>* next = i->getNext();
if (seq->status_.isDead()) {
mSeqList.remove(link);
mSeqList.remove(i);
delete seq;
}
link = next;
i = next;
}
}
/* 802A1B48-802A1C90 29C488 0148+00 0/0 1/1 0/0 .text
* startSound__9JAISeqMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISeqMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
JGeometry::TVec3<f32> const* param_3) {
if (param_2 != NULL && *param_2) {
(*param_2)->stop();
bool JAISeqMgr::startSound(JAISoundID id, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr) {
if (handle != NULL && *handle) {
(*handle)->stop();
}
JAISoundInfo* soundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
int category = (soundInfo != NULL) ? soundInfo->getCategory(param_1) : -1;
JAISeqData aJStack_38(NULL, 0);
int category = (soundInfo != NULL) ? soundInfo->getCategory(id) : -1;
JAISeqData seqData(NULL, 0);
JUT_ASSERT(81, seqDataMgr_);
if (seqDataMgr_->getSeqData(param_1, &aJStack_38) == JAISeqDataMgr::SeqDataReturnValue_0) {
if (seqDataMgr_->getSeqData(id, &seqData) == JAISeqDataMgr::SeqDataReturnValue_0) {
return false;
}
JAISeq* jaiSeq = beginStartSeq_();
if (jaiSeq != NULL) {
jaiSeq->JAISeqMgr_startID_(param_1, param_3, mAudience, category, field_0x70);
if (endStartSeq_(jaiSeq, param_2) != 0) {
JAISeq* seq = beginStartSeq_();
if (seq != NULL) {
seq->JAISeqMgr_startID_(id, posPtr, mAudience, category, field_0x70);
if (endStartSeq_(seq, handle)) {
if (soundInfo != NULL) {
soundInfo->getSeqInfo(param_1, jaiSeq);
soundInfo->getSeqInfo(id, seq);
}
return true;
}
@@ -94,32 +86,37 @@ bool JAISeqMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
/* 802A1C90-802A1DFC 29C5D0 016C+00 0/0 4/4 0/0 .text calc__9JAISeqMgrFv */
void JAISeqMgr::calc() {
mMove.calc();
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_calc_();
JSULink<JAISeq>* i;
for (i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->JAISeqMgr_calc_();
}
freeDeadSeq_();
}
/* 802A1DFC-802A1E3C 29C73C 0040+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFv */
void JAISeqMgr::stop() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
JSULink<JAISeq>* i;
for (i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop();
}
}
/* 802A1E3C-802A1E8C 29C77C 0050+00 0/0 1/1 0/0 .text stop__9JAISeqMgrFUl */
void JAISeqMgr::stop(u32 param_0) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
void JAISeqMgr::stop(u32 fadeTime) {
JSULink<JAISeq>* i;
for (i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop(fadeTime);
}
}
/* 802A1E8C-802A1EFC 29C7CC 0070+00 0/0 1/1 0/0 .text stopSoundID__9JAISeqMgrF10JAISoundID */
void JAISeqMgr::stopSoundID(JAISoundID param_1) {
if (!param_1.isAnonymous()) {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_1) {
link->getObject()->stop();
void JAISeqMgr::stopSoundID(JAISoundID id) {
JSULink<JAISeq>* i;
if (!id.isAnonymous()) {
for (i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
if ((u32)i->getObject()->getID() == (u32)id) {
i->getObject()->stop();
}
}
}
@@ -127,8 +124,9 @@ void JAISeqMgr::stopSoundID(JAISoundID param_1) {
/* 802A1EFC-802A1F58 29C83C 005C+00 0/0 4/4 0/0 .text mixOut__9JAISeqMgrFv */
void JAISeqMgr::mixOut() {
for (JSULink<JAISeq>* link = mSeqList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAISeqMgr_mixOut_(mMove.mParams, mActivity);
JSULink<JAISeq>* i;
for (i = mSeqList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->JAISeqMgr_mixOut_(mMove.params_, mActivity);
}
}
@@ -143,13 +141,13 @@ JAISeq* JAISeqMgr::beginStartSeq_() {
/* 802A1FE8-802A20F0 29C928 0108+00 1/1 0/0 0/0 .text
* endStartSeq___9JAISeqMgrFP6JAISeqP14JAISoundHandle */
bool JAISeqMgr::endStartSeq_(JAISeq* param_1, JAISoundHandle* param_2) {
JAISeq* sound = param_1->getObject();
bool JAISeqMgr::endStartSeq_(JAISeq* seq, JAISoundHandle* handle) {
JAISeq* sound = seq->getObject();
if (sound != NULL) {
if (sound->status_.isAlive()) {
mSeqList.append(param_1);
if (param_2 != NULL) {
sound->attachHandle(param_2);
mSeqList.append(seq);
if (handle != NULL) {
sound->attachHandle(handle);
}
return true;
}
+67 -67
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAISound
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISound.h"
@@ -14,24 +9,24 @@
/* 802A2184-802A21A0 29CAC4 001C+00 0/0 14/14 0/0 .text releaseSound__14JAISoundHandleFv
*/
void JAISoundHandle::releaseSound() {
if (sound_ == NULL) {
return;
if (sound_ != NULL) {
sound_->handle_ = NULL;
sound_ = NULL;
}
sound_->handle_ = NULL;
sound_ = NULL;
}
/* 802A21A0-802A21BC 29CAE0 001C+00 3/3 3/3 0/0 .text releaseHandle__8JAISoundFv */
void JAISound::releaseHandle() {
if (handle_ == NULL) {
return;
if (handle_ != NULL) {
handle_->sound_ = NULL;
handle_ = NULL;
}
handle_->sound_ = NULL;
handle_ = NULL;
}
/* 802A21BC-802A2220 29CAFC 0064+00 0/0 3/3 0/0 .text attachHandle__8JAISoundFP14JAISoundHandle */
void JAISound::attachHandle(JAISoundHandle* handle) {
JUT_ASSERT(55, handle);
if (handle->isSoundAttached()) {
handle->getSound()->stop();
}
@@ -67,43 +62,42 @@ s32 JAISoundStatus_::unlockIfLocked() {
/* 802A2280-802A22F8 29CBC0 0078+00 0/0 4/4 0/0 .text
* mixOutAll__14JAISoundParamsFRC14JASSoundParamsP14JASSoundParamsf */
void JAISoundParams::mixOutAll(JASSoundParams const& param_0, JASSoundParams* param_1,
f32 param_2) {
param_1->mVolume = mMove.mParams.mVolume * (param_0.mVolume * mProperty.field_0x0) * param_2;
param_1->mFxMix = mMove.mParams.mFxMix + (param_0.mFxMix + mProperty.field_0x4);
param_1->mPitch = mMove.mParams.mPitch * (param_0.mPitch * mProperty.field_0x8);
param_1->mPan = (param_0.mPan + mMove.mParams.mPan) - 0.5f;
param_1->mDolby = param_0.mDolby + mMove.mParams.mDolby;
void JAISoundParams::mixOutAll(const JASSoundParams& inParams, JASSoundParams* outParams, f32 param_2) {
outParams->mVolume = move_.params_.mVolume * (inParams.mVolume * property_.field_0x0) * param_2;
outParams->mFxMix = move_.params_.mFxMix + (inParams.mFxMix + property_.field_0x4);
outParams->mPitch = move_.params_.mPitch * (inParams.mPitch * property_.field_0x8);
outParams->mPan = (inParams.mPan + move_.params_.mPan) - 0.5f;
outParams->mDolby = inParams.mDolby + move_.params_.mDolby;
}
/* 802A22F8-802A2328 29CC38 0030+00 0/0 3/3 0/0 .text __ct__8JAISoundFv */
JAISound::JAISound() : params() {}
JAISound::JAISound() : params_() {}
/* 802A2328-802A244C 29CC68 0124+00 0/0 3/3 0/0 .text
* start_JAISound___8JAISoundF10JAISoundIDPCQ29JGeometry8TVec3<f>P11JAIAudience */
void JAISound::start_JAISound_(JAISoundID param_0, JGeometry::TVec3<f32> const* param_1,
JAIAudience* param_2) {
void JAISound::start_JAISound_(JAISoundID id, const JGeometry::TVec3<f32>* posPtr, JAIAudience* audience) {
handle_ = NULL;
soundID = param_0;
soundID_ = id;
status_.init();
params.init();
fader.forceIn();
audience_ = param_2;
prepareCount = 0;
mCount = 0;
params_.init();
fader_.forceIn();
audience_ = audience;
prepareCount_ = 0;
count_ = 0;
if (param_1 != 0 && audience_ != NULL) {
audible_ = audience_->newAudible(*param_1, soundID, NULL, 0);
if (posPtr != NULL && audience_ != NULL) {
audible_ = audience_->newAudible(*posPtr, soundID_, NULL, 0);
} else {
audible_ = NULL;
}
mPriority = 0;
priority_ = 0;
}
/* 802A244C-802A2474 29CD8C 0028+00 0/0 2/2 0/0 .text acceptsNewAudible__8JAISoundCFv */
bool JAISound::acceptsNewAudible() const {
bool accepts = false;
if (audible_ == NULL && status_.state.flags.flag2 == 0) {
if (audible_ == NULL && status_.state.flags.calcedOnce == 0) {
accepts = true;
}
return accepts;
@@ -111,25 +105,25 @@ bool JAISound::acceptsNewAudible() const {
/* 802A2474-802A24DC 29CDB4 0068+00 0/0 2/2 0/0 .text
/* * newAudible__8JAISoundFRCQ29JGeometry8TVec3<f>PCQ29JGeometry8TVec3<f>UlP11JAIAudience */
void JAISound::newAudible(JGeometry::TVec3<f32> const& param_0,
JGeometry::TVec3<f32> const* param_1, u32 param_2, JAIAudience* param_3) {
if (param_3 != NULL) {
audience_ = param_3;
void JAISound::newAudible(const JGeometry::TVec3<f32>& pos,
const JGeometry::TVec3<f32>* param_1, u32 param_2, JAIAudience* audience) {
JUT_ASSERT(151, acceptsNewAudible());
if (audience != NULL) {
audience_ = audience;
}
JAISoundID sound = soundID;
audible_ = audience_->newAudible(param_0, sound, param_1, param_2);
JUT_ASSERT(157, audience_);
audible_ = audience_->newAudible(pos, soundID_, param_1, param_2);
}
/* 802A24DC-802A2598 29CE1C 00BC+00 0/0 24/24 0/0 .text stop__8JAISoundFUl */
void JAISound::stop(u32 fadeCount) {
ASSERT(status_.isAlive());
if (fadeCount == 0) {
void JAISound::stop(u32 fadeTime) {
JUT_ASSERT(164, status_.isAlive());
if (fadeTime == 0) {
stop();
return;
} else {
fader.fadeOut(fadeCount);
fader_.fadeOut(fadeTime);
removeLifeTime_();
status_.field_0x1.flags.flag2 = 0;
status_.state.flags.flag5 = 1;
status_.state.flags.flag1 = 1;
}
@@ -163,7 +157,7 @@ void JAISound::die_JAISound_() {
audible_ = NULL;
audience_ = NULL;
}
fader.forceOut();
fader_.forceOut();
releaseHandle();
status_.state.unk = 6;
}
@@ -171,49 +165,51 @@ void JAISound::die_JAISound_() {
/* 802A266C-802A26B8 29CFAC 004C+00 0/0 3/3 0/0 .text increasePrepareCount_JAISound___8JAISoundFv
*/
void JAISound::increasePrepareCount_JAISound_() {
if ((++prepareCount & 0xFF) == 0) {
JASReport("It cost %d steps to prepare Sound(ID:%08x, Address%08x).\n", prepareCount,
(u32)soundID, this);
if ((++prepareCount_ & 0xFF) == 0) {
JASReport("It cost %d steps to prepare Sound(ID:%08x, Address%08x).\n", prepareCount_,
*(u32*)&soundID_, this);
}
}
/* 802A26B8-802A29DC 29CFF8 0324+00 0/0 3/3 0/0 .text calc_JAISound___8JAISoundFv */
bool JAISound::calc_JAISound_() {
status_.state.flags.flag2 = 1;
status_.state.flags.calcedOnce = 1;
if (isStopping() && JAISound_tryDie_()) {
return false;
}
ASSERT(status_.isAlive());
JUT_ASSERT(230, status_.isAlive());
bool isPlaying = status_.isPlaying();
if (isPlaying) {
mCount++;
count_++;
}
bool isPaused = status_.isPaused();
if (isPaused == false) {
fader.calc();
fader_.calc();
}
bool playing = isPlaying && isPaused == false;
if (playing) {
params.mMove.calc();
params_.move_.calc();
if (audible_ != NULL) {
audible_->calc();
}
if (status_.field_0x1.flags.flag2 != 0) {
if (lifeTime == 0) {
if (lifeTime_ == 0) {
stop_JAISound_();
} else {
lifeTime--;
lifeTime_--;
}
}
}
if (audience_ != NULL && audible_ != NULL) {
u32 priority = audience_->calcPriority(audible_);
mPriority = priority;
if (priority == 0xFFFFFFFF && status_.field_0x1.flags.flag1 == 0) {
if ((priority_ = audience_->calcPriority(audible_)) == 0xFFFFFFFF && status_.field_0x1.flags.flag1 == 0) {
stop_JAISound_();
}
} else {
mPriority = 0;
priority_ = 0;
}
return playing;
@@ -221,20 +217,24 @@ bool JAISound::calc_JAISound_() {
/* 802A29DC-802A2AB0 29D31C 00D4+00 0/0 2/2 0/0 .text initTrack_JAISound___8JAISoundFP8JASTrack */
void JAISound::initTrack_JAISound_(JASTrack* track) {
JASSoundParams* soundParams[8];
ASSERT(audience_);
ASSERT(audible_);
JASSoundParams* soundParams[JASTrack::TChannelMgr::CHANNEL_MAX];
JUT_ASSERT(286, audience_);
JUT_ASSERT(287, audible_);
int numChannels = 0;
JUT_ASSERT(290, audience_->getMaxChannels() < JASTrack::TChannelMgr::CHANNEL_MAX);
for (int i = 0; i < audience_->getMaxChannels(); i++) {
JASSoundParams* currentParams = audible_->getOuterParams(i);
if (currentParams != NULL) {
soundParams[numChannels] = currentParams;
numChannels++;
soundParams[numChannels++] = currentParams;
}
}
ASSERT(numChannels >= 1);
JUT_ASSERT(298, numChannels >= 1);
track->setChannelMgrCount(numChannels);
for (size_t i = 0; i < track->getChannelMgrCount(); i++) {
for (u32 i = 0; i < track->getChannelMgrCount(); i++) {
track->assignExtBuffer(i, soundParams[i]);
}
}
+3 -3
View File
@@ -8,9 +8,9 @@ void JAISoundChild::init() {
mParams.init();
}
void JAISoundChild::mixOut(JASTrack* pTrack) {
mParams = mMove.mParams;
pTrack->assignExtBuffer(0, &mParams);
void JAISoundChild::mixOut(JASTrack* track) {
mParams = mMove.params_;
track->assignExtBuffer(0, &mParams);
}
void JAISoundChild::calc() {
+8 -11
View File
@@ -1,22 +1,18 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundHandles
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISoundHandles.h"
/* 802A2C98-802A2CF4 29D5D8 005C+00 0/0 1/1 0/0 .text
* getHandleSoundID__15JAISoundHandlesF10JAISoundID */
JAISoundHandle* JAISoundHandles::getHandleSoundID(JAISoundID param_0) {
JAISoundHandle* JAISoundHandles::getHandleSoundID(JAISoundID id) {
for (int i = 0; i < numHandles_; i++) {
if (mSoundHandle[i].isSoundAttached()) {
if (JAISoundID(mSoundHandle[i]->soundID) == param_0) {
return &mSoundHandle[i];
if (handle_[i].isSoundAttached()) {
if (handle_[i]->getID() == id) {
return &handle_[i];
}
}
}
return NULL;
}
@@ -24,9 +20,10 @@ JAISoundHandle* JAISoundHandles::getHandleSoundID(JAISoundID param_0) {
*/
JAISoundHandle* JAISoundHandles::getFreeHandle() {
for (int i = 0; i < numHandles_; i++) {
if (!mSoundHandle[i].isSoundAttached()) {
return &mSoundHandle[i];
if (!handle_[i].isSoundAttached()) {
return &handle_[i];
}
}
return NULL;
}
+2 -7
View File
@@ -1,16 +1,11 @@
//
// Generated By: dol2asm
// Translation Unit: JAISoundInfo
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISoundInfo.h"
/* 802A2D34-802A2D50 29D674 001C+00 0/0 1/1 0/0 .text __ct__12JAISoundInfoFb */
JAISoundInfo::JAISoundInfo(bool param_0) : JASGlobalInstance<JAISoundInfo>(param_0) {
}
JAISoundInfo::JAISoundInfo(bool setInstance) : JASGlobalInstance<JAISoundInfo>(setInstance) {}
/* 802A2D50-802A2DB4 29D690 0064+00 1/0 2/2 0/0 .text __dt__12JAISoundInfoFv */
JAISoundInfo::~JAISoundInfo() {
JUT_ASSERT(14, false);
}
+27 -25
View File
@@ -2,47 +2,49 @@
#include "JSystem/JAudio2/JAISoundParams.h"
void JAISoundParamsMove::moveVolume(f32 newValue, u32 count) {
if (count == 0) {
mParams.mVolume = newValue;
mTransition.mVolume.mCount = 0;
void JAISoundParamsMove::moveVolume(f32 newValue, u32 maxSteps) {
JUT_ASSERT(12, (newValue>=0.f));
if (maxSteps == 0) {
params_.mVolume = newValue;
transition_.volume_.remainingSteps_ = 0;
} else {
mTransition.mVolume.set(newValue, mParams.mVolume, count);
transition_.volume_.set(newValue, params_.mVolume, maxSteps);
}
}
void JAISoundParamsMove::movePitch(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPitch = newValue;
mTransition.mPitch.mCount = 0;
void JAISoundParamsMove::movePitch(f32 newValue, u32 maxSteps) {
JUT_ASSERT(27, (newValue>=0.f));
if (maxSteps == 0) {
params_.mPitch = newValue;
transition_.pitch_.remainingSteps_ = 0;
} else {
mTransition.mPitch.set(newValue, mParams.mPitch, count);
transition_.pitch_.set(newValue, params_.mPitch, maxSteps);
}
}
void JAISoundParamsMove::moveFxMix(f32 newValue, u32 count) {
if (count == 0) {
mParams.mFxMix = newValue;
mTransition.mFxMix.mCount = 0;
void JAISoundParamsMove::moveFxMix(f32 newValue, u32 maxSteps) {
if (maxSteps == 0) {
params_.mFxMix = newValue;
transition_.fxMix_.remainingSteps_ = 0;
} else {
mTransition.mFxMix.set(newValue, mParams.mFxMix, count);
transition_.fxMix_.set(newValue, params_.mFxMix, maxSteps);
}
}
void JAISoundParamsMove::movePan(f32 newValue, u32 count) {
if (count == 0) {
mParams.mPan = newValue;
mTransition.mPan.mCount = 0;
void JAISoundParamsMove::movePan(f32 newValue, u32 maxSteps) {
if (maxSteps == 0) {
params_.mPan = newValue;
transition_.pan_.remainingSteps_ = 0;
} else {
mTransition.mPan.set(newValue, mParams.mPan, count);
transition_.pan_.set(newValue, params_.mPan, maxSteps);
}
}
void JAISoundParamsMove::moveDolby(f32 newValue, u32 count) {
if (count == 0) {
mParams.mDolby = newValue;
mTransition.mDolby.mCount = 0;
void JAISoundParamsMove::moveDolby(f32 newValue, u32 maxSteps) {
if (maxSteps == 0) {
params_.mDolby = newValue;
transition_.dolby_.remainingSteps_ = 0;
} else {
mTransition.mDolby.set(newValue, mParams.mDolby, count);
transition_.dolby_.set(newValue, params_.mDolby, maxSteps);
}
}
+14 -19
View File
@@ -1,37 +1,32 @@
//
// JAISoundStarter
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAISoundStarter.h"
#include "JSystem/JAudio2/JAISoundHandles.h"
/* 802A2F6C-802A2F88 29D8AC 001C+00 0/0 1/1 0/0 .text __ct__15JAISoundStarterFb */
JAISoundStarter::JAISoundStarter(bool param_0) : JASGlobalInstance<JAISoundStarter>(param_0) {
}
JAISoundStarter::JAISoundStarter(bool setInstance) :
JASGlobalInstance<JAISoundStarter>(setInstance) {}
/* 802A2F88-802A2FEC 29D8C8 0064+00 1/0 7/7 0/0 .text __dt__15JAISoundStarterFv */
JAISoundStarter::~JAISoundStarter() {
}
JAISoundStarter::~JAISoundStarter() {}
/* 802A2FEC-802A30D4 29D92C 00E8+00 0/0 4/4 0/0 .text
* startLevelSound__15JAISoundStarterF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAISoundStarter::startLevelSound(JAISoundID param_0, JAISoundHandle* param_1,
JGeometry::TVec3<f32> const* param_2) {
if (*param_1) {
if (JAISoundID((u32)(*param_1)->soundID) == param_0) {
(*param_1)->updateLifeTime(1);
if (param_2 != NULL) {
(*param_1)->setPos(*param_2);
bool JAISoundStarter::startLevelSound(JAISoundID id, JAISoundHandle* handlePtr, const JGeometry::TVec3<f32>* posPtr) {
JUT_ASSERT(20, handlePtr);
if (*handlePtr) {
if ((*handlePtr)->getID() == id) {
(*handlePtr)->updateLifeTime(1);
if (posPtr != NULL) {
(*handlePtr)->setPos(*posPtr);
}
return true;
}
}
bool iVar2 = startSound(param_0, param_1, param_2);
if ((iVar2) && *param_1) {
(*param_1)->setLifeTime(1, false);
bool rt = startSound(id, handlePtr, posPtr);
if (rt && *handlePtr) {
(*handlePtr)->setLifeTime(1, false);
}
return iVar2;
return rt;
}
+87 -81
View File
@@ -1,55 +1,53 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStream
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAIStream.h"
#include "JSystem/JAudio2/JAIStreamMgr.h"
#include "JSystem/JAudio2/JAISoundChild.h"
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
#include "JSystem/JKernel/JKRHeap.h"
#include "JSystem/JAudio2/JAIAudience.h"
/* 802A30D4-802A3104 29DA14 0030+00 1/1 0/0 0/0 .text
* JAIStream_JASAramStreamCallback___FUlP13JASAramStreamPv */
static void JAIStream_JASAramStreamCallback_(u32 param_1, JASAramStream* param_2, void* param_3) {
switch (param_1) {
static void JAIStream_JASAramStreamCallback_(u32 type, JASAramStream* aramStream, void* userData) {
JAIStream* stream = (JAIStream*)userData;
switch (type) {
case 1:
((JAIStream*)(param_3))->field_0x2c5 = 1;
stream->field_0x2c5 = 1;
break;
case 0:
((JAIStream*)(param_3))->field_0x2c6 = 1;
stream->field_0x2c6 = 1;
break;
}
}
/* 802A3104-802A319C 29DA44 0098+00 0/0 1/1 0/0 .text
* __ct__9JAIStreamFP12JAIStreamMgrP31JAISoundStrategyMgr<9JAIStream> */
JAIStream::JAIStream(JAIStreamMgr* param_1, JAISoundStrategyMgr<JAIStream>* param_2) : JSULink<JAIStream>(this) {
JAIStream::JAIStream(JAIStreamMgr* streamMgr, JAISoundStrategyMgr<JAIStream>* soundStrategyMgr) : JSULink<JAIStream>(this) {
field_0x290 = 0;
field_0x2c0 = param_2;
field_0x2b8 = param_1;
field_0x29c = 0;
field_0x2c0 = soundStrategyMgr;
streamMgr_ = streamMgr;
streamAramAddr_ = 0;
field_0x2c5 = 0;
field_0x2c6 = 0;
for (int i = 0; i < CHANNEL_MAX; i++) {
field_0x2a0[i] = NULL;
children_[i] = NULL;
}
}
/* 802A319C-802A3230 29DADC 0094+00 0/0 1/1 0/0 .text
* JAIStreamMgr_startID___9JAIStreamF10JAISoundIDlPCQ29JGeometry8TVec3<f>P11JAIAudiencei */
void JAIStream::JAIStreamMgr_startID_(JAISoundID param_1, s32 param_2,
JGeometry::TVec3<f32> const* param_3, JAIAudience* param_4,
int param_5) {
field_0x298 = param_5;
field_0x294 = param_2;
start_JAISound_(param_1, param_3, param_4);
void JAIStream::JAIStreamMgr_startID_(JAISoundID id, s32 streamFileEntry,
const JGeometry::TVec3<f32>* posPtr, JAIAudience* audience,
int category) {
field_0x298 = category;
field_0x294 = streamFileEntry;
start_JAISound_(id, posPtr, audience);
field_0x290 = 0;
if (field_0x2c0 != NULL) {
field_0x2bc = field_0x2c0->calc(param_1);
field_0x2bc = field_0x2c0->calc(id);
} else {
field_0x2bc = NULL;
}
@@ -59,15 +57,17 @@ void JAIStream::JAIStreamMgr_startID_(JAISoundID param_1, s32 param_2,
bool JAIStream::prepare_prepareStream_() {
u32 local_28;
JAIStreamAramMgr* streamAramMgr;
switch (field_0x290) {
case 0:
streamAramMgr = field_0x2b8->getStreamAramMgr();
streamAramMgr = streamMgr_->getStreamAramMgr();
JUT_ASSERT(100, streamAramMgr);
field_0x29c = streamAramMgr->newStreamAram(&local_28);
if (field_0x29c != NULL) {
field_0x0a8.field_0x0.init((u32)field_0x29c, local_28, &JAIStream_JASAramStreamCallback_, this);
streamAramAddr_ = streamAramMgr->newStreamAram(&local_28);
if (streamAramAddr_ != NULL) {
inner_.aramStream_.init((u32)streamAramAddr_, local_28, &JAIStream_JASAramStreamCallback_, this);
field_0x290 = 1;
prepareCount = 0;
prepareCount_ = 0;
} else {
increasePrepareCount_JAISound_();
}
@@ -75,14 +75,16 @@ bool JAIStream::prepare_prepareStream_() {
case 1:
if (audible_ != NULL) {
JASSoundParams* soundParams = audible_->getOuterParams(0);
field_0x0a8.field_0x0.setPitch(soundParams->mPitch);
field_0x0a8.field_0x0.setVolume(soundParams->mVolume);
field_0x0a8.field_0x0.setPan(soundParams->mPan);
field_0x0a8.field_0x0.setFxmix(soundParams->mFxMix);
field_0x0a8.field_0x0.setDolby(soundParams->mDolby);
inner_.aramStream_.setPitch(soundParams->mPitch);
inner_.aramStream_.setVolume(soundParams->mVolume);
inner_.aramStream_.setPan(soundParams->mPan);
inner_.aramStream_.setFxmix(soundParams->mFxMix);
inner_.aramStream_.setDolby(soundParams->mDolby);
}
field_0x2c5 = 0;
if (field_0x0a8.field_0x0.prepare(field_0x294, -1)) {
if (inner_.aramStream_.prepare(field_0x294, -1)) {
field_0x290 = 2;
}
break;
@@ -97,7 +99,7 @@ bool JAIStream::prepare_prepareStream_() {
case 3:
return true;
case 4:
JUT_WARN(155, "PC must not pass here.");
JUT_WARN(155, "%s", "PC must not pass here.");
break;
}
@@ -109,7 +111,11 @@ void JAIStream::prepare_() {
if (field_0x2c6 != 0) {
return;
}
switch(status_.state.unk) {
case 6:
JUT_ASSERT(171, false);
break;
case 0:
if (prepare_prepareStream_()) {
status_.state.unk = 5;
@@ -133,7 +139,7 @@ void JAIStream::prepare_() {
/* 802A3498-802A34E4 29DDD8 004C+00 1/1 0/0 0/0 .text prepare_startStream___9JAIStreamFv
*/
void JAIStream::prepare_startStream_() {
if (field_0x0a8.field_0x0.start()) {
if (inner_.aramStream_.start()) {
field_0x2c6 = 0;
field_0x2c4 = 0;
field_0x290 = 4;
@@ -142,65 +148,64 @@ void JAIStream::prepare_startStream_() {
/* 802A34E4-802A3720 29DE24 023C+00 0/0 1/1 0/0 .text
* JAIStreamMgr_mixOut___9JAIStreamFRC14JASSoundParams16JAISoundActivity */
void JAIStream::JAIStreamMgr_mixOut_(JASSoundParams const& param_1, JAISoundActivity param_2) {
void JAIStream::JAIStreamMgr_mixOut_(const JASSoundParams& inParams, JAISoundActivity activity) {
bool local_54;
JASSoundParams local_4c;
params.mixOutAll(param_1, &local_4c, (status_.isMute() || param_2.field_0x0.flags.flag1) ? 0.0f : fader.getIntensity());
JASSoundParams outParams;
params_.mixOutAll(inParams, &outParams, (status_.isMute() || activity.field_0x0.flags.flag1) ? 0.0f : fader_.getIntensity());
if (field_0x2bc != NULL) {
field_0x2bc->virtual4(this, local_4c);
field_0x2bc->virtual4(this, outParams);
}
JASSoundParams* mixParams = &local_4c;
JASSoundParams* mixParams = &outParams;
if (audible_ != NULL && audience_ != NULL) {
for (int i = 0; i < audience_->getMaxChannels(); i++) {
JASSoundParams* outerParams = audible_->getOuterParams(i);
if (outerParams != NULL) {
audience_->mixChannelOut(local_4c, audible_, i);
audience_->mixChannelOut(outParams, audible_, i);
mixParams = outerParams;
break;
}
}
}
for (int i = 0; i < CHANNEL_MAX; i++) {
field_0x0a8.field_0x0.setPitch(mixParams->mPitch);
if (field_0x2a0[i] != NULL) {
field_0x0a8.field_0x0.setChannelVolume(i, field_0x2a0[i]->mMove.mParams.mVolume *
mixParams->mVolume);
field_0x0a8.field_0x0.setChannelPan(
i, (field_0x2a0[i]->mMove.mParams.mPan + mixParams->mPan) - 0.5f);
field_0x0a8.field_0x0.setChannelFxmix(i, field_0x2a0[i]->mMove.mParams.mFxMix +
mixParams->mFxMix);
field_0x0a8.field_0x0.setChannelDolby(i, field_0x2a0[i]->mMove.mParams.mDolby +
mixParams->mDolby);
inner_.aramStream_.setPitch(mixParams->mPitch);
if (children_[i] != NULL) {
inner_.aramStream_.setChannelVolume(i, children_[i]->mMove.params_.mVolume * mixParams->mVolume);
inner_.aramStream_.setChannelPan(i, (children_[i]->mMove.params_.mPan + mixParams->mPan) - 0.5f);
inner_.aramStream_.setChannelFxmix(i, children_[i]->mMove.params_.mFxMix + mixParams->mFxMix);
inner_.aramStream_.setChannelDolby(i, children_[i]->mMove.params_.mDolby + mixParams->mDolby);
} else {
field_0x0a8.field_0x0.setChannelVolume(i, mixParams->mVolume);
field_0x0a8.field_0x0.setChannelPan(i, mixParams->mPan);
field_0x0a8.field_0x0.setChannelFxmix(i, mixParams->mFxMix);
field_0x0a8.field_0x0.setChannelDolby(i, mixParams->mDolby);
inner_.aramStream_.setChannelVolume(i, mixParams->mVolume);
inner_.aramStream_.setChannelPan(i, mixParams->mPan);
inner_.aramStream_.setChannelFxmix(i, mixParams->mFxMix);
inner_.aramStream_.setChannelDolby(i, mixParams->mDolby);
}
}
prepare_();
if (field_0x290 == 4) {
local_54 = false;
if (status_.isPaused() || param_2.field_0x0.flags.flag2) {
local_54 = true;
}
local_54 = status_.isPaused() || activity.field_0x0.flags.flag2;
if (local_54 != field_0x2c4) {
field_0x0a8.field_0x0.pause(local_54);
inner_.aramStream_.pause(local_54);
field_0x2c4 = local_54;
}
}
}
/* 802A3720-802A37FC 29E060 00DC+00 1/1 0/0 0/0 .text die_JAIStream___9JAIStreamFv */
// NONMATCHING JASPolAllocObject<_> locations
void JAIStream::die_JAIStream_() {
die_JAISound_();
for (int i = 0; i < CHANNEL_MAX; i++) {
if (field_0x2a0[i] != NULL) {
delete field_0x2a0[i];
field_0x2a0[i] = NULL;
if (children_[i] != NULL) {
delete children_[i];
children_[i] = NULL;
}
}
if (field_0x2bc != NULL) {
field_0x2c0->virtual4(field_0x2bc);
field_0x2bc = NULL;
@@ -213,6 +218,7 @@ bool JAIStream::JAISound_tryDie_() {
die_JAIStream_();
return true;
}
switch (field_0x290) {
case 0:
case 1:
@@ -221,11 +227,11 @@ bool JAIStream::JAISound_tryDie_() {
case 2:
case 3:
field_0x290 = 5;
field_0x0a8.field_0x0.cancel();
inner_.aramStream_.cancel();
break;
case 4:
field_0x290 = 6;
field_0x0a8.field_0x0.stop(10);
inner_.aramStream_.stop(10);
break;
}
@@ -238,12 +244,14 @@ void JAIStream::JAIStreamMgr_calc_() {
field_0x290 = 0;
stop_JAISound_();
}
if (calc_JAISound_()) {
for (int i = 0; i < CHANNEL_MAX; i++) {
if (field_0x2a0[i] != NULL) {
field_0x2a0[i]->calc();
if (children_[i] != NULL) {
children_[i]->calc();
}
}
if (field_0x2bc != NULL) {
field_0x2bc->calc(this);
}
@@ -252,27 +260,25 @@ void JAIStream::JAIStreamMgr_calc_() {
/* 802A3948-802A3950 29E288 0008+00 1/0 0/0 0/0 .text getNumChild__9JAIStreamCFv */
s32 JAIStream::getNumChild() const {
return 6;
return NUM_CHILDREN;
}
/* 802A3950-802A3A24 29E290 00D4+00 1/0 0/0 0/0 .text getChild__9JAIStreamFi */
// NONMATCHING JASPoolAllocObject<_> locations
JAISoundChild* JAIStream::getChild(int i_idx) {
if (field_0x2a0[i_idx] == NULL) {
field_0x2a0[i_idx] = new JAISoundChild();
if (field_0x2a0[i_idx] == NULL) {
JUT_WARN(370, "JASPoolAllocObject::<JAISoundChild>::operator new failed .")
JAISoundChild* JAIStream::getChild(int index) {
if (children_[index] == NULL) {
children_[index] = new JAISoundChild();
if (children_[index] == NULL) {
JUT_WARN(370, "%s", "JASPoolAllocObject::<JAISoundChild>::operator new failed .")
}
}
return field_0x2a0[i_idx];
return children_[index];
}
/* 802A3A24-802A3ABC 29E364 0098+00 1/0 0/0 0/0 .text releaseChild__9JAIStreamFi */
// NONMATCHING JASPoolAllocObject<_> locations
void JAIStream::releaseChild(int i_idx) {
if (field_0x2a0[i_idx] != NULL) {
delete field_0x2a0[i_idx];
field_0x2a0[i_idx] = NULL;
void JAIStream::releaseChild(int index) {
if (children_[index] != NULL) {
delete children_[index];
children_[index] = NULL;
}
}
+6 -2
View File
@@ -2,6 +2,10 @@
#include "JSystem/JAudio2/JAIStreamDataMgr.h"
JAIStreamDataMgr::~JAIStreamDataMgr() {}
JAIStreamDataMgr::~JAIStreamDataMgr() {
JUT_ASSERT(11, false);
}
JAIStreamAramMgr::~JAIStreamAramMgr() {}
JAIStreamAramMgr::~JAIStreamAramMgr() {
JUT_ASSERT(16, false);
}
+52 -44
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAIStreamMgr
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAIStreamMgr.h"
@@ -11,115 +6,128 @@
#include "JSystem/JAudio2/JAISoundInfo.h"
/* 802A3B68-802A3C3C 29E4A8 00D4+00 0/0 1/1 0/0 .text __ct__12JAIStreamMgrFb */
JAIStreamMgr::JAIStreamMgr(bool param_0) : JASGlobalInstance<JAIStreamMgr>(param_0) {
JAIStreamMgr::JAIStreamMgr(bool setInstance) : JASGlobalInstance<JAIStreamMgr>(setInstance) {
streamDataMgr_ = NULL;
mStreamAramMgr = NULL;
field_0x6c = NULL;
field_0x54 = NULL;
mAudience = NULL;
mParams.init();
mActivity.init();
}
/* 802A3C3C-802A3D70 29E57C 0134+00 0/0 1/1 0/0 .text
* startSound__12JAIStreamMgrF10JAISoundIDP14JAISoundHandlePCQ29JGeometry8TVec3<f> */
bool JAIStreamMgr::startSound(JAISoundID param_1, JAISoundHandle* param_2,
JGeometry::TVec3<f32> const* param_3) {
bool JAIStreamMgr::startSound(JAISoundID id, JAISoundHandle* handle, const JGeometry::TVec3<f32>* posPtr) {
JUT_ASSERT(37, streamDataMgr_);
if (param_2 != NULL && *param_2) {
(*param_2)->stop();
if (handle != NULL && *handle) {
(*handle)->stop();
}
s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(param_1);
s32 streamFileEntry = streamDataMgr_->getStreamFileEntry(id);
if (streamFileEntry < 0) {
JUT_WARN(46, "Cannot find the stream file entry for ID:%08x\n", param_1.mId.mFullId)
JUT_WARN(46, "Cannot find the stream file entry for ID:%08x\n", id.id_.composite_)
return false;
}
JAIStream* stream = newStream_();
JAISoundInfo* piVar5 = JASGlobalInstance<JAISoundInfo>::getInstance();
int iVar2 = -1;
if (piVar5 != NULL) {
iVar2 = piVar5->getCategory(param_1);
JAISoundInfo* soundInfo = JASGlobalInstance<JAISoundInfo>::getInstance();
int category = -1;
if (soundInfo != NULL) {
category = soundInfo->getCategory(id);
}
if (stream == NULL) {
return false;
}
stream->JAIStreamMgr_startID_(param_1, streamFileEntry, param_3, field_0x54, iVar2);
if (piVar5 != NULL) {
piVar5->getStreamInfo(param_1, stream);
stream->JAIStreamMgr_startID_(id, streamFileEntry, posPtr, mAudience, category);
if (soundInfo != NULL) {
soundInfo->getStreamInfo(id, stream);
}
if (param_2 != NULL) {
stream->attachHandle(param_2);
if (handle != NULL) {
stream->attachHandle(handle);
}
return false;
}
/* 802A3D70-802A3E68 29E6B0 00F8+00 1/1 0/0 0/0 .text freeDeadStream___12JAIStreamMgrFv
*/
void JAIStreamMgr::freeDeadStream_() {
JSULink<JAIStream>* link = mStreamList.getFirst();
while (link != NULL) {
JAIStream* stream = link->getObject();
JSULink<JAIStream>* next = link->getNext();
JSULink<JAIStream>* i = mStreamList.getFirst();
while (i != NULL) {
JAIStream* stream = i->getObject();
JSULink<JAIStream>* next = i->getNext();
if (stream->status_.isDead()) {
mStreamList.remove(link);
mStreamList.remove(i);
void* aramAddr = stream->JAIStreamMgr_getAramAddr_();
if (aramAddr != NULL) {
mStreamAramMgr->deleteStreamAram((u32)aramAddr);
bool result = mStreamAramMgr->deleteStreamAram((u32)aramAddr);
JUT_ASSERT(105, result);
}
delete stream;
}
link = next;
i = next;
}
}
/* 802A3EBC-802A4028 29E7FC 016C+00 0/0 1/1 0/0 .text calc__12JAIStreamMgrFv */
void JAIStreamMgr::calc() {
JSULink<JAIStream>* i;
mParams.calc();
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_calc_();
for (i = mStreamList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->JAIStreamMgr_calc_();
}
freeDeadStream_();
}
/* 802A4028-802A4068 29E968 0040+00 0/0 1/1 0/0 .text stop__12JAIStreamMgrFv */
void JAIStreamMgr::stop() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop();
JSULink<JAIStream>* i;
for (i = mStreamList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop();
}
}
/* 802A4068-802A40B8 29E9A8 0050+00 0/0 2/2 0/0 .text stop__12JAIStreamMgrFUl */
void JAIStreamMgr::stop(u32 param_0) {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->stop(param_0);
void JAIStreamMgr::stop(u32 fadeTime) {
JSULink<JAIStream>* i;
for (i = mStreamList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->stop(fadeTime);
}
}
/* 802A40B8-802A4118 29E9F8 0060+00 0/0 1/1 0/0 .text stopSoundID__12JAIStreamMgrF10JAISoundID */
void JAIStreamMgr::stopSoundID(JAISoundID param_0) {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
if ((u32)link->getObject()->getID() == (u32)param_0) {
link->getObject()->stop();
void JAIStreamMgr::stopSoundID(JAISoundID id) {
JSULink<JAIStream>* i;
for (i = mStreamList.getFirst(); i != NULL; i = i->getNext()) {
if ((u32)i->getObject()->getID() == (u32)id) {
i->getObject()->stop();
}
}
}
/* 802A4118-802A4174 29EA58 005C+00 0/0 1/1 0/0 .text mixOut__12JAIStreamMgrFv */
void JAIStreamMgr::mixOut() {
for (JSULink<JAIStream>* link = mStreamList.getFirst(); link != NULL; link = link->getNext()) {
link->getObject()->JAIStreamMgr_mixOut_(mParams.mParams, mActivity);
JSULink<JAIStream>* i;
for (i = mStreamList.getFirst(); i != NULL; i = i->getNext()) {
i->getObject()->JAIStreamMgr_mixOut_(mParams.params_, mActivity);
}
}
/* 802A4174-802A4244 29EAB4 00D0+00 1/1 0/0 0/0 .text newStream___12JAIStreamMgrFv */
JAIStream* JAIStreamMgr::newStream_() {
if (mStreamAramMgr == NULL) {
JUT_WARN(229, "JAIStreamAramMgr must be set.\n");
JUT_WARN(229, "%s", "JAIStreamAramMgr must be set.\n");
return NULL;
}
JAIStream* stream = new JAIStream(this, field_0x6c);
if (stream == NULL) {
JUT_WARN(235, "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
JUT_WARN(235, "%s", "JASPoolAllocObject::<JAIStream>::operator new failed .\n");
return NULL;
}
+29 -29
View File
@@ -1,34 +1,32 @@
//
// JASCalc
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASCalc.h"
#include <dolphin/os.h>
#include "math.h"
#include "limits.h"
#include <math.h>
#include <limits.h>
/* 8028F2E8-8028F318 289C28 0030+00 0/0 1/1 0/0 .text imixcopy__7JASCalcFPCsPCsPsUl */
void JASCalc::imixcopy(const s16 *s1, const s16 *s2, s16 *dst, u32 n) {
void JASCalc::imixcopy(const s16* s1, const s16* s2, s16* dst, u32 n) {
for (n; n != 0; n--) {
*dst++ = *((s16 *)s1)++;
*dst++ = *((s16 *)s2)++;
*dst++ = *((s16*)s1)++;
*dst++ = *((s16*)s2)++;
}
}
/* 8028F318-8028F354 289C58 003C+00 1/1 0/0 0/0 .text bcopyfast__7JASCalcFPCvPvUl */
void JASCalc::bcopyfast(const void *src, void *dest, u32 size) {
u32 copy1, copy2, copy3, copy4;
void JASCalc::bcopyfast(const void* src, void* dest, u32 size) {
JUT_ASSERT(226, (reinterpret_cast<u32>(src) & 0x03) == 0);
JUT_ASSERT(227, (reinterpret_cast<u32>(dest) & 0x03) == 0);
JUT_ASSERT(228, (size & 0x0f) == 0);
u32 *usrc = (u32 *)src;
u32 *udest = (u32 *)dest;
u32 copy1, copy2, copy3, copy4;
u32* usrc = (u32*)src;
u32* udest = (u32*)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
copy1 = *((u32 *)usrc)++;
copy2 = *((u32 *)usrc)++;
copy3 = *((u32 *)usrc)++;
copy4 = *((u32 *)usrc)++;
copy1 = *((u32*)usrc)++;
copy2 = *((u32*)usrc)++;
copy3 = *((u32*)usrc)++;
copy4 = *((u32*)usrc)++;
*udest++ = copy1;
*udest++ = copy2;
@@ -38,12 +36,12 @@ void JASCalc::bcopyfast(const void *src, void *dest, u32 size) {
}
/* 8028F354-8028F454 289C94 0100+00 0/0 3/3 0/0 .text bcopy__7JASCalcFPCvPvUl */
void JASCalc::bcopy(const void *src, void *dest, u32 size) {
u32 *usrc;
u32 *udest;
void JASCalc::bcopy(const void* src, void* dest, u32 size) {
u32* usrc;
u32* udest;
u8 *bsrc = (u8 *)src;
u8 *bdest = (u8 *)dest;
u8* bsrc = (u8*)src;
u8* bdest = (u8*)dest;
u8 endbitsSrc = (reinterpret_cast<u32>(bsrc) & 0x03);
u8 enbitsDst = (reinterpret_cast<u32>(bdest) & 0x03);
@@ -82,8 +80,11 @@ void JASCalc::bcopy(const void *src, void *dest, u32 size) {
}
/* 8028F454-8028F480 289D94 002C+00 1/1 0/0 0/0 .text bzerofast__7JASCalcFPvUl */
void JASCalc::bzerofast(void *dest, u32 size) {
u32 *udest = (u32 *)dest;
void JASCalc::bzerofast(void* dest, u32 size) {
JUT_ASSERT(336, (reinterpret_cast<u32>(dest) & 0x03) == 0);
JUT_ASSERT(337, (size & 0x0f) == 0);
u32* udest = (u32*)dest;
for (size = size / (4 * sizeof(u32)); size != 0; size--) {
*udest++ = 0;
@@ -94,9 +95,9 @@ void JASCalc::bzerofast(void *dest, u32 size) {
}
/* 8028F480-8028F578 289DC0 00F8+00 0/0 6/6 0/0 .text bzero__7JASCalcFPvUl */
void JASCalc::bzero(void *dest, u32 size) {
u32 *udest;
u8 *bdest = (u8 *)dest;
void JASCalc::bzero(void* dest, u32 size) {
u32* udest;
u8* bdest = (u8*)dest;
if ((size & 0x1f) == 0 && (reinterpret_cast<u32>(dest) & 0x1f) == 0) {
DCZeroRange(dest, size);
return;
@@ -136,7 +137,6 @@ void JASCalc::bzero(void *dest, u32 size) {
}
}
/* ############################################################################################## */
/* 8039ABB8-8039AFB8 027218 0400+00 0/0 4/4 0/0 .rodata CUTOFF_TO_IIR_TABLE__7JASCalc */
s16 const JASCalc::CUTOFF_TO_IIR_TABLE[128][4] = {
0x0F5C, 0x0A3D, 0x4665, 0x1E73,
+15 -20
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JASCallback
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASCallback.h"
@@ -10,28 +5,28 @@
/* 8028FFA8-80290030 28A8E8 0088+00 0/0 2/2 0/0 .text regist__14JASCallbackMgrFPFPv_lPv
*/
bool JASCallbackMgr::regist(JASCallback* function, void* argument)
{
bool JASCallbackMgr::regist(JASCallback* callback, void* argument) {
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == NULL) {
mCallbacks[i].mFunction = function;
mCallbacks[i].mArgument = argument;
for (int i = 0; i < NUM_CALLBACKS; i++) {
if (callbacks_[i].callback_ == NULL) {
callbacks_[i].callback_ = callback;
callbacks_[i].arg_ = argument;
return true;
}
}
return false;
}
/* 80290030-802900C4 28A970 0094+00 0/0 1/1 0/0 .text reject__14JASCallbackMgrFPFPv_lPv
*/
int JASCallbackMgr::reject(JASCallback* function, void* argument) {
int JASCallbackMgr::reject(JASCallback* callback, void* argument) {
int rejectNum = 0;
JASCriticalSection criticalSection;
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction == function && mCallbacks[i].mArgument == argument) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
for (int i = 0; i < NUM_CALLBACKS; i++) {
if (callbacks_[i].callback_ == callback && callbacks_[i].arg_ == argument) {
callbacks_[i].callback_ = NULL;
callbacks_[i].arg_ = NULL;
rejectNum++;
}
}
@@ -40,10 +35,10 @@ int JASCallbackMgr::reject(JASCallback* function, void* argument) {
/* 802900C4-80290140 28AA04 007C+00 0/0 3/3 0/0 .text callback__14JASCallbackMgrFv */
void JASCallbackMgr::callback() {
for (int i = 0; i < 0x20; i++) {
if (mCallbacks[i].mFunction && mCallbacks[i].mFunction(mCallbacks[i].mArgument) < 0) {
mCallbacks[i].mFunction = NULL;
mCallbacks[i].mArgument = NULL;
for (int i = 0; i < NUM_CALLBACKS; i++) {
if (callbacks_[i].callback_ && callbacks_[i].callback_(callbacks_[i].arg_) < 0) {
callbacks_[i].callback_ = NULL;
callbacks_[i].arg_ = NULL;
}
}
}
+14 -12
View File
@@ -1,16 +1,9 @@
//
// Generated By: dol2asm
// Translation Unit: JASDvdThread
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/types.h"
/* ############################################################################################## */
/* 80451208-80451210 000708 0004+04 2/1 0/0 0/0 .sbss sThread__6JASDvd */
JASTaskThread* JASDvd::sThread;
@@ -20,10 +13,19 @@ JASTaskThread* JASDvd::getThreadPointer() {
}
/* 8028FF04-8028FFA8 28A844 00A4+00 0/0 1/1 0/0 .text createThread__6JASDvdFliUl */
bool JASDvd::createThread(s32 priority, int param_1, u32 param_2) {
if (sThread != NULL) return false;
sThread = new (JASDram, 0) JASTaskThread(priority, param_1, param_2);
sThread->setCurrentHeap(JKRGetSystemHeap());
OSResumeThread(sThread->getThreadRecord());
bool JASDvd::createThread(s32 priority, int msgCount, u32 stackSize) {
if (sThread != NULL) {
JUT_WARN_DEVICE(32, 2, "%s", "JASDvd::createThread が2回呼び出されました");
return false;
}
sThread = new (JASDram, 0) JASTaskThread(priority, msgCount, stackSize);
JUT_ASSERT(36, sThread);
JKRHeap* pCurrentHeap = JKRGetSystemHeap();
JUT_ASSERT(38, pCurrentHeap);
sThread->setCurrentHeap(pCurrentHeap);
sThread->resume();
return true;
}
-5
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JASHeapCtrl
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASHeapCtrl.h"
+42 -40
View File
@@ -1,20 +1,16 @@
//
// Generated By: dol2asm
// Translation Unit: JASTaskThread
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JAudio2/JASCalc.h"
#include "JSystem/JAudio2/JASCriticalSection.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "dolphin/os.h"
/* 8028F6C4-8028F724 28A004 0060+00 0/0 1/1 0/0 .text __ct__13JASTaskThreadFiiUl */
JASTaskThread::JASTaskThread(int param_0, int param_1, u32 param_2) : JKRThread(JASDram, param_2, param_1, param_0) {
JASTaskThread::JASTaskThread(int priority, int msgCount, u32 stackSize) :
JKRThread(JASDram, stackSize, msgCount, priority)
{
field_0x84 = false;
OSInitThreadQueue(&mpThreadQueue);
OSInitThreadQueue(&threadQueue_);
}
/* 8028F724-8028F850 28A064 012C+00 1/0 0/0 0/0 .text __dt__13JASTaskThreadFv */
@@ -32,58 +28,62 @@ JASTaskThread::~JASTaskThread() {
/* 8028F850-8028F9EC 28A190 019C+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPCvUl
*/
void* JASTaskThread::allocCallStack(void (*param_0)(void*), void const* param_1, u32 param_2) {
void* JASTaskThread::allocCallStack(JASThreadCallback callback, const void* msg, u32 msgSize) {
ThreadMemPool* heap;
u32 size = param_2 + 8;
u32 size = msgSize + 8;
JASThreadCallStack *callStack = (JASThreadCallStack*) JASKernel::getCommandHeap()->alloc(size);
if (callStack == NULL) {
return NULL;
}
callStack->field_0x4 = 1;
JASCalc::bcopy(param_1, callStack->field_0x8.buffer, param_2);
callStack->mRunFunc = param_0;
callStack->msgType_ = 1;
JASCalc::bcopy(msg, callStack->msg.buffer, msgSize);
callStack->callback_ = callback;
return callStack;
}
/* 8028F9EC-8028FB5C 28A32C 0170+00 1/1 0/0 0/0 .text allocCallStack__13JASTaskThreadFPFPv_vPv */
void* JASTaskThread::allocCallStack(void (*runFunc)(void*), void* param_1) {
void* JASTaskThread::allocCallStack(JASThreadCallback callback, void* msg) {
JASThreadCallStack *callStack;
callStack = (JASThreadCallStack*)JASKernel::getCommandHeap()->alloc(0xc);
callStack = (JASThreadCallStack*)JASKernel::getCommandHeap()->alloc(12);
if (callStack == NULL) {
return NULL;
}
callStack->field_0x4 = 0;
callStack->field_0x8.pBuffer = param_1;
callStack->mRunFunc = runFunc;
callStack->msgType_ = 0;
callStack->msg.bufferPtr = msg;
callStack->callback_ = callback;
return callStack;
}
/* 8028FB5C-8028FC54 28A49C 00F8+00 0/0 6/6 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPCvUl */
int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void const* param_1, u32 param_2) {
void* pvVar1;
int JASTaskThread::sendCmdMsg(JASThreadCallback callback, const void* msg, u32 msgSize) {
void* callstack;
pvVar1 = allocCallStack(param_0, param_1, param_2);
if (pvVar1 == NULL) {
callstack = allocCallStack(callback, msg, msgSize);
if (callstack == NULL) {
return 0;
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
JASKernel::getCommandHeap()->free(pvVar1);
BOOL iVar2 = sendMessage(callstack);
if (!iVar2) {
JASKernel::getCommandHeap()->free(callstack);
}
return iVar2;
}
/* 8028FC54-8028FD4C 28A594 00F8+00 0/0 3/3 0/0 .text sendCmdMsg__13JASTaskThreadFPFPv_vPv */
int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
void* pvVar1;
int JASTaskThread::sendCmdMsg(JASThreadCallback callback, void* msg) {
void* callstack;
pvVar1 = allocCallStack(param_0, param_1);
if (pvVar1 == NULL) {
callstack = allocCallStack(callback, msg);
if (callstack == NULL) {
return 0;
}
int iVar2 = sendMessage(pvVar1);
if (iVar2 == 0) {
JASKernel::getCommandHeap()->free(pvVar1);
BOOL iVar2 = sendMessage(callstack);
if (!iVar2) {
JASKernel::getCommandHeap()->free(callstack);
}
return iVar2;
}
@@ -91,19 +91,21 @@ int JASTaskThread::sendCmdMsg(void (*param_0)(void*), void* param_1) {
/* 8028FD4C-8028FE88 28A68C 013C+00 1/0 0/0 0/0 .text run__13JASTaskThreadFv */
// NONMATCHING Regalloc
void* JASTaskThread::run() {
JASThreadCallStack* ppcVar1;
JASThreadCallStack* callstack;
OSInitFastCast();
do {
ppcVar1 = (JASThreadCallStack*)waitMessageBlock();
callstack = (JASThreadCallStack*)waitMessageBlock();
if (field_0x84) {
OSSleepThread(&mpThreadQueue);
OSSleepThread(&threadQueue_);
}
if (ppcVar1->field_0x4) {
ppcVar1->mRunFunc(ppcVar1->field_0x8.buffer);
if (callstack->msgType_) {
callstack->callback_(callstack->msg.buffer);
} else {
ppcVar1->mRunFunc(ppcVar1->field_0x8.pBuffer);
callstack->callback_(callstack->msg.bufferPtr);
}
JASKernel::getCommandHeap()->free(ppcVar1);
JASKernel::getCommandHeap()->free(callstack);
} while (true);
}
@@ -114,7 +116,7 @@ void JASTaskThread::pause(bool param_0) {
field_0x84 = 1;
} else {
if (field_0x84) {
OSWakeupThread(&mpThreadQueue);
OSWakeupThread(&threadQueue_);
}
field_0x84 = 0;
}
-5
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JASTrack
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JASTrack.h"
+43 -38
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JAUInitializer
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAUInitializer.h"
@@ -14,69 +9,78 @@
#include "JSystem/JAudio2/JASAudioThread.h"
#include "JSystem/JAudio2/JASDriverIF.h"
#include "JSystem/JAudio2/JASDvdThread.h"
#include "JSystem/JAudio2/JASTaskThread.h"
#include "JSystem/JAudio2/JASTrack.h"
#include "JSystem/JAudio2/JASWaveArcLoader.h"
#include "JSystem/JKernel/JKRAram.h"
#include "JSystem/JKernel/JKRSolidHeap.h"
#include "JSystem/JKernel/JKRThread.h"
#include <dolphin/os.h>
/* 802A4AD0-802A4B28 29F410 0058+00 0/0 1/1 0/0 .text __ct__18JAU_JASInitializerFv */
JAU_JASInitializer::JAU_JASInitializer() {
field_0x00 = 0;
field_0x04 = 0;
field_0x14 = -1;
field_0x18 = -1;
field_0x08 = 0x1000;
field_0x0c = 3;
field_0x10 = 2;
audioMemory_ = 0;
audioMemSize_ = 0;
dvdThreadId_ = -1;
audioThreadId_ = -1;
heapSize_ = 0x1000;
dvdThreadPriority_ = 3;
audioThreadPriority_ = 2;
field_0x1c = 0x80;
field_0x2c = 1.0f;
field_0x24 = 0x2760;
field_0x28 = 2;
dspLevel_ = 1.0f;
aramBlockSize_ = 0x2760;
aramChannelNum_ = 2;
field_0x20 = 0;
field_0x30 = NULL;
waveArcDir_ = NULL;
}
/* 802A4B28-802A4D3C 29F468 0214+00 0/0 1/1 0/0 .text
* initJASystem__18JAU_JASInitializerFP12JKRSolidHeap */
// NONMATCHING JASPoolAllocObject_MultiThreaded<_> locations
void JAU_JASInitializer::initJASystem(JKRSolidHeap* param_0) {
void JAU_JASInitializer::initJASystem(JKRSolidHeap* heap) {
if (JASAudioThread::getThreadPointer()) {
JUT_WARN(48, "%s", "Though initialized JASAudioThread, called JAU_JASInitializer::initJASystem()\n");
} else if (JASDvd::getThreadPointer()) {
JUT_WARN(52, "%s", "Though initialized JASDvd, called JAU_JASInitializer::initJASystem()\n");
} else {
JASKernel::setupRootHeap(param_0, field_0x08);
if (field_0x00 == 0) {
field_0x00 = JKRAram::getManager()->getAudioMemory();
JASKernel::setupRootHeap(heap, heapSize_);
if (audioMemory_ == 0) {
audioMemory_ = JKRAram::getManager()->getAudioMemory();
}
if (field_0x04 == 0) {
field_0x04 = JKRAram::getManager()->getAudioMemSize();
if (audioMemSize_ == 0) {
audioMemSize_ = JKRAram::getManager()->getAudioMemSize();
}
JASKernel::setupAramHeap(field_0x00, field_0x04);
JASKernel::setupAramHeap(audioMemory_, audioMemSize_);
JASTrack::newMemPool(field_0x1c);
if (field_0x20 > 0) {
JASTrack::TChannelMgr::newMemPool(field_0x20);
}
JASDvd::createThread(field_0x0c,0x80,0x1000);
JASAudioThread::create(field_0x10);
JASDvd::createThread(dvdThreadPriority_, 0x80, 0x1000);
JASAudioThread::create(audioThreadPriority_);
JKRThreadSwitch* threadSwitch = JKRThreadSwitch::getManager();
if (threadSwitch) {
if (field_0x14 >= 0) {
threadSwitch->enter(JASDvd::getThreadPointer(), field_0x14);
if (dvdThreadId_ >= 0) {
threadSwitch->enter(JASDvd::getThreadPointer(), dvdThreadId_);
}
if (field_0x18 >= 0) {
threadSwitch->enter(JASAudioThread::getThreadPointer(), field_0x18);
if (audioThreadId_ >= 0) {
threadSwitch->enter(JASAudioThread::getThreadPointer(), audioThreadId_);
}
}
JASDriver::setDSPLevel(field_0x2c);
JASAramStream::initSystem(field_0x24,field_0x28);
JASDriver::setDSPLevel(dspLevel_);
JASAramStream::initSystem(aramBlockSize_, aramChannelNum_);
}
if (field_0x30) {
JASWaveArcLoader::setCurrentDir(field_0x30);
if (waveArcDir_) {
JASWaveArcLoader::setCurrentDir(waveArcDir_);
}
#if PLATFORM_SHIELD
JASDriver::setOutputMode(1);
#else
switch (OSGetSoundMode()) {
case 0:
JASDriver::setOutputMode(0);
@@ -85,6 +89,7 @@ void JAU_JASInitializer::initJASystem(JKRSolidHeap* param_0) {
JASDriver::setOutputMode(1);
break;
}
#endif
}
/* 802A4D3C-802A4D60 29F67C 0024+00 0/0 1/1 0/0 .text __ct__18JAU_JAIInitializerFv */
@@ -104,5 +109,5 @@ void JAU_JAIInitializer::initJAInterface() {
JAISe::newMemPool(field_0x0);
JAISoundChild::newMemPool(field_0xc);
s32 r29 = JASDram->getFreeSize();
//OSReport("JAU_JAIInitializer uses %d bytes\n", r30 - r29);
OS_REPORT("JAU_JAIInitializer uses %d bytes\n", r30 - r29);
}
+3 -3
View File
@@ -52,7 +52,7 @@ namespace {
}
}
virtual s32 getStreamFileEntry(JAISoundID id) {
u32 short_id = id.mId.mAdvancedId.mShortId;
u32 short_id = id.id_.info.waveID;
if (short_id >= field_0x4) {
return -1;
}
@@ -455,8 +455,8 @@ bool JAUSectionHeap::loadDynamicSeq(JAISoundID param_0, bool param_1) {
/* 802A5EF8-802A5F24 2A0838 002C+00 0/0 1/1 0/0 .text
* releaseIdleDynamicSeqDataBlock__14JAUSectionHeapFv */
void JAUSectionHeap::releaseIdleDynamicSeqDataBlock() {
sectionHeapData_.seqDataBlocks.releaseIdleDynamicSeqDataBlock(sectionHeapData_.seqDataUser);
u32 JAUSectionHeap::releaseIdleDynamicSeqDataBlock() {
return sectionHeapData_.seqDataBlocks.releaseIdleDynamicSeqDataBlock(sectionHeapData_.seqDataUser);
}
/* 802A5F24-802A5F9C 2A0864 0078+00 1/1 0/0 0/0 .text JAUNewSectionHeap__FP12JKRSolidHeapb */
+1 -1
View File
@@ -82,7 +82,7 @@ JAUSeqDataMgr_SeqCollection::SeqDataReturnValue JAUSeqDataMgr_SeqCollection::get
if (!isValid()) {
return SeqDataReturnValue_0;
}
if (JAUSeqCollection::getSeqData(param_0.mId.mBytes.b1, param_0.mId.mAdvancedId.mShortId, param_1)) {
if (JAUSeqCollection::getSeqData(param_0.id_.info.type.parts.groupID, param_0.id_.info.waveID, param_1)) {
return SeqDataReturnValue_2;
}
return SeqDataReturnValue_0;
+6 -6
View File
@@ -21,15 +21,15 @@ u8 JAUSoundTable::getTypeID(JAISoundID param_0) const {
if (param_0.isAnonymous()) {
return 0xff;
}
JAUSoundTableSection* section = field_0x0.getSection(param_0.mId.mBytes.b0);
JAUSoundTableSection* section = field_0x0.getSection(param_0.id_.info.type.parts.sectionID);
if (section == NULL) {
return 0xff;
}
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.mId.mBytes.b1);
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.id_.info.type.parts.groupID);
if (group == NULL) {
return 0xff;
}
return group->getTypeID(param_0.mId.mAdvancedId.mShortId);
return group->getTypeID(param_0.id_.info.waveID);
}
/* 802A728C-802A73D4 2A1BCC 0148+00 0/0 7/7 0/0 .text getData__13JAUSoundTableCF10JAISoundID */
@@ -37,15 +37,15 @@ JAUSoundTableItem* JAUSoundTable::getData(JAISoundID param_0) const {
if (param_0.isAnonymous()) {
return NULL;
}
JAUSoundTableSection* section = field_0x0.getSection(param_0.mId.mBytes.b0);
JAUSoundTableSection* section = field_0x0.getSection(param_0.id_.info.type.parts.sectionID);
if (section == NULL) {
return NULL;
}
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.mId.mBytes.b1);
JAUSoundTableGroup* group = field_0x0.getGroup(section, param_0.id_.info.type.parts.groupID);
if (group == NULL) {
return NULL;
}
return getItem(group, param_0.mId.mAdvancedId.mShortId);
return getItem(group, param_0.id_.info.waveID);
}
/* 802A73D4-802A7420 2A1D14 004C+00 0/0 1/1 0/0 .text init__17JAUSoundNameTableFPCv */
+1 -2
View File
@@ -1,7 +1,6 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/JAUStreamFileTable.h"
#include "dolphin/os.h"
/* 802A7420-802A742C 2A1D60 000C+00 0/0 1/1 0/0 .text __ct__18JAUStreamFileTableFv */
JAUStreamFileTable::JAUStreamFileTable() {
@@ -40,7 +39,7 @@ const char* JAUStreamFileTable::getFilePath(int index) const {
/* 802A74AC-802A74E8 2A1DEC 003C+00 1/0 0/0 0/0 .text
* getStreamFileEntry__32JAUStreamDataMgr_StreamFileTableF10JAISoundID */
s32 JAUStreamDataMgr_StreamFileTable::getStreamFileEntry(JAISoundID soundId) {
const char* filePath = getFilePath(soundId.mId.mAdvancedId.mShortId);
const char* filePath = getFilePath(soundId.id_.info.waveID);
if (filePath == NULL) {
return -1;
}
+10 -13
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: dspproc
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/dspproc.h"
@@ -13,9 +8,9 @@
void DSPReleaseHalt2(u32 msg) {
u32 msgs[2];
u16 dspMap = DSP_CreateMap2(msg);
msgs[0] = (msg<<16) | dspMap;
msgs[0] = (msg << 16) | dspMap;
DSPSendCommands2(msgs,0,NULL);
DSPSendCommands2(msgs, 0, NULL);
}
/* 804512F8-80451300 0007F8 0004+04 2/2 0/0 0/0 .sbss flag */
@@ -23,7 +18,8 @@ static volatile BOOL flag;
/* 8029E540-8029E54C 298E80 000C+00 1/1 0/0 0/0 .text setup_callback__FUs */
static void setup_callback(u16 param_0) {
flag = 0;
OS_REPORT("Finish %d\n", param_0);
flag = FALSE;
}
/* 8029E560-8029E5C4 298EA0 0064+00 0/0 1/1 0/0 .text DsetupTable__FUlUlUlUlUl */
@@ -34,22 +30,23 @@ void DsetupTable(u32 param_0, u32 param_1, u32 param_2, u32 param_3, u32 param_4
table[2] = param_2;
table[3] = param_3;
table[4] = param_4;
flag = 1;
DSPSendCommands2(table,5,setup_callback);
OS_REPORT("Table Setup\n");
flag = TRUE;
DSPSendCommands2(table, 5, setup_callback);
while (true) {
if (flag==0) {
if (!flag) {
return;
}
}
}
/* ############################################################################################## */
/* 804507C8-804507D0 000248 0002+06 3/3 0/0 0/0 .sdata DSP_MIXERLEVEL */
static u16 DSP_MIXERLEVEL = 0x4000;
/* 8029E5E0-8029E604 298F20 0024+00 0/0 1/1 0/0 .text DsetMixerLevel__Ff */
void DsetMixerLevel(f32 level) {
DSP_MIXERLEVEL = 4096.0f*level;
DSP_MIXERLEVEL = 4096.0f * level;
}
/* 8029E620-8029E674 298F60 0054+00 0/0 1/1 0/0 .text DsyncFrame2ch__FUlUlUl */
+18 -23
View File
@@ -1,38 +1,29 @@
//
// Generated By: dol2asm
// Translation Unit: dsptask
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JAudio2/dsptask.h"
#include "JSystem/JAudio2/osdsp.h"
#include "global.h"
//
// Forward References:
//
static void DspInitWork();
static void DspHandShake(void* param_0);
static int DspStartWork(u32 param_0, void (*param_1)(u16));
//
// External References:
//
extern int Dsp_Running_Check();
extern int Dsp_Running_Start();
/* 8029E6E0-8029E718 299020 0038+00 1/1 0/0 0/0 .text DspHandShake__FPv */
void DspHandShake(void*) {
OS_REPORT("DSP InitCallback \n");
while (DSPCheckMailFromDSP() == 0) {}
DSPReadMailFromDSP();
DSPCheckMailFromDSP();
u32 result = DSPReadMailFromDSP();
OS_REPORT("♪JDSP/Boot:: DSPからのファーストメール(%x)が届きました\n", result);
result = DSPCheckMailFromDSP();
OS_REPORT("♪JDSP/Boot:: DSPからのセカンドメール(%x)が届きました\n", result);
OS_REPORT("♪JDSP/Boot:: DSPとの接続に成功しました\n");
Dsp_Running_Start();
}
/* ############################################################################################## */
/* 803C7920-803C9820 024A40 1F00+00 1/1 0/0 0/0 .data jdsp */
static u8 jdsp[7936] ALIGN_DECL(32) = {
0x02, 0x9F, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00, 0x02, 0xFF, 0x00, 0x00,
@@ -542,6 +533,7 @@ static u8 AUDIO_YIELD_BUFFER[8192] ALIGN_DECL(32);
/* 8029E720-8029E7CC 299060 00AC+00 0/0 1/1 0/0 .text DspBoot__FPFPv_v */
void DspBoot(void (*param_0)(void*)) {
DspInitWork();
OS_REPORT("Dsp をブートします\n");
audio_task.priority = 0xf0;
audio_task.iram_mmem_addr = (u16*)(jdsp + 0x80000000);
audio_task.iram_length = sizeof(jdsp);
@@ -557,6 +549,7 @@ void DspBoot(void (*param_0)(void*)) {
audio_task.req_cb = param_0;
DSPInit();
DSPAddPriorTask(&audio_task);
OS_REPORT("Dspブートしました\n");
}
/* 8029E7E0-8029E8C8 299120 00E8+00 0/0 4/4 0/0 .text DSPSendCommands2__FPUlUlPFUs_v */
@@ -565,17 +558,20 @@ int DSPSendCommands2(u32* param_1, u32 param_2, void (*callBack)(u16)) {
BOOL interruptFlag;
s32 startWorkStatus;
while (Dsp_Running_Check() == 0) {};
while (Dsp_Running_Check() == 0) {
OS_REPORT("Warning:まだブートしてません\n");
};
interruptFlag = OSDisableInterrupts();
if (DSPCheckMailToDSP()) {
OS_REPORT("エラー::DSPがメッセージを受け取っていません\n");
OSRestoreInterrupts(interruptFlag);
return -1;
}
DSPSendMailToDSP(param_2);
DSPAssertInt();
while(DSPCheckMailToDSP() != 0);
while (DSPCheckMailToDSP() != 0);
if (param_2 == 0) {
param_2 = 1;
@@ -594,9 +590,7 @@ int DSPSendCommands2(u32* param_1, u32 param_2, void (*callBack)(u16)) {
return startWorkStatus;
}
/* ############################################################################################## */
/* 80433FE0-80434060 060D00 0080+00 3/3 0/0 0/0 .bss taskwork */
typedef struct {
u16 field_0x0;
u16 field_0x2;
@@ -606,14 +600,12 @@ typedef struct {
static TaskWorkStruct taskwork[16];
/* 8029E8E0-8029E90C 299220 002C+00 1/1 0/0 0/0 .text DspInitWork__Fv */
// Loop is unrolled but should not be
static void DspInitWork() {
for (int i = 0; i < 16; i++) {
taskwork[i].field_0x4 = NULL;
}
}
/* ############################################################################################## */
/* 80451300-80451304 000800 0004+00 2/2 0/0 0/0 .sbss taskreadp */
static u32 taskreadp;
@@ -625,6 +617,7 @@ static int DspStartWork(u32 param_0, void (*param_1)(u16)) {
u32 taskWritePrev = taskwritep;
u32 writeVal = ((taskWritePrev + 1) & 0xf);
if (writeVal == taskreadp) {
OS_REPORT("DSP-Task Buffer is full ( %d, %d)\n", taskwritep, taskreadp);
return 0;
}
@@ -636,7 +629,9 @@ static int DspStartWork(u32 param_0, void (*param_1)(u16)) {
/* 8029E980-8029E9E8 2992C0 0068+00 0/0 1/1 0/0 .text DspFinishWork__FUs */
void DspFinishWork(u16 param_0) {
if (param_0 == taskwork[taskreadp].field_0x0) {
if (param_0 != taskwork[taskreadp].field_0x0) {
OS_REPORT("Error:: Not finish task\n");
} else {
if (taskwork[taskreadp].field_0x4) {
taskwork[taskreadp].field_0x4(taskreadp);
}