diff --git a/assignment-client/src/audio/AudioMixerClientData.cpp b/assignment-client/src/audio/AudioMixerClientData.cpp index 470ab3f233..4f7b236026 100644 --- a/assignment-client/src/audio/AudioMixerClientData.cpp +++ b/assignment-client/src/audio/AudioMixerClientData.cpp @@ -223,12 +223,24 @@ void AudioMixerClientData::parseInjectorGainSet(ReceivedMessage& message, const } void AudioMixerClientData::setGainForAvatar(QUuid nodeID, float gain) { - auto it = std::find_if(_streams.active.cbegin(), _streams.active.cend(), [nodeID](const MixableStream& mixableStream){ + auto itActive = std::find_if(_streams.active.cbegin(), _streams.active.cend(), [nodeID](const MixableStream& mixableStream){ return mixableStream.nodeStreamID.nodeID == nodeID && mixableStream.nodeStreamID.streamID.isNull(); }); - if (it != _streams.active.cend()) { - it->hrtf->setGainAdjustment(gain); + if (itActive != _streams.active.cend()) { + itActive->hrtf->setGainAdjustment(gain); + return; + } + + // If someone is not speaking at the moment, then stream is not in active streams, and volume adjustment will fail, + // so we need to search in inactive streams too + auto itInactive = std::find_if(_streams.inactive.cbegin(), _streams.inactive.cend(), [nodeID](const MixableStream& mixableStream){ + return mixableStream.nodeStreamID.nodeID == nodeID && mixableStream.nodeStreamID.streamID.isNull(); + }); + + if (itInactive != _streams.active.cend()) { + itInactive->hrtf->setGainAdjustment(gain); + return; } } diff --git a/libraries/audio/src/AudioHRTF.h b/libraries/audio/src/AudioHRTF.h index 6bbd9bc08a..07af5390e4 100644 --- a/libraries/audio/src/AudioHRTF.h +++ b/libraries/audio/src/AudioHRTF.h @@ -16,6 +16,8 @@ #include #include +#include + #include "AudioHelpers.h" static const int HRTF_AZIMUTHS = 72; // 360 / 5-degree steps @@ -80,7 +82,10 @@ public: // // HRTF local gain adjustment in amplitude (1.0 == unity) // - void setGainAdjustment(float gain) { _gainAdjust = HRTF_GAIN * gain; }; + void setGainAdjustment(float gain) { + _gainAdjust = HRTF_GAIN * gain; + qDebug() << "AudioHRTF::setGainAdjustment: " << _gainAdjust; + }; float getGainAdjustment() { return _gainAdjust; } // clear internal state, but retain settings