Don't attenuate soloed nodes.

This commit is contained in:
Clement 2018-11-06 13:18:26 -08:00
parent 0ca0a6f3be
commit beb575a88d
2 changed files with 13 additions and 6 deletions

View file

@ -314,6 +314,7 @@ bool AudioMixerSlave::prepareMix(const SharedNodePointer& listener) {
memset(_mixSamples, 0, sizeof(_mixSamples)); memset(_mixSamples, 0, sizeof(_mixSamples));
bool isThrottling = _numToRetain != -1; bool isThrottling = _numToRetain != -1;
bool isSoloing = !listenerData->getSolodNodes().empty();
auto& streams = listenerData->getStreams(); auto& streams = listenerData->getStreams();
@ -380,13 +381,14 @@ bool AudioMixerSlave::prepareMix(const SharedNodePointer& listener) {
stream.approximateVolume = approximateVolume(stream, listenerAudioStream); stream.approximateVolume = approximateVolume(stream, listenerAudioStream);
} else { } else {
if (shouldBeSkipped(stream, *listener, *listenerAudioStream, *listenerData)) { if (shouldBeSkipped(stream, *listener, *listenerAudioStream, *listenerData)) {
addStream(stream, *listenerAudioStream, 0.0f); addStream(stream, *listenerAudioStream, 0.0f, isSoloing);
streams.skipped.push_back(move(stream)); streams.skipped.push_back(move(stream));
++stats.activeToSkipped; ++stats.activeToSkipped;
return true; return true;
} }
addStream(stream, *listenerAudioStream, listenerData->getMasterAvatarGain()); addStream(stream, *listenerAudioStream, listenerData->getMasterAvatarGain(),
isSoloing);
if (shouldBeInactive(stream)) { if (shouldBeInactive(stream)) {
// To reduce artifacts we still call render to flush the HRTF for every silent // To reduce artifacts we still call render to flush the HRTF for every silent
@ -421,7 +423,8 @@ bool AudioMixerSlave::prepareMix(const SharedNodePointer& listener) {
return true; return true;
} }
addStream(stream, *listenerAudioStream, listenerData->getMasterAvatarGain()); addStream(stream, *listenerAudioStream, listenerData->getMasterAvatarGain(),
isSoloing);
if (shouldBeInactive(stream)) { if (shouldBeInactive(stream)) {
// To reduce artifacts we still call render to flush the HRTF for every silent // To reduce artifacts we still call render to flush the HRTF for every silent
@ -488,7 +491,7 @@ bool AudioMixerSlave::prepareMix(const SharedNodePointer& listener) {
void AudioMixerSlave::addStream(AudioMixerClientData::MixableStream& mixableStream, void AudioMixerSlave::addStream(AudioMixerClientData::MixableStream& mixableStream,
AvatarAudioStream& listeningNodeStream, AvatarAudioStream& listeningNodeStream,
float masterListenerGain) { float masterListenerGain, bool isSoloing) {
++stats.totalMixes; ++stats.totalMixes;
auto streamToAdd = mixableStream.positionalStream; auto streamToAdd = mixableStream.positionalStream;
@ -499,9 +502,13 @@ void AudioMixerSlave::addStream(AudioMixerClientData::MixableStream& mixableStre
glm::vec3 relativePosition = streamToAdd->getPosition() - listeningNodeStream.getPosition(); glm::vec3 relativePosition = streamToAdd->getPosition() - listeningNodeStream.getPosition();
float distance = glm::max(glm::length(relativePosition), EPSILON); float distance = glm::max(glm::length(relativePosition), EPSILON);
float gain = computeGain(masterListenerGain, listeningNodeStream, *streamToAdd, relativePosition, distance, isEcho);
float azimuth = isEcho ? 0.0f : computeAzimuth(listeningNodeStream, listeningNodeStream, relativePosition); float azimuth = isEcho ? 0.0f : computeAzimuth(listeningNodeStream, listeningNodeStream, relativePosition);
float gain = 1.0f;
if (!isSoloing) {
gain = computeGain(masterListenerGain, listeningNodeStream, *streamToAdd, relativePosition, distance, isEcho);
}
const int HRTF_DATASET_INDEX = 1; const int HRTF_DATASET_INDEX = 1;
if (!streamToAdd->lastPopSucceeded()) { if (!streamToAdd->lastPopSucceeded()) {

View file

@ -57,7 +57,7 @@ private:
bool prepareMix(const SharedNodePointer& listener); bool prepareMix(const SharedNodePointer& listener);
void addStream(AudioMixerClientData::MixableStream& mixableStream, void addStream(AudioMixerClientData::MixableStream& mixableStream,
AvatarAudioStream& listeningNodeStream, AvatarAudioStream& listeningNodeStream,
float masterListenerGain); float masterListenerGain, bool isSoloing);
void updateHRTFParameters(AudioMixerClientData::MixableStream& mixableStream, void updateHRTFParameters(AudioMixerClientData::MixableStream& mixableStream,
AvatarAudioStream& listeningNodeStream, AvatarAudioStream& listeningNodeStream,
float masterListenerGain); float masterListenerGain);