diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index c7de0788a3..99039829e7 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -565,7 +565,7 @@ void Audio::setReverbOptions(const AudioEffectOptions* options) { } } -void Audio::addReverb(int16_t* samplesData, int numSamples, QAudioFormat& audioFormat) { +void Audio::addReverb(int16_t* samplesData, int numSamples, QAudioFormat& audioFormat, bool noEcho) { float wetFraction = DB_CO(_reverbOptions->getWetLevel()); float dryFraction = 1.0f - wetFraction; @@ -579,11 +579,15 @@ void Audio::addReverb(int16_t* samplesData, int numSamples, QAudioFormat& audioF for (int j = sample; j < sample + audioFormat.channelCount(); j++) { if (j == sample) { // left channel - int lResult = glm::clamp((int)(samplesData[j] * dryFraction + lValue * wetFraction), MIN_SAMPLE_VALUE, MAX_SAMPLE_VALUE); + int lResult = glm::clamp((int)(samplesData[j] * ((noEcho) ? 0.0f : dryFraction) + + lValue * wetFraction), + MIN_SAMPLE_VALUE, MAX_SAMPLE_VALUE); samplesData[j] = (int16_t)lResult; } else if (j == (sample + 1)) { // right channel - int rResult = glm::clamp((int)(samplesData[j] * dryFraction + rValue * wetFraction), MIN_SAMPLE_VALUE, MAX_SAMPLE_VALUE); + int rResult = glm::clamp((int)(samplesData[j] * ((noEcho) ? 0.0f : dryFraction) + + rValue * wetFraction), + MIN_SAMPLE_VALUE, MAX_SAMPLE_VALUE); samplesData[j] = (int16_t)rResult; } else { // ignore channels above 2 @@ -622,23 +626,10 @@ void Audio::handleLocalEchoAndReverb(QByteArray& inputByteArray) { } if (hasLocalReverb) { - QByteArray loopbackCopy; - if (!hasEcho) { - loopbackCopy = loopBackByteArray; - } - int16_t* loopbackSamples = reinterpret_cast(loopBackByteArray.data()); int numLoopbackSamples = loopBackByteArray.size() / sizeof(int16_t); updateGverbOptions(); - addReverb(loopbackSamples, numLoopbackSamples, _outputFormat); - - if (!hasEcho) { - int16_t* loopbackCopySamples = reinterpret_cast(loopbackCopy.data()); - for (int i = 0; i < numLoopbackSamples; ++i) { - loopbackSamples[i] = glm::clamp((int)loopbackSamples[i] - loopbackCopySamples[i], - MIN_SAMPLE_VALUE, MAX_SAMPLE_VALUE); - } - } + addReverb(loopbackSamples, numLoopbackSamples, _outputFormat, !hasEcho); } if (_loopbackOutputDevice) { diff --git a/interface/src/Audio.h b/interface/src/Audio.h index d8e5c5386c..913524d8e5 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -269,7 +269,7 @@ private: // Adds Reverb void initGverb(); void updateGverbOptions(); - void addReverb(int16_t* samples, int numSamples, QAudioFormat& format); + void addReverb(int16_t* samples, int numSamples, QAudioFormat& format, bool noEcho = false); void handleLocalEchoAndReverb(QByteArray& inputByteArray);