AEC3: Remove redundant class
This CL removes the redundant class in preparation for adding multichannel functionality to the reverb computation. The changes are bitexact. Bug: webrtc:10913 Change-Id: I284665f7143cb5e1c79bfa573638fdff5f2411c9 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155960 Commit-Queue: Per Åhgren <peah@webrtc.org> Reviewed-by: Sam Zackrisson <saza@webrtc.org> Cr-Commit-Position: refs/heads/master@{#29414}
This commit is contained in:
parent
9ddd72989a
commit
1d3008bfc6
@ -84,8 +84,6 @@ rtc_static_library("aec3") {
|
||||
"render_delay_controller.h",
|
||||
"render_delay_controller_metrics.cc",
|
||||
"render_delay_controller_metrics.h",
|
||||
"render_reverb_model.cc",
|
||||
"render_reverb_model.h",
|
||||
"render_signal_analyzer.cc",
|
||||
"render_signal_analyzer.h",
|
||||
"residual_echo_estimator.cc",
|
||||
|
||||
@ -29,6 +29,56 @@ namespace {
|
||||
constexpr size_t kBlocksSinceConvergencedFilterInit = 10000;
|
||||
constexpr size_t kBlocksSinceConsistentEstimateInit = 10000;
|
||||
|
||||
void UpdateAndComputeReverb(
|
||||
const SpectrumBuffer& spectrum_buffer,
|
||||
int delay_blocks,
|
||||
float reverb_decay,
|
||||
ReverbModel* reverb_model,
|
||||
rtc::ArrayView<float, kFftLengthBy2Plus1> reverb_power_spectrum) {
|
||||
RTC_DCHECK(reverb_model);
|
||||
const size_t num_render_channels = spectrum_buffer.buffer[0].size();
|
||||
int idx_at_delay =
|
||||
spectrum_buffer.OffsetIndex(spectrum_buffer.read, delay_blocks);
|
||||
int idx_past = spectrum_buffer.IncIndex(idx_at_delay);
|
||||
|
||||
std::array<float, kFftLengthBy2Plus1> X2_data;
|
||||
rtc::ArrayView<const float> X2;
|
||||
if (num_render_channels > 1) {
|
||||
auto sum_channels =
|
||||
[](size_t num_render_channels,
|
||||
const std::vector<std::vector<float>>& spectrum_band_0,
|
||||
rtc::ArrayView<float, kFftLengthBy2Plus1> render_power) {
|
||||
std::fill(render_power.begin(), render_power.end(), 0.f);
|
||||
for (size_t ch = 0; ch < num_render_channels; ++ch) {
|
||||
RTC_DCHECK_EQ(spectrum_band_0[ch].size(), kFftLengthBy2Plus1);
|
||||
for (size_t k = 0; k < kFftLengthBy2Plus1; ++k) {
|
||||
render_power[k] += spectrum_band_0[ch][k];
|
||||
}
|
||||
}
|
||||
};
|
||||
sum_channels(num_render_channels, spectrum_buffer.buffer[idx_past],
|
||||
X2_data);
|
||||
reverb_model->UpdateReverbNoFreqShaping(
|
||||
X2_data, /*power_spectrum_scaling=*/1.0f, reverb_decay);
|
||||
|
||||
sum_channels(num_render_channels, spectrum_buffer.buffer[idx_at_delay],
|
||||
X2_data);
|
||||
X2 = X2_data;
|
||||
} else {
|
||||
reverb_model->UpdateReverbNoFreqShaping(
|
||||
spectrum_buffer.buffer[idx_past][/*channel=*/0],
|
||||
/*power_spectrum_scaling=*/1.0f, reverb_decay);
|
||||
|
||||
X2 = spectrum_buffer.buffer[idx_at_delay][/*channel=*/0];
|
||||
}
|
||||
|
||||
rtc::ArrayView<const float, kFftLengthBy2Plus1> reverb_power =
|
||||
reverb_model->reverb();
|
||||
for (size_t k = 0; k < X2.size(); ++k) {
|
||||
reverb_power_spectrum[k] = X2[k] + reverb_power[k];
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int AecState::instance_count_ = 0;
|
||||
@ -171,14 +221,14 @@ void AecState::Update(
|
||||
active_render && !SaturatedCapture() ? 1 : 0;
|
||||
|
||||
std::array<float, kFftLengthBy2Plus1> X2_reverb;
|
||||
render_reverb_.Apply(render_buffer.GetSpectrumBuffer(),
|
||||
delay_state_.DirectPathFilterDelay(), ReverbDecay(),
|
||||
X2_reverb);
|
||||
|
||||
UpdateAndComputeReverb(render_buffer.GetSpectrumBuffer(),
|
||||
delay_state_.DirectPathFilterDelay(), ReverbDecay(),
|
||||
&reverb_model_, X2_reverb);
|
||||
|
||||
if (config_.echo_audibility.use_stationarity_properties) {
|
||||
// Update the echo audibility evaluator.
|
||||
echo_audibility_.Update(render_buffer,
|
||||
render_reverb_.GetReverbContributionPowerSpectrum(),
|
||||
echo_audibility_.Update(render_buffer, reverb_model_.reverb(),
|
||||
delay_state_.DirectPathFilterDelay(),
|
||||
delay_state_.ExternalDelayReported());
|
||||
}
|
||||
|
||||
@ -28,7 +28,6 @@
|
||||
#include "modules/audio_processing/aec3/erle_estimator.h"
|
||||
#include "modules/audio_processing/aec3/filter_analyzer.h"
|
||||
#include "modules/audio_processing/aec3/render_buffer.h"
|
||||
#include "modules/audio_processing/aec3/render_reverb_model.h"
|
||||
#include "modules/audio_processing/aec3/reverb_model_estimator.h"
|
||||
#include "modules/audio_processing/aec3/subtractor_output.h"
|
||||
#include "modules/audio_processing/aec3/subtractor_output_analyzer.h"
|
||||
@ -294,7 +293,7 @@ class AecState {
|
||||
absl::optional<DelayEstimate> external_delay_;
|
||||
EchoAudibility echo_audibility_;
|
||||
ReverbModelEstimator reverb_model_estimator_;
|
||||
RenderReverbModel render_reverb_;
|
||||
ReverbModel reverb_model_;
|
||||
std::vector<SubtractorOutputAnalyzer> subtractor_output_analyzers_;
|
||||
};
|
||||
|
||||
|
||||
@ -1,49 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#include "modules/audio_processing/aec3/render_reverb_model.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "api/array_view.h"
|
||||
#include "rtc_base/checks.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
RenderReverbModel::RenderReverbModel() {
|
||||
Reset();
|
||||
}
|
||||
|
||||
RenderReverbModel::~RenderReverbModel() = default;
|
||||
|
||||
void RenderReverbModel::Reset() {
|
||||
render_reverb_.Reset();
|
||||
}
|
||||
|
||||
void RenderReverbModel::Apply(const SpectrumBuffer& spectrum_buffer,
|
||||
int delay_blocks,
|
||||
float reverb_decay,
|
||||
rtc::ArrayView<float> reverb_power_spectrum) {
|
||||
int idx_at_delay =
|
||||
spectrum_buffer.OffsetIndex(spectrum_buffer.read, delay_blocks);
|
||||
int idx_past = spectrum_buffer.IncIndex(idx_at_delay);
|
||||
const auto& X2 = spectrum_buffer.buffer[idx_at_delay][/*channel=*/0];
|
||||
RTC_DCHECK_EQ(X2.size(), reverb_power_spectrum.size());
|
||||
render_reverb_.UpdateReverbNoFreqShaping(
|
||||
spectrum_buffer.buffer[idx_past][/*channel=*/0], 1.0f, reverb_decay);
|
||||
|
||||
rtc::ArrayView<const float, kFftLengthBy2Plus1> reverb_power =
|
||||
render_reverb_.reverb();
|
||||
for (size_t k = 0; k < X2.size(); ++k) {
|
||||
reverb_power_spectrum[k] = X2[k] + reverb_power[k];
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace webrtc
|
||||
@ -1,49 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2018 The WebRTC project authors. All Rights Reserved.
|
||||
*
|
||||
* Use of this source code is governed by a BSD-style license
|
||||
* that can be found in the LICENSE file in the root of the source
|
||||
* tree. An additional intellectual property rights grant can be found
|
||||
* in the file PATENTS. All contributing project authors may
|
||||
* be found in the AUTHORS file in the root of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef MODULES_AUDIO_PROCESSING_AEC3_RENDER_REVERB_MODEL_H_
|
||||
#define MODULES_AUDIO_PROCESSING_AEC3_RENDER_REVERB_MODEL_H_
|
||||
|
||||
#include "api/array_view.h"
|
||||
#include "modules/audio_processing/aec3/reverb_model.h"
|
||||
#include "modules/audio_processing/aec3/spectrum_buffer.h"
|
||||
|
||||
namespace webrtc {
|
||||
|
||||
// The RenderReverbModel class applies an exponential reverberant model over the
|
||||
// render spectrum.
|
||||
class RenderReverbModel {
|
||||
public:
|
||||
RenderReverbModel();
|
||||
~RenderReverbModel();
|
||||
|
||||
// Resets the state.
|
||||
void Reset();
|
||||
|
||||
// Applies the reverberation model over the render spectrum. It also returns
|
||||
// the reverberation render power spectrum in the array reverb_power_spectrum.
|
||||
void Apply(const SpectrumBuffer& spectrum_buffer,
|
||||
int delay_blocks,
|
||||
float reverb_decay,
|
||||
rtc::ArrayView<float> reverb_power_spectrum);
|
||||
|
||||
// Gets the reverberation spectrum that was added to the render spectrum for
|
||||
// computing the reverberation render spectrum.
|
||||
rtc::ArrayView<const float> GetReverbContributionPowerSpectrum() const {
|
||||
return render_reverb_.reverb();
|
||||
}
|
||||
|
||||
private:
|
||||
ReverbModel render_reverb_;
|
||||
};
|
||||
|
||||
} // namespace webrtc.
|
||||
|
||||
#endif // MODULES_AUDIO_PROCESSING_AEC3_RENDER_REVERB_MODEL_H_
|
||||
Loading…
x
Reference in New Issue
Block a user