From 850dbd76c9dcd0278fbab46fef893363f81ed5b5 Mon Sep 17 00:00:00 2001 From: Ken Cooke Date: Tue, 23 May 2017 11:12:36 -0700 Subject: [PATCH] Integrate new noise gate --- libraries/audio-client/src/AudioClient.cpp | 55 +++++++++++++++------- 1 file changed, 37 insertions(+), 18 deletions(-) diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index 34afde6332..a7d5be22ef 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -1008,29 +1008,48 @@ void AudioClient::handleAudioInput(QByteArray& audioBuffer) { } else { int16_t* samples = reinterpret_cast(audioBuffer.data()); int numSamples = audioBuffer.size() / AudioConstants::SAMPLE_SIZE; - bool didClip = false; + int numFrames = numSamples / (_isStereoInput ? AudioConstants::STEREO : AudioConstants::MONO); - bool shouldRemoveDCOffset = !_isPlayingBackRecording && !_isStereoInput; - if (shouldRemoveDCOffset) { - _noiseGate.removeDCOffset(samples, numSamples); - } + //bool didClip = false; - bool shouldNoiseGate = (_isPlayingBackRecording || !_isStereoInput) && _isNoiseGateEnabled; - if (shouldNoiseGate) { - _noiseGate.gateSamples(samples, numSamples); - _lastInputLoudness = _noiseGate.getLastLoudness(); - didClip = _noiseGate.clippedInLastBlock(); + //bool shouldRemoveDCOffset = !_isPlayingBackRecording && !_isStereoInput; + //if (shouldRemoveDCOffset) { + // _noiseGate.removeDCOffset(samples, numSamples); + //} + + //bool shouldNoiseGate = (_isPlayingBackRecording || !_isStereoInput) && _isNoiseGateEnabled; + //if (shouldNoiseGate) { + // _noiseGate.gateSamples(samples, numSamples); + // _lastInputLoudness = _noiseGate.getLastLoudness(); + // didClip = _noiseGate.clippedInLastBlock(); + //} else { + // float loudness = 0.0f; + // for (int i = 0; i < numSamples; ++i) { + // int16_t sample = std::abs(samples[i]); + // loudness += (float)sample; + // didClip = didClip || + // (sample > (AudioConstants::MAX_SAMPLE_VALUE * AudioNoiseGate::CLIPPING_THRESHOLD)); + // } + // _lastInputLoudness = fabs(loudness / numSamples); + //} + + if (_isNoiseGateEnabled) { + // The audio gate includes DC removal + _audioGate->render(samples, samples, numFrames); } else { - float loudness = 0.0f; - for (int i = 0; i < numSamples; ++i) { - int16_t sample = std::abs(samples[i]); - loudness += (float)sample; - didClip = didClip || - (sample > (AudioConstants::MAX_SAMPLE_VALUE * AudioNoiseGate::CLIPPING_THRESHOLD)); - } - _lastInputLoudness = fabs(loudness / numSamples); + _audioGate->removeDC(samples, samples, numFrames); } + // TODO: optimize this + float loudness = 0.0f; + bool didClip = false; + for (int i = 0; i < numSamples; ++i) { + int16_t sample = std::abs(samples[i]); + loudness += (float)sample; + didClip = didClip || (sample > (AudioConstants::MAX_SAMPLE_VALUE * AudioNoiseGate::CLIPPING_THRESHOLD)); + } + _lastInputLoudness = fabs(loudness / numSamples); + if (didClip) { _timeSinceLastClip = 0.0f; } else if (_timeSinceLastClip >= 0.0f) {