summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-05-26 00:42:57 +0200
committerrobojumper <robojumper@gmail.com>2025-05-26 00:42:57 +0200
commita9da90bbb2c8dddbaffec4c82e03b92eb97f2690 (patch)
tree9099bd67a1e1fbed18e8a4db86a568926db302b8 /src
parent83a7f21b96da09bfa8487a51230e91e606315f7b (diff)
snd_SoundThread OK
Diffstat (limited to 'src')
-rw-r--r--src/nw4r/snd/snd_SoundThread.cpp82
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();
}
}