JAIStreamMgr work, copy pikmin2 JAI enums

This commit is contained in:
LagoLunatic
2024-09-09 02:24:35 -04:00
parent 5b502c928a
commit 3e093924ce
7 changed files with 254 additions and 76 deletions
+56 -4
View File
@@ -3,6 +3,58 @@
#include "dolphin/types.h"
enum JAISoundType {
SOUNDPARAM_Unk0 = 0,
SOUNDPARAM_Dopplar = 1,
SOUNDPARAM_Demo = 2,
SOUNDPARAM_Unk3 = 3,
SOUNDPARAM_Distance = 4,
SOUNDPARAM_Unk5 = 5,
SOUNDPARAM_Direct = 6,
SOUNDPARAM_Fadeout = 7,
SOUNDPARAM_Unk8 = 8,
SOUNDPARAM_Unk9 = 9,
SOUNDPARAM_Unk10 = 10,
SOUNDPARAM_Pause = 11,
};
enum JAISoundState {
SOUNDSTATE_Inactive = 0,
SOUNDSTATE_Stored = 1,
SOUNDSTATE_Loaded = 2,
SOUNDSTATE_Ready = 3,
SOUNDSTATE_Playing = 4,
SOUNDSTATE_Fadeout = 5,
};
enum JAISoundTrackActiveFlags {
SOUNDACTIVE_Unk0 = 0,
SOUNDACTIVE_Unk1 = 1 << 0, // 0x1
SOUNDACTIVE_DoFadeout = 1 << 1, // 0x2
SOUNDACTIVE_TempoProportion = 1 << 2, // 0x4
SOUNDACTIVE_Unk4 = 1 << 3, // 0x8
SOUNDACTIVE_Unk5 = 1 << 4, // 0x10
SOUNDACTIVE_Unk6 = 1 << 5, // 0x20
SOUNDACTIVE_TrackVolume = 1 << 6, // 0x40
SOUNDACTIVE_TrackPan = 1 << 7, // 0x80
SOUNDACTIVE_TrackDolby = 1 << 8, // 0x100
SOUNDACTIVE_TrackPitch = 1 << 9, // 0x200
SOUNDACTIVE_Unk11 = 1 << 10, // 0x400
SOUNDACTIVE_TrackFxmix = 1 << 11, // 0x800
SOUNDACTIVE_TrackPortData = 1 << 12, // 0x1000
SOUNDACTIVE_Unk14 = 1 << 13, // 0x2000
SOUNDACTIVE_Unk15 = 1 << 14, // 0x4000
SOUNDACTIVE_Unk16 = 1 << 15, // 0x8000
SOUNDACTIVE_Unk17 = 1 << 16, // 0x10000
SOUNDACTIVE_Unk18 = 1 << 17, // 0x20000
SOUNDACTIVE_Volume = 1 << 18, // 0x40000
SOUNDACTIVE_Pan = 1 << 19, // 0x80000
SOUNDACTIVE_Pitch = 1 << 20, // 0x100000
SOUNDACTIVE_Fxmix = 1 << 21, // 0x200000
SOUNDACTIVE_Dolby = 1 << 22, // 0x400000
SOUNDACTIVE_TrackInterruptSwitch = 1 << 23, // 0x800000
};
namespace JAInter {
class Actor;
class SeParameter;
@@ -103,7 +155,7 @@ public:
void setDemoFxmix(f32 f1, u32 r4) { setFxmix(f1, r4, 3); }
void setDemoPan(f32 f1, u32 r4) { setPan(f1, r4, 3); }
void setDemoPitch(f32 f1, u32 r4) { setPitch(f1, r4, 3); }
void setDemoVolume(f32 f1, u32 r4) { setVolume(f1, r4, 3); }
void setDemoVolume(f32 f1, u32 r4) { setVolume(f1, r4, SOUNDPARAM_Unk3); }
void setFadetime(u32) {}
void setID(u32) {}
void setMainSoundPPointer(JAISound**) {}
@@ -121,7 +173,7 @@ public:
void setWait(u8) {}
/* 0x04 */ u8 field_0x4;
/* 0x05 */ u8 field_0x5;
/* 0x05 */ u8 mState;
/* 0x06 */ u8 field_0x6;
/* 0x07 */ u8 field_0x7;
/* 0x08 */ u8 field_0x8;
@@ -129,7 +181,7 @@ public:
/* 0x0a */ s16 field_0xa;
/* 0x0c */ u32 mSoundID;
/* 0x10 */ int field_0x10;
/* 0x14 */ u32 field_0x14;
/* 0x14 */ u32 mFadeCounter;
/* 0x18 */ u32 field_0x18;
/* 0x1c */ int field_0x1c;
/* 0x20 */ PositionInfo_t* mPositionInfo;
@@ -148,7 +200,7 @@ namespace JAInter {
public:
MoveParaSet(f32 param_1=1.0f) { init(param_1); }
int set(f32 param_1, u32 param_2);
bool move();
BOOL move();
void init(f32 value) {
mCurrentValue = value;
+9 -7
View File
@@ -26,7 +26,7 @@ namespace JAInter {
/* 0x04 */ f32 field_0x4;
/* 0x08 */ f32 field_0x8;
/* 0x0C */ f32 field_0xc;
/* 0x10 */ int field_0x10;
/* 0x10 */ u32 mActiveTrackFlag;
/* 0x14 */ JAISound* mpSound;
};
@@ -38,15 +38,17 @@ namespace JAInter {
class StreamParameter {
public:
/* 0x000 */ u8 field_0x0;
void init() {} // TODO
/* 0x000 */ u8 mPauseMode;
/* 0x004 */ int field_0x4;
/* 0x008 */ int field_0x8;
/* 0x00C */ int field_0xc;
/* 0x010 */ int field_0x10;
/* 0x014 */ JAInter::MoveParaSet field_0x14[20];
/* 0x008 */ u32 mVolumeFlags;
/* 0x00C */ u32 mPitchFlags;
/* 0x010 */ u32 mPanFlags;
/* 0x014 */ JAInter::MoveParaSet mVolumes[20];
/* 0x154 */ JAInter::MoveParaSet* pitch;
/* 0x158 */ JAInter::MoveParaSet* pan;
/* 0x15C */ streamUpdate_t* field_0x15c;
/* 0x15C */ streamUpdate_t* mUpdateData;
};
namespace StreamMgr {
+20 -20
View File
@@ -176,7 +176,7 @@ void JAIZelBasic::gframeProcess() {
if (!JAInter::SeMgr::seHandle) {
return;
}
if (JAInter::SeMgr::seHandle->field_0x5 >= 4) {
if (JAInter::SeMgr::seHandle->mState >= SOUNDSTATE_Playing) {
zeldaGFrameWork();
}
processFrameWork();
@@ -197,14 +197,14 @@ void JAIZelBasic::resetProcess() {
for (int i = 0; i < JAIGlobalParameter::getParamSeqPlayTrackMax(); i++) {
JAInter::SeqUpdateData* data = JAInter::SequenceMgr::getPlayTrackInfo(i);
if (data && data->field_0x48) {
data->field_0x48->setSeqInterVolume(6, 0.0f, 1);
data->field_0x48->setSeqInterVolume(SOUNDPARAM_Direct, 0.0f, 1);
}
}
if (JAInter::StreamMgr::getUpdateInfo()->mpSound) {
JAInter::StreamMgr::getUpdateInfo()->mpSound->stop(1);
}
if (JAInter::SeMgr::seHandle) {
JAInter::SeMgr::seHandle->setSeqInterVolume(6, 0.0f, 1);
JAInter::SeMgr::seHandle->setSeqInterVolume(SOUNDPARAM_Direct, 0.0f, 1);
}
mNextSceneBgmId = 0;
field_0x022e = 0;
@@ -214,7 +214,7 @@ void JAIZelBasic::resetProcess() {
/* 802A31C0-802A334C .text resetRecover__11JAIZelBasicFv */
void JAIZelBasic::resetRecover() {
if (JAInter::SeMgr::seHandle) {
JAInter::SeMgr::seHandle->setSeqInterVolume(6, 1.0f, 0);
JAInter::SeMgr::seHandle->setSeqInterVolume(SOUNDPARAM_Direct, 1.0f, 0);
}
for (int i = 0; i < JAIGlobalParameter::getParamSeqPlayTrackMax(); i++) {
JAInter::SeqUpdateData* data = JAInter::SequenceMgr::getPlayTrackInfo(i);
@@ -540,7 +540,7 @@ void JAIZelBasic::enemyNearByGFrame() {
void JAIZelBasic::bgmAllMute(u32 param_1) {
field_0x0080 = 0.0;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), param_1, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), param_1, SOUNDPARAM_Unk0);
}
}
@@ -549,14 +549,14 @@ void JAIZelBasic::taktModeMute() {
field_0x0098 = 0.0f;
if (mpMainBgmSound) {
if (mMainBgmNum != JA_BGM_TAKT_MAKORE && mMainBgmNum != JA_BGM_TAKT_MEDRI) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 10, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 10, SOUNDPARAM_Unk0);
} else {
field_0x0098 = 1.0f;
}
}
field_0x00a4 = 0.0;
if (mpSubBgmSound) {
mpSubBgmSound->setVolume(calcSubBgmVol(), 10, 0);
mpSubBgmSound->setVolume(calcSubBgmVol(), 10, SOUNDPARAM_Unk0);
}
}
@@ -564,17 +564,17 @@ void JAIZelBasic::taktModeMute() {
void JAIZelBasic::taktModeMuteOff() {
field_0x0098 = 1.0;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 10, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 10, SOUNDPARAM_Unk0);
}
if (mSubBgmNum == JA_BGM_TAKT_KAZE) {
field_0x008c = 1.0;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 45, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 45, SOUNDPARAM_Unk0);
}
}
field_0x00a4 = 1.0;
if (mpSubBgmSound) {
mpSubBgmSound->setVolume(calcSubBgmVol(), 10, 0);
mpSubBgmSound->setVolume(calcSubBgmVol(), 10, SOUNDPARAM_Unk0);
}
}
@@ -598,7 +598,7 @@ void JAIZelBasic::cbPracticeStop() {
field_0x00a8 = 1.0;
field_0x009c = 1.0;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 90, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 90, SOUNDPARAM_Unk0);
}
field_0x00d0 = 0;
}
@@ -886,11 +886,11 @@ void JAIZelBasic::talkIn() {
if (field_0x0064 != 1 && isDemo() != 1 && field_0x0098 != 0.0f) {
field_0x0084 = JAIZelParam::VOL_BGM_TALKING;
if (mpMainBgmSound && mMainBgmNum != JA_BGM_BIRDMAN_GOAL && mMainBgmNum != JA_BGM_BIRDMAN_FAIL) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0);
}
field_0x00a0 = JAIZelParam::VOL_BGM_TALKING;
if (mpSubBgmSound) {
mpSubBgmSound->setSeqInterVolume(0, calcSubBgmVol(), 2);
mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2);
}
setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_TALKING);
setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_TALKING);
@@ -910,11 +910,11 @@ void JAIZelBasic::talkOut() {
}
field_0x0084 = JAIZelParam::VOL_BGM_DEFAULT;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0);
}
field_0x00a0 = JAIZelParam::VOL_BGM_DEFAULT;
if (mpSubBgmSound) {
mpSubBgmSound->setSeqInterVolume(0, calcSubBgmVol(), 2);
mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2);
}
setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_DEFAULT);
setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_DEFAULT);
@@ -930,11 +930,11 @@ void JAIZelBasic::talkOut() {
void JAIZelBasic::menuIn() {
field_0x0088 = JAIZelParam::VOL_BGM_PAUSING;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 2, SOUNDPARAM_Unk0);
}
field_0x00a0 = JAIZelParam::VOL_BGM_PAUSING;
if (mpSubBgmSound) {
mpSubBgmSound->setSeqInterVolume(0, calcSubBgmVol(), 2);
mpSubBgmSound->setSeqInterVolume(SOUNDPARAM_Unk0, calcSubBgmVol(), 2);
}
setSeCategoryVolume(0, JAIZelParam::VOL_SE_SYSTEM_PAUSING);
setSeCategoryVolume(1, JAIZelParam::VOL_SE_LINK_VOICE_PAUSING);
@@ -1064,7 +1064,7 @@ void JAIZelBasic::changeSeaBgm() {
case 2:
field_0x0094 = (sp08 - (sp0C.field_0xC + 2000.0f)) / 1000.0f;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 1, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 1, SOUNDPARAM_Unk0);
}
return;
default:
@@ -1080,14 +1080,14 @@ void JAIZelBasic::changeSeaBgm() {
case 1:
field_0x0094 = ((sp0C.field_0xC + 2000.0f) - sp08) / 2000.0f;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 1, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 1, SOUNDPARAM_Unk0);
}
break;
case 2:
case 3:
field_0x0094 = 0.0f;
if (mpMainBgmSound) {
mpMainBgmSound->setVolume(calcMainBgmVol(), 0, 0);
mpMainBgmSound->setVolume(calcMainBgmVol(), 0, SOUNDPARAM_Unk0);
}
break;
}
+3 -3
View File
@@ -74,7 +74,7 @@ void JAIZelSound::setSeDistanceVolume(u8 r30) {
} else {
f31 = 1.0f;
}
setSeInterVolume(4, f31, r30, 0);
setSeInterVolume(SOUNDPARAM_Distance, f31, r30, 0);
}
/* 802AF2A0-802AF314 .text setSeDistancePan__11JAIZelSoundFUc */
@@ -82,7 +82,7 @@ void JAIZelSound::setSeDistancePan(u8 r31) {
if ((getSwBit() & 0x00800000) && field_0x18 > 1) {
return;
}
setSeInterPan(4, setDistancePanCommon(), r31, 0);
setSeInterPan(SOUNDPARAM_Distance, setDistancePanCommon(), r31, 0);
}
/* 802AF314-802AF458 .text setSeDistanceDolby__11JAIZelSoundFUc */
@@ -110,5 +110,5 @@ void JAIZelSound::setSeDistanceDolby(u8 r30) {
}
u8 r0 = f0;
setSeInterDolby(4, r0 / 127.0f, r30, 0);
setSeInterDolby(SOUNDPARAM_Distance, r0 / 127.0f, r30, 0);
}
+1 -1
View File
@@ -76,7 +76,7 @@ void JAInter::BankWave::setWaveScene() {
/* 802914D4-80291578 .text loadSecondStayWave__Q27JAInter8BankWaveFv */
void JAInter::BankWave::loadSecondStayWave() {
if (SeMgr::seHandle->field_0x5 == 3 && flags.flag2 == 0 && initOnCodeWs) {
if (SeMgr::seHandle->mState == SOUNDSTATE_Ready && flags.flag2 == 0 && initOnCodeWs) {
for (int i = 0; initOnCodeWs[i].field_0x0; i++) {
if (initOnCodeWs[i].field_0x8 == 1) {
loadGroupWave(i, 0);
+14 -14
View File
@@ -15,7 +15,7 @@
/* 8029859C-802985C4 .text __ct__8JAISoundFv */
JAISound::JAISound() {
field_0x3c = NULL;
field_0x5 = 0;
mState = SOUNDSTATE_Inactive;
field_0x6 = 10;
field_0x24 = NULL;
}
@@ -51,7 +51,7 @@ void JAISound::clearMainSoundPPointer() {
/* 80298648-80298688 .text start__8JAISoundFUl */
void JAISound::start(u32 param_1) {
setPrepareFlag(0);
field_0x14 = param_1;
mFadeCounter = param_1;
}
/* 80298688-802986B8 .text stop__8JAISoundFUl */
@@ -380,7 +380,7 @@ void JAISound::setSeqPortData(u8 line_, u16 param_2, u32 param_3) {
if (!getSeqParameter()) {
return;
}
if (getSeqParameter()->field_0x10[line_].mCurrentValue == 0.0f && field_0x5 >= 3) {
if (getSeqParameter()->field_0x10[line_].mCurrentValue == 0.0f && mState >= SOUNDSTATE_Ready) {
u16 local_38;
JASystem::TTrack* track = getSeqParameter()->getRootTrackPointer();
track->readPortApp(line_ << 16, &local_38);
@@ -403,7 +403,7 @@ void JAISound::setTrackVolume(u8 line_, f32 param_2, u32 param_3) {
if (!getSeqParameter()) {
return;
}
if (field_0x5 >= 4 && (getSeqParameter()->field_0x135c->field_0x4 & 1 << line_) == 0) {
if (mState >= SOUNDSTATE_Playing && (getSeqParameter()->field_0x135c->field_0x4 & 1 << line_) == 0) {
return;
}
if (param_3 == 0) {
@@ -544,7 +544,7 @@ void JAISound::setPauseMode(u8 param_1, u8 param_2) {
if (param_1 != 0) {
switch (param_1) {
case 1:
setSeqInterVolume(11, param_2 / 127.0f, 1);
setSeqInterVolume(SOUNDPARAM_Pause, param_2 / 127.0f, 1);
break;
case 2:
JASystem::TTrack* track = getSeqParameter()->getRootTrackPointer();
@@ -555,7 +555,7 @@ void JAISound::setPauseMode(u8 param_1, u8 param_2) {
getSeqParameter();
switch (getSeqParameter()->field_0x1261) {
case 1:
setSeqInterVolume(11, 1.0f, 1);
setSeqInterVolume(SOUNDPARAM_Pause, 1.0f, 1);
break;
case 2:
JASystem::TTrack* track = getSeqParameter()->getRootTrackPointer();
@@ -572,23 +572,23 @@ void JAISound::setPauseMode(u8 param_1, u8 param_2) {
if (param_1 != 0) {
switch (param_1) {
case 1:
setStreamInterVolume(11, param_2 / 127.0f, 1);
setStreamInterVolume(SOUNDPARAM_Pause, param_2 / 127.0f, 1);
break;
case 2:
JAInter::StreamLib::setPauseFlag(2);
break;
}
} else {
switch (getStreamParameter()->field_0x0) {
switch (getStreamParameter()->mPauseMode) {
case 1:
setStreamInterVolume(11, 1.0f, 1);
setStreamInterVolume(SOUNDPARAM_Pause, 1.0f, 1);
break;
case 2:
JAInter::StreamLib::clearPauseFlag(2);
break;
}
}
getStreamParameter()->field_0x0 = param_1;
getStreamParameter()->mPauseMode = param_1;
break;
default:
JUT_ASSERT_MSG(1443, 0, "JAISound::setPauseMode サウンドカテゴリービットが異常です。\n");
@@ -647,7 +647,7 @@ int JAInter::MoveParaSet::set(f32, u32) {
}
/* 8029B07C-8029B0C4 .text move__Q27JAInter11MoveParaSetFv */
bool JAInter::MoveParaSet::move() {
BOOL JAInter::MoveParaSet::move() {
/* Nonmatching */
}
@@ -671,20 +671,20 @@ void JAInter::LinkSound::init(JAISound* param_1, u32 param_2) {
field_0x4 = NULL;
Buffer[0x00].field_0x30 = NULL;
Buffer[0x00].field_0x34 = Buffer + 1;
Buffer[0x00].field_0x5 = 0;
Buffer[0x00].mState = SOUNDSTATE_Inactive;
Buffer[0x00].mPositionInfo = new (JAIBasic::getCurrentJAIHeap(), 0x20) JAISound::PositionInfo_t[JAIGlobalParameter::getParamAudioCameraMax()];
JUT_ASSERT_MSG(2084, Buffer[0x00].mPositionInfo, "LinkSound::initLinkSound Cannot Alloc Heap!!\n");
int i;
for (i = 1; i < param_2 - 1; i++) {
Buffer[i].field_0x30 = Buffer + (i - 1);
Buffer[i].field_0x34 = Buffer + (i + 1);
Buffer[i].field_0x5 = 0;
Buffer[i].mState = SOUNDSTATE_Inactive;
Buffer[i].mPositionInfo = new (JAIBasic::getCurrentJAIHeap(), 0x20) JAISound::PositionInfo_t[JAIGlobalParameter::getParamAudioCameraMax()];
JUT_ASSERT_MSG(2092, Buffer[i].mPositionInfo, "LinkSound::initLinkSound Cannot Alloc Heap!!\n");
}
Buffer[i].field_0x30 = Buffer + (i - 1);
Buffer[i].field_0x34 = NULL;
Buffer[i].field_0x5 = 0;
Buffer[i].mState = SOUNDSTATE_Inactive;
Buffer[i].mPositionInfo = new (JAIBasic::getCurrentJAIHeap(), 0x20) JAISound::PositionInfo_t[JAIGlobalParameter::getParamAudioCameraMax()];
JUT_ASSERT_MSG(2099, Buffer[i].mPositionInfo, "LinkSound::initLinkSound Cannot Alloc Heap!!\n");
}
+151 -27
View File
@@ -15,6 +15,8 @@
#include "string.h"
#include "dolphin/os/OS.h"
const u32 sChannelMax = 2;
#define JUT_ASSERT_3(LINE, COND) \
if (!(COND)) { \
if (!(COND)) { \
@@ -114,8 +116,8 @@ void JAInter::StreamMgr::init() {
tmp->field_0x4 = 1.0f;
tmp->field_0x8 = 1.0f;
tmp->field_0xc = 0.5f;
tmp->field_0x10 = 0;
tmp->mpSound = 0;
tmp->mActiveTrackFlag = SOUNDACTIVE_Unk0;
tmp->mpSound = NULL;
}
/* 8029BEB4-8029C04C .text storeStreamBuffer__Q27JAInter9StreamMgrFPP8JAISoundPQ27JAInter5ActorUlUlUcPv */
@@ -129,20 +131,20 @@ void JAInter::StreamMgr::storeStreamBuffer(JAISound** param_1, JAInter::Actor* p
}
JAISound* sound = streamControl.getSound();
StreamParameter* para = sound->getStreamParameter();
para->field_0x0 = 0;
para->mPauseMode = 0;
para->field_0x4 = 0;
para->field_0x8 = 0;
para->field_0xc = 0;
para->field_0x10 = 0;
para->mVolumeFlags = 0;
para->mPitchFlags = 0;
para->mPanFlags = 0;
for (u32 i = 0; i < 20; i++) {
MoveParaSet* movePara = &para->field_0x14[i];
MoveParaSet* movePara = &para->mVolumes[i];
movePara->init(1.0f);
}
for (u32 i = 0; i < JAIGlobalParameter::getParamStreamParameterLines(); i++) {
para->pitch[i].init(1.0f);
para->pan[i].init(0.5f);
}
sound->field_0x5 = 1;
sound->mState = SOUNDSTATE_Stored;
sound->field_0x6 = 10;
streamUpdate->field_0x2 = 0;
sound->initParameter(param_1, param_2, param_3, param_4, param_5, param_6);
@@ -150,17 +152,17 @@ void JAInter::StreamMgr::storeStreamBuffer(JAISound** param_1, JAInter::Actor* p
/* 8029C04C-8029C0F0 .text releaseStreamBuffer__Q27JAInter9StreamMgrFP8JAISoundUl */
void JAInter::StreamMgr::releaseStreamBuffer(JAISound* param_1, u32 param_2) {
if (param_2 == 0 || param_1->field_0x5 < 4) {
if (param_2 == 0 || param_1->mState < SOUNDSTATE_Playing) {
StreamLib::stop();
param_1->field_0x5 = 0;
streamUpdate->mpSound = 0;
param_1->mState = SOUNDSTATE_Inactive;
streamUpdate->mpSound = NULL;
param_1->clearMainSoundPPointer();
streamControl.releaseSound(param_1);
JASystem::Dvd::unpauseDvdT();
} else {
if (param_1->getStreamParameter()->field_0x15c) {
param_1->getStreamParameter()->field_0x15c->field_0x10 |= 2;
param_1->field_0x14 = param_2;
if (param_1->getStreamParameter()->mUpdateData) {
param_1->getStreamParameter()->mUpdateData->mActiveTrackFlag |= SOUNDACTIVE_DoFadeout;
param_1->mFadeCounter = param_2;
}
}
}
@@ -178,19 +180,19 @@ void JAInter::StreamMgr::processGFrameStream() {
/* 8029C128-8029C1D8 .text checkEntriedStream__Q27JAInter9StreamMgrFv */
void JAInter::StreamMgr::checkEntriedStream() {
for (JAISound* sound = streamControl.field_0x4; sound; sound = sound->field_0x34) {
if (sound->field_0x5 != 1 || StreamLib::getPlayingFlag() == 1) {
if (sound->mState != SOUNDSTATE_Stored || StreamLib::getPlayingFlag() == 1) {
continue;
}
sound->field_0x5 = 2;
sound->getStreamParameter()->field_0x15c = streamUpdate;
sound->mState = SOUNDSTATE_Loaded;
sound->getStreamParameter()->mUpdateData = streamUpdate;
streamUpdate_t* tmp = streamUpdate;
tmp->field_0x0 = 0;
tmp->field_0x1 = 0;
tmp->field_0x4 = 1.0f;
tmp->field_0x8 = 1.0f;
tmp->field_0xc = 0.5f;
tmp->field_0x10 = 0;
tmp->mpSound = 0;
tmp->mActiveTrackFlag = SOUNDACTIVE_Unk0;
tmp->mpSound = NULL;
streamUpdate->mpSound = sound;
}
}
@@ -201,14 +203,14 @@ void JAInter::StreamMgr::checkWaitStream() {
if (!sound) {
return;
}
if (sound->field_0x5 != 2) {
if (sound->mState != SOUNDSTATE_Loaded) {
return;
}
char buffer[64];
strcpy(buffer, JAIGlobalParameter::getParamStreamPath());
strcat(buffer, streamList[JAIBasic::getInterface()->getSoundOffsetNumberFromID(sound->getID())].field_0x10);
JAIBasic::getInterface()->setSeExtParameter(sound);
sound->field_0x5 = 3;
sound->mState = SOUNDSTATE_Ready;
checkPlayingStream();
StreamLib::start(buffer, sound->getStreamParameter()->field_0x4, streamList[sound->getID() & 0x3FF].field_0x20);
StreamLib::setPrepareFlag(1);
@@ -220,16 +222,16 @@ void JAInter::StreamMgr::checkRequestStream() {
if (!sound) {
return;
}
if (sound->field_0x5 != 3) {
if (sound->mState != SOUNDSTATE_Ready) {
return;
}
if (streamUpdate->field_0x2) {
return;
}
sound->field_0x5 = 4;
if (sound->field_0x14 > 1) {
sound->setStreamInterVolume(7, 0.0, 0);
sound->setStreamInterVolume(7, 1.0, sound->field_0x14);
sound->mState = SOUNDSTATE_Playing;
if (sound->mFadeCounter > 1) {
sound->setStreamInterVolume(SOUNDPARAM_Fadeout, 0.0, 0);
sound->setStreamInterVolume(SOUNDPARAM_Fadeout, 1.0, sound->mFadeCounter);
StreamLib::setVolume(0.0);
}
StreamLib::setPrepareFlag(0);
@@ -237,7 +239,129 @@ void JAInter::StreamMgr::checkRequestStream() {
/* 8029C344-8029C730 .text checkPlayingStream__Q27JAInter9StreamMgrFv */
void JAInter::StreamMgr::checkPlayingStream() {
/* Nonmatching */
JAISound* streamSound = getUpdateInfo()->mpSound;
if (streamSound == NULL) {
return;
}
streamUpdate_t* data = getUpdateInfo();
if (streamSound->mState >= SOUNDSTATE_Playing) {
streamSound->getStreamParameter();
if (StreamLib::getPlayingFlag() == 2) {
streamSound->mState = SOUNDSTATE_Inactive;
if (streamSound->getStreamParameter()->mUpdateData) {
streamSound->getStreamParameter()->mUpdateData->mpSound = NULL;
}
streamSound->clearMainSoundPPointer();
streamControl.releaseSound(streamSound);
return;
}
if (streamSound->field_0x6 != 0) {
streamSound->field_0x6--;
}
if ((data->mActiveTrackFlag & SOUNDACTIVE_DoFadeout) != 0) {
streamSound->setStreamInterVolume(SOUNDPARAM_Fadeout, 0.0f, streamSound->mFadeCounter);
streamSound->mState = SOUNDSTATE_Fadeout;
data->mActiveTrackFlag ^= SOUNDACTIVE_DoFadeout;
}
if (streamSound->mState == SOUNDSTATE_Fadeout &&
(streamSound->getStreamInterVolume(SOUNDPARAM_Fadeout) == 0.0f || streamSound->mFadeCounter == 0) &&
streamSound->field_0x6 == 0
) {
StreamLib::stop();
streamSound->mState = SOUNDSTATE_Inactive;
if (streamSound->getStreamParameter()->mUpdateData != NULL) {
streamSound->getStreamParameter()->mUpdateData->mpSound = NULL;
}
streamSound->clearMainSoundPPointer();
streamControl.releaseSound(streamSound);
}
}
if (streamSound->mState < SOUNDSTATE_Ready) {
return;
}
StreamParameter* param = streamSound->getStreamParameter();
if (data->mActiveTrackFlag & SOUNDACTIVE_Volume) {
f32 volFactor = 1.0f;
for (u8 i = 0; i < 20; i++) {
MoveParaSet* vol = &param->mVolumes[i];
if (param->mVolumeFlags & (1 << i)) {
if (vol->move() == FALSE) {
param->mVolumeFlags ^= (1 << i);
}
}
volFactor *= vol->mCurrentValue;
}
if (streamUpdate->field_0x4 != volFactor) {
StreamLib::setVolume(volFactor);
streamUpdate->field_0x4 = volFactor;
}
if (param->mVolumeFlags == 0) {
data->mActiveTrackFlag ^= SOUNDACTIVE_Volume;
}
}
if (data->mActiveTrackFlag & SOUNDACTIVE_Pitch) {
f32 pitchFactor = 1.0f;
for (u8 i = 0; i < 7; i++) {
MoveParaSet* pitch = &param->pitch[i];
if (param->mPitchFlags & (1 << i)) {
if (pitch->move() == FALSE) {
param->mPitchFlags ^= (1 << i);
}
}
pitchFactor *= pitch->mCurrentValue;
}
if (streamUpdate->field_0x8 != pitchFactor) {
StreamLib::setPitch(pitchFactor);
streamUpdate->field_0x8 = pitchFactor;
}
if (param->mPitchFlags == 0) {
data->mActiveTrackFlag ^= SOUNDACTIVE_Pitch;
}
}
if (data->mActiveTrackFlag & SOUNDACTIVE_Pan) {
f32 panFactor = 0.0f;
for (u8 i = 0; i < 7; i++) {
MoveParaSet* pan = &param->pan[i];
if (param->mPanFlags & (1 << i)) {
if (pan->move() == FALSE) {
param->mPanFlags ^= (1 << i);
}
}
panFactor += (pan->mCurrentValue - 0.5f);
}
panFactor += 0.5f;
if (panFactor > 1.0f) {
panFactor = 1.0f;
} else if (panFactor < 0.0f) {
panFactor = 0.0f;
}
if (streamUpdate->field_0xc != panFactor) {
StreamLib::setPan(panFactor);
getUpdateInfo()->field_0xc = panFactor;
}
if (param->mPanFlags == 0) {
data->mActiveTrackFlag ^= SOUNDACTIVE_Pan;
}
}
streamSound->field_0x18++;
}
/* 8029C730-8029C858 .text Play_DirectPCM__Q27JAInter9StreamLibFPQ28JASystem11TDSPChannelPsUsUlsUs */