From 438e0b501b99d5ae34ec79225f725d2a3244362f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 3 Jul 2014 16:32:38 -0700 Subject: [PATCH 1/2] fix the voices inside your head --- assignment-client/src/audio/AudioMixer.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index cb790ca7ac..fddcac1fc3 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -107,7 +107,7 @@ void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuf glm::vec3 relativePosition = bufferToAdd->getPosition() - listeningNodeBuffer->getPosition(); float distanceBetween = glm::length(relativePosition); - + if (distanceBetween < EPSILON) { distanceBetween = EPSILON; } @@ -124,6 +124,12 @@ void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuf shouldAttenuate = !bufferToAdd->getListenerUnattenuatedZone()->contains(listeningNodeBuffer->getPosition()); } + if (bufferToAdd->getType() == PositionalAudioRingBuffer::Injector) { + attenuationCoefficient *= reinterpret_cast(bufferToAdd)->getAttenuationRatio(); + } + + shouldAttenuate = (relativePosition != glm::vec3(0.0f, 0.0f, 0.0f)); + if (shouldAttenuate) { glm::quat inverseOrientation = glm::inverse(listeningNodeBuffer->getOrientation()); @@ -131,9 +137,7 @@ void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuf float radius = 0.0f; if (bufferToAdd->getType() == PositionalAudioRingBuffer::Injector) { - InjectedAudioRingBuffer* injectedBuffer = (InjectedAudioRingBuffer*) bufferToAdd; - radius = injectedBuffer->getRadius(); - attenuationCoefficient *= injectedBuffer->getAttenuationRatio(); + radius = reinterpret_cast(bufferToAdd)->getRadius(); } if (radius == 0 || (distanceSquareToSource > radius * radius)) { @@ -158,7 +162,7 @@ void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuf const float OFF_AXIS_ATTENUATION_FORMULA_STEP = (1 - MAX_OFF_AXIS_ATTENUATION) / 2.0f; float offAxisCoefficient = MAX_OFF_AXIS_ATTENUATION + - (OFF_AXIS_ATTENUATION_FORMULA_STEP * (angleOfDelivery / PI_OVER_TWO)); + (OFF_AXIS_ATTENUATION_FORMULA_STEP * (angleOfDelivery / PI_OVER_TWO)); // multiply the current attenuation coefficient by the calculated off axis coefficient attenuationCoefficient *= offAxisCoefficient; From ecbd62104c38c425421dedbdfd56392649cba6b9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 3 Jul 2014 16:43:12 -0700 Subject: [PATCH 2/2] cause sounds within an epsilon distance to be unattenuated --- assignment-client/src/audio/AudioMixer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index fddcac1fc3..6cdcaef133 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -91,6 +91,7 @@ AudioMixer::~AudioMixer() { const float ATTENUATION_BEGINS_AT_DISTANCE = 1.0f; const float ATTENUATION_AMOUNT_PER_DOUBLING_IN_DISTANCE = 0.18f; +const float ATTENUATION_EPSILON_DISTANCE = 0.1f; void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuffer* bufferToAdd, AvatarAudioRingBuffer* listeningNodeBuffer) { @@ -128,7 +129,7 @@ void AudioMixer::addBufferToMixForListeningNodeWithBuffer(PositionalAudioRingBuf attenuationCoefficient *= reinterpret_cast(bufferToAdd)->getAttenuationRatio(); } - shouldAttenuate = (relativePosition != glm::vec3(0.0f, 0.0f, 0.0f)); + shouldAttenuate = shouldAttenuate && distanceBetween > ATTENUATION_EPSILON_DISTANCE; if (shouldAttenuate) { glm::quat inverseOrientation = glm::inverse(listeningNodeBuffer->getOrientation());