Clamp near-field distance attenuation to max gain

This commit is contained in:
Ken Cooke 2019-01-03 14:50:44 -08:00
parent 5148b60c73
commit 53dece5451
3 changed files with 4 additions and 0 deletions

View file

@ -730,6 +730,7 @@ float approximateGain(const AvatarAudioStream& listeningNodeStream, const Positi
float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
gain = gain / d;
gain = std::min(gain, ATTN_GAIN_MAX);
// avatar: skip master gain - it is constant for all streams
return gain;
@ -780,6 +781,7 @@ float computeGain(float masterListenerGain, const AvatarAudioStream& listeningNo
// reference attenuation of 0dB at distance = ATTN_DISTANCE_REF
float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
gain *= fastExp2f(fastLog2f(g) * fastLog2f(d));
gain = std::min(gain, ATTN_GAIN_MAX);
return gain;
}

View file

@ -1955,6 +1955,7 @@ float AudioClient::gainForSource(float distance, float volume) {
// reference attenuation of 0dB at distance = ATTN_DISTANCE_REF
float d = (1.0f / ATTN_DISTANCE_REF) * std::max(distance, HRTF_NEARFIELD_MIN);
float gain = volume / d;
gain = std::min(gain, ATTN_GAIN_MAX);
return gain;
}

View file

@ -32,6 +32,7 @@ static const float HRTF_HEAD_RADIUS = 0.0875f; // average human head in meters
// Distance attenuation
static const float ATTN_DISTANCE_REF = 1.0f; // distance where attn is 0dB
static const float ATTN_GAIN_MAX = 8.0f; // max gain allowed by distance attn (+18dB)
class AudioHRTF {