diff options
| author | robojumper <robojumper@gmail.com> | 2025-05-25 21:57:46 +0200 |
|---|---|---|
| committer | robojumper <robojumper@gmail.com> | 2025-05-25 22:08:27 +0200 |
| commit | d016bf80054ee09370809fc88f1e103532e5b03e (patch) | |
| tree | 65c8b4744e0a05a0dab0f20a064495f653b11f26 /src/nw4r | |
| parent | 7616b37976dac6248c5aac07c3ec882160114e70 (diff) | |
snd_BasicPlayer OK
Diffstat (limited to 'src/nw4r')
| -rw-r--r-- | src/nw4r/snd/snd_AxManager.cpp | 16 | ||||
| -rw-r--r-- | src/nw4r/snd/snd_BasicPlayer.cpp | 13 |
2 files changed, 27 insertions, 2 deletions
diff --git a/src/nw4r/snd/snd_AxManager.cpp b/src/nw4r/snd/snd_AxManager.cpp index 1cb2c4b1..971f5e4b 100644 --- a/src/nw4r/snd/snd_AxManager.cpp +++ b/src/nw4r/snd/snd_AxManager.cpp @@ -68,7 +68,8 @@ AxManager::AxManager() : mInitialized (false), mUpdateVoicePrioFlag (true), mOldAidCallback (nullptr), - mResetReadyCounter (-1) + mResetReadyCounter (-1), + field_0x100(5) { mMainOutVolume.InitValue(1.0f); mMasterVolume.InitValue(1.0f); @@ -307,7 +308,10 @@ OutputMode AxManager::GetOutputMode() } void AxManager::SetMasterVolume(f32 volume, int frame) { - mMasterVolume.SetTarget(ut::Clamp(volume, 0.0f, 1.0f), (frame + 2) / 3); + if (volume < 0.0f) { + volume = 0.0f; + } + mMasterVolume.SetTarget(volume, (frame + 2) / 3); if (frame == 0) { VoiceManager::GetInstance().UpdateAllVoicesSync(Voice::SYNC_AX_VE); @@ -395,6 +399,9 @@ bool AxManager::AppendEffect(AuxBus bus, FxBase* pFx) { void AxManager::ClearEffect(AuxBus bus, int frame) { if (frame == 0) { ShutdownEffect(bus); + if (!mAuxFadeVolume[bus].IsFinished()) { + mAuxFadeVolume[bus].SetTarget(0.0f, 0); + } return; } @@ -447,6 +454,8 @@ void AxManager::AuxCallbackFunc(void* pChans, void* pContext) { void** ppChans = static_cast<void**>(pChans); AuxBus bus = static_cast<AuxBus>(reinterpret_cast<u32>(pContext)); + int tick = OSGetTick(); + if (GetInstance().GetOutputMode() == OUTPUT_MODE_DPL2) { num = AX_DPL2_MAX; @@ -468,10 +477,12 @@ void AxManager::AuxCallbackFunc(void* pChans, void* pContext) { for (int i = 0; i < num; i++) { std::memset(buffer[i], 0, FX_BUFFER_SIZE); } + GetInstance().mEffectProcessTick[bus] = OSGetTick() - tick; } else if (GetInstance().GetEffectList(bus).IsEmpty()) { for (int i = 0; i < num; i++) { std::memset(buffer[i], 0, FX_BUFFER_SIZE); } + GetInstance().mEffectProcessTick[bus] = OSGetTick() - tick; } else { for (FxBase::LinkList::Iterator it = GetInstance().GetEffectList(bus).GetBeginIter(); @@ -480,6 +491,7 @@ void AxManager::AuxCallbackFunc(void* pChans, void* pContext) { it->UpdateBuffer(num, buffer, FX_BUFFER_SIZE, FX_SAMPLE_FORMAT, FX_SAMPLE_RATE, GetInstance().GetOutputMode()); } + GetInstance().mEffectProcessTick[bus] = OSGetTick() - tick; } } diff --git a/src/nw4r/snd/snd_BasicPlayer.cpp b/src/nw4r/snd/snd_BasicPlayer.cpp index e5695e31..4045f4b8 100644 --- a/src/nw4r/snd/snd_BasicPlayer.cpp +++ b/src/nw4r/snd/snd_BasicPlayer.cpp @@ -41,6 +41,9 @@ void PlayerParamSet::Init() for (int i = 0; i < AUX_BUS_NUM; i++) fxSend[i] = 0.0f; + for (int i = 0; i < 4; i++) + remoteOutVolume[i] = 1.0f; + for (int i = 0; i < (int)ARRAY_LENGTH(voiceOutParam); i++) { VoiceOutParam *param = &voiceOutParam[i]; @@ -99,4 +102,14 @@ void BasicPlayer::SetRemoteFilter(int filter) mPlayerParamSet.remoteFilter = filter; } +void BasicPlayer::SetRemoteOutVolume(int remote, f32 volume) +{ + mPlayerParamSet.remoteOutVolume[remote] = volume; +} + +f32 BasicPlayer::GetRemoteOutVolume(int remote) const +{ + return mPlayerParamSet.remoteOutVolume[remote]; +} + }}} // namespace nw4r::snd::detail |
