diff --git a/include/JSystem/JAudio/JAISound.h b/include/JSystem/JAudio/JAISound.h index 7befd9f5..0522be71 100644 --- a/include/JSystem/JAudio/JAISound.h +++ b/include/JSystem/JAudio/JAISound.h @@ -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 @@ class JAISound { 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 @@ class JAISound { 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 @@ class JAISound { /* 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; diff --git a/include/JSystem/JAudio/JAIStreamMgr.h b/include/JSystem/JAudio/JAIStreamMgr.h index 80d09096..5ec27309 100644 --- a/include/JSystem/JAudio/JAIStreamMgr.h +++ b/include/JSystem/JAudio/JAIStreamMgr.h @@ -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 { diff --git a/src/JAZelAudio/JAIZelBasic.cpp b/src/JAZelAudio/JAIZelBasic.cpp index bb3944a0..25a7c7f6 100644 --- a/src/JAZelAudio/JAIZelBasic.cpp +++ b/src/JAZelAudio/JAIZelBasic.cpp @@ -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; } diff --git a/src/JAZelAudio/JAIZelSound.cpp b/src/JAZelAudio/JAIZelSound.cpp index 1bcc87b0..8980c5d0 100644 --- a/src/JAZelAudio/JAIZelSound.cpp +++ b/src/JAZelAudio/JAIZelSound.cpp @@ -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); } diff --git a/src/JSystem/JAudio/JAIBankWave.cpp b/src/JSystem/JAudio/JAIBankWave.cpp index 5941776c..2fb8ab67 100644 --- a/src/JSystem/JAudio/JAIBankWave.cpp +++ b/src/JSystem/JAudio/JAIBankWave.cpp @@ -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); diff --git a/src/JSystem/JAudio/JAISound.cpp b/src/JSystem/JAudio/JAISound.cpp index 17bc82fb..7f3380f8 100644 --- a/src/JSystem/JAudio/JAISound.cpp +++ b/src/JSystem/JAudio/JAISound.cpp @@ -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"); } diff --git a/src/JSystem/JAudio/JAIStreamMgr.cpp b/src/JSystem/JAudio/JAIStreamMgr.cpp index bd7758e3..9912019b 100644 --- a/src/JSystem/JAudio/JAIStreamMgr.cpp +++ b/src/JSystem/JAudio/JAIStreamMgr.cpp @@ -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 = ¶->field_0x14[i]; + MoveParaSet* movePara = ¶->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 = ¶m->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 = ¶m->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 = ¶m->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 */