diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 3670653493..ce373f4d33 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -62,6 +62,7 @@ #include "AudioMixer.h" const float LOUDNESS_TO_DISTANCE_RATIO = 0.00001f; +const float DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE = 0.18; const QString AUDIO_MIXER_LOGGING_TARGET_NAME = "audio-mixer"; @@ -82,6 +83,7 @@ AudioMixer::AudioMixer(const QByteArray& packet) : _trailingSleepRatio(1.0f), _minAudibilityThreshold(LOUDNESS_TO_DISTANCE_RATIO / 2.0f), _performanceThrottlingRatio(0.0f), + _attenuationPerDoublingInDistance(DEFAULT_ATTENUATION_PER_DOUBLING_IN_DISTANCE), _numStatFrames(0), _sumListeners(0), _sumMixes(0), @@ -104,7 +106,6 @@ AudioMixer::~AudioMixer() { } const float ATTENUATION_BEGINS_AT_DISTANCE = 1.0f; -const float ATTENUATION_AMOUNT_PER_DOUBLING_IN_DISTANCE = 0.18f; const float RADIUS_OF_HEAD = 0.076f; int AudioMixer::addStreamToMixForListeningNodeWithStream(AudioMixerClientData* listenerNodeData, @@ -210,7 +211,7 @@ int AudioMixer::addStreamToMixForListeningNodeWithStream(AudioMixerClientData* l if (shouldDistanceAttenuate && (distanceBetween >= ATTENUATION_BEGINS_AT_DISTANCE)) { // calculate the distance coefficient using the distance to this node float distanceCoefficient = 1 - (logf(distanceBetween / ATTENUATION_BEGINS_AT_DISTANCE) / logf(2.0f) - * ATTENUATION_AMOUNT_PER_DOUBLING_IN_DISTANCE); + * _attenuationPerDoublingInDistance); if (distanceCoefficient < 0) { distanceCoefficient = 0; @@ -740,6 +741,16 @@ void AudioMixer::run() { qDebug() << "Buffers inside this zone will not be attenuated inside a box with center at" << QString("%1, %2, %3").arg(destinationCenter.x).arg(destinationCenter.y).arg(destinationCenter.z); } + + const QString ATTENATION_PER_DOULING_IN_DISTANCE = "attenuation-per-doubling-in-distance"; + if (audioGroupObject[ATTENATION_PER_DOULING_IN_DISTANCE].isString()) { + bool ok = false; + float attenuation = audioGroupObject[ATTENATION_PER_DOULING_IN_DISTANCE].toString().toFloat(&ok); + if (ok) { + _attenuationPerDoublingInDistance = attenuation; + qDebug() << "Attenuation per doubling in distance changed to" << _attenuationPerDoublingInDistance; + } + } } int nextFrame = 0; diff --git a/assignment-client/src/audio/AudioMixer.h b/assignment-client/src/audio/AudioMixer.h index 6c25fe21d9..4d08d480f8 100644 --- a/assignment-client/src/audio/AudioMixer.h +++ b/assignment-client/src/audio/AudioMixer.h @@ -69,6 +69,7 @@ private: float _trailingSleepRatio; float _minAudibilityThreshold; float _performanceThrottlingRatio; + float _attenuationPerDoublingInDistance; int _numStatFrames; int _sumListeners; int _sumMixes; diff --git a/domain-server/resources/describe-settings.json b/domain-server/resources/describe-settings.json index 19c293b610..86d4da684b 100644 --- a/domain-server/resources/describe-settings.json +++ b/domain-server/resources/describe-settings.json @@ -51,6 +51,14 @@ "help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)", "placeholder": "no zone" }, + { + "name": "attenuation-per-doubling-in-distance", + "label": "Attenuattion per doubling in distance", + "help": "Factor between 0.0 and 1.0 (0.0: No attenuation, 1.0: extreme attenuation)", + "placeholder": "0.18", + "default": "0.18", + "advanced": true + }, { "name": "dynamic-jitter-buffer", "type": "checkbox", diff --git a/interface/src/devices/SixenseManager.cpp b/interface/src/devices/SixenseManager.cpp index 28b125b6da..c3d694d06c 100644 --- a/interface/src/devices/SixenseManager.cpp +++ b/interface/src/devices/SixenseManager.cpp @@ -45,7 +45,7 @@ SixenseManager& SixenseManager::getInstance() { } SixenseManager::SixenseManager() : -#ifdef __APPLE__ +#if defined(HAVE_SIXENSE) && defined(__APPLE__) _sixenseLibrary(NULL), #endif _isInitialized(false),