diff options
| author | robojumper <robojumper@gmail.com> | 2025-05-26 00:42:57 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-05-26 00:42:57 +0200 |
| commit | a9da90bbb2c8dddbaffec4c82e03b92eb97f2690 (patch) | |
| tree | 9099bd67a1e1fbed18e8a4db86a568926db302b8 /src | |
| parent | 83a7f21b96da09bfa8487a51230e91e606315f7b (diff) | |
snd_SoundThread OK
Diffstat (limited to 'src')
| -rw-r--r-- | src/nw4r/snd/snd_SoundThread.cpp | 82 |
1 files changed, 46 insertions, 36 deletions
diff --git a/src/nw4r/snd/snd_SoundThread.cpp b/src/nw4r/snd/snd_SoundThread.cpp index 2a8ca309..153d3492 100644 --- a/src/nw4r/snd/snd_SoundThread.cpp +++ b/src/nw4r/snd/snd_SoundThread.cpp @@ -35,7 +35,8 @@ namespace nw4r { namespace snd { namespace detail { SoundThread::SoundThread() : mStackEnd (nullptr), - mCreateFlag (false) + mCreateFlag (false), + field_0x395 (false) { OSInitMessageQueue(&mMsgQueue, mMsgBuffer, THREAD_MESSAGE_BUFSIZE); OSInitThreadQueue(&mThreadQueue); @@ -96,8 +97,10 @@ void SoundThread::AxCallbackFunc() void SoundThread::AxCallbackProc() { - BOOL result ATTR_UNUSED = - OSSendMessageAny(&mMsgQueue, MESSAGE_AX_CALLBACK, OS_MESSAGE_NO_FLAGS); + if (!field_0x395) { + BOOL result ATTR_UNUSED = + OSSendMessageAny(&mMsgQueue, MESSAGE_AX_CALLBACK, OS_MESSAGE_NO_FLAGS); + } NW4R_RANGE_FOR_NO_AUTO_INC(itr, mPlayerCallbackList) { @@ -123,6 +126,7 @@ void *SoundThread::SoundThreadFunc(void *arg) return nullptr; } +#ifdef DEBUG /* SoundThread::RegisterSoundFrameCallback * ([R89JEL]:/bin/RVL/Debug/mainD.MAP:14509) */ @@ -134,6 +138,7 @@ DECOMP_FORCE_CLASS_METHOD(SoundThread::SoundFrameCallback::LinkList, */ DECOMP_FORCE_CLASS_METHOD(SoundThread::SoundFrameCallback::LinkList, Erase(nullptr)); +#endif void SoundThread::RegisterPlayerCallback(PlayerCallback *callback) { @@ -159,56 +164,61 @@ void SoundThread::SoundThreadProc() if (reinterpret_cast<u32>(message) == MESSAGE_AX_CALLBACK) { - ut::detail::AutoLock<OSMutex> lock(mMutex); - - NW4R_RANGE_FOR_NO_AUTO_INC(itr, mSoundFrameCallbackList) - { - decltype(itr) curItr = itr++; + FrameProcess(); + } + else if (reinterpret_cast<u32>(message) == MESSAGE_SHUTDOWN) + { + break; + } - curItr->at_0x0c(); - } + NW4RAssert_Line(313, *mStackEnd == OS_THREAD_STACK_MAGIC); + } - OSTick tick = OSGetTick(); + NW4R_RANGE_FOR_NO_AUTO_INC(itr, mPlayerCallbackList) + { + decltype(itr) curItr = itr++; - { - // Sound frame - AxVoiceManager::GetInstance().FreeAllReservedAxVoice(); - AxManager::GetInstance().Update(); + curItr->OnShutdownSoundThread(); + } +} - NW4R_RANGE_FOR_NO_AUTO_INC(itr, mPlayerCallbackList) - { - decltype(itr) curItr = itr++; +void SoundThread::FrameProcess() +{ + ut::detail::AutoLock<OSMutex> lock(mMutex); - curItr->OnUpdateFrameSoundThread(); - } + NW4R_RANGE_FOR_NO_AUTO_INC(itr, mSoundFrameCallbackList) + { + decltype(itr) curItr = itr++; - ChannelManager::GetInstance().UpdateAllChannel(); - (void)Util::CalcRandom(); // ? - VoiceManager::GetInstance().UpdateAllVoices(); - } + curItr->at_0x0c(); + } - mProcessTick = OSGetTick() - tick; + OSTick tick = OSGetTick(); - NW4R_RANGE_FOR_NO_AUTO_INC(itr, mSoundFrameCallbackList) - { - decltype(itr) curItr = itr++; + { + // Sound frame + AxVoiceManager::GetInstance().FreeAllReservedAxVoice(); + AxManager::GetInstance().Update(); - curItr->at_0x10(); - } - } - else if (reinterpret_cast<u32>(message) == MESSAGE_SHUTDOWN) + NW4R_RANGE_FOR_NO_AUTO_INC(itr, mPlayerCallbackList) { - break; + decltype(itr) curItr = itr++; + + curItr->OnUpdateFrameSoundThread(); } - NW4RAssert_Line(313, *mStackEnd == OS_THREAD_STACK_MAGIC); + ChannelManager::GetInstance().UpdateAllChannel(); + (void)Util::CalcRandom(); // ? + VoiceManager::GetInstance().UpdateAllVoices(); } - NW4R_RANGE_FOR_NO_AUTO_INC(itr, mPlayerCallbackList) + mProcessTick = OSGetTick() - tick; + + NW4R_RANGE_FOR_NO_AUTO_INC(itr, mSoundFrameCallbackList) { decltype(itr) curItr = itr++; - curItr->OnShutdownSoundThread(); + curItr->at_0x10(); } } |
