diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 42ea8a7341..dda4e8bc35 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -197,20 +197,12 @@ int AudioMixer::addStreamToMixForListeningNodeWithStream(AudioMixerClientData* l attenuationCoefficient *= offAxisCoefficient; } - - bool wantBreak = false; + float attenuationPerDoublingInDistance = _attenuationPerDoublingInDistance; - foreach (const QString& source, _attenuationCoefficients.keys()) { - if (_audioZones[source].contains(streamToAdd->getPosition())) { - foreach (const QString& listener, _attenuationCoefficients[source].keys()) { - if (_audioZones[listener].contains(listeningNodeStream->getPosition())) { - attenuationPerDoublingInDistance = _attenuationCoefficients[source][listener]; - wantBreak = true; - break; - } - } - } - if (wantBreak) { + for (int i = 0; i < _zonesSettings.length(); ++i) { + if (_audioZones[_zonesSettings[i].source].contains(streamToAdd->getPosition()) && + _audioZones[_zonesSettings[i].listener].contains(listeningNodeStream->getPosition())) { + attenuationPerDoublingInDistance = _zonesSettings[i].coefficient; break; } } @@ -1028,21 +1020,18 @@ void AudioMixer::parseSettingsObject(const QJsonObject &settingsObject) { coefficientObject.contains(LISTENER) && coefficientObject.contains(COEFFICIENT)) { + ZonesSettings settings; + bool ok; - QString source = coefficientObject.value(SOURCE).toString(); - QString listener = coefficientObject.value(LISTENER).toString(); - float coefficient = coefficientObject.value(COEFFICIENT).toString().toFloat(&ok); + settings.source = coefficientObject.value(SOURCE).toString(); + settings.listener = coefficientObject.value(LISTENER).toString(); + settings.coefficient = coefficientObject.value(COEFFICIENT).toString().toFloat(&ok); if (ok && coefficient >= 0.0f && coefficient <= 1.0f && - _audioZones.contains(source) && _audioZones.contains(listener)) { + _audioZones.contains(settings.source) && _audioZones.contains(settings.listener)) { - if (!_attenuationCoefficients.contains(source)) { - _attenuationCoefficients.insert(source, QHash()); - } - if (!_attenuationCoefficients[source].contains(listener)) { - _attenuationCoefficients[source].insert(listener, coefficient); - qDebug() << "Added Coefficient:" << source << listener << coefficient; - } + _zonesSettings.push_back(settings); + qDebug() << "Added Coefficient:" << settings.source << settings.listener << settings.coefficient; } } } diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 7f07c846a4..3cfa5443a8 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -74,8 +74,14 @@ private: int _numStatFrames; int _sumListeners; int _sumMixes; + QHash _audioZones; - QHash > _attenuationCoefficients; + struct ZonesSettings { + QString source; + QString listener; + float coefficient; + }; + QVector _zonesSettings; static InboundAudioStream::Settings _streamSettings;