diff --git a/modules/audio_processing/audio_processing_impl.cc b/modules/audio_processing/audio_processing_impl.cc index 7bf9369f77..a36fc4a1bd 100644 --- a/modules/audio_processing/audio_processing_impl.cc +++ b/modules/audio_processing/audio_processing_impl.cc @@ -1705,15 +1705,17 @@ void AudioProcessingImpl::InitializeTransientSuppressor() { // Attempt to create a transient suppressor, if one is not already created. if (!submodules_.transient_suppressor) { submodules_.transient_suppressor = CreateTransientSuppressor( - submodule_creation_overrides_, transient_suppressor_vad_mode_); - } - if (submodules_.transient_suppressor) { + submodule_creation_overrides_, transient_suppressor_vad_mode_, + proc_fullband_sample_rate_hz(), capture_nonlocked_.split_rate, + num_proc_channels()); + if (!submodules_.transient_suppressor) { + RTC_LOG(LS_WARNING) + << "No transient suppressor created (probably disabled)"; + } + } else { submodules_.transient_suppressor->Initialize( proc_fullband_sample_rate_hz(), capture_nonlocked_.split_rate, num_proc_channels()); - } else { - RTC_LOG(LS_WARNING) - << "No transient suppressor created (probably disabled)"; } } else { submodules_.transient_suppressor.reset(); diff --git a/modules/audio_processing/optionally_built_submodule_creators.cc b/modules/audio_processing/optionally_built_submodule_creators.cc index 15f06a7b5e..cea5c837dc 100644 --- a/modules/audio_processing/optionally_built_submodule_creators.cc +++ b/modules/audio_processing/optionally_built_submodule_creators.cc @@ -18,14 +18,18 @@ namespace webrtc { std::unique_ptr CreateTransientSuppressor( const ApmSubmoduleCreationOverrides& overrides, - TransientSuppressor::VadMode vad_mode) { + TransientSuppressor::VadMode vad_mode, + int sample_rate_hz, + int detection_rate_hz, + int num_channels) { #ifdef WEBRTC_EXCLUDE_TRANSIENT_SUPPRESSOR return nullptr; #else if (overrides.transient_suppression) { return nullptr; } - return std::make_unique(vad_mode); + return std::make_unique( + vad_mode, sample_rate_hz, detection_rate_hz, num_channels); #endif } diff --git a/modules/audio_processing/optionally_built_submodule_creators.h b/modules/audio_processing/optionally_built_submodule_creators.h index cab106955f..1be2743986 100644 --- a/modules/audio_processing/optionally_built_submodule_creators.h +++ b/modules/audio_processing/optionally_built_submodule_creators.h @@ -32,7 +32,10 @@ struct ApmSubmoduleCreationOverrides { // * The corresponding override in `overrides` is enabled. std::unique_ptr CreateTransientSuppressor( const ApmSubmoduleCreationOverrides& overrides, - TransientSuppressor::VadMode vad_mode); + TransientSuppressor::VadMode vad_mode, + int sample_rate_hz, + int detection_rate_hz, + int num_channels); } // namespace webrtc diff --git a/modules/audio_processing/transient/transient_suppression_test.cc b/modules/audio_processing/transient/transient_suppression_test.cc index f2366b64ae..9864253d6e 100644 --- a/modules/audio_processing/transient/transient_suppression_test.cc +++ b/modules/audio_processing/transient/transient_suppression_test.cc @@ -166,9 +166,10 @@ void void_main() { Agc agc; - TransientSuppressorImpl suppressor(TransientSuppressor::VadMode::kDefault); - suppressor.Initialize(absl::GetFlag(FLAGS_sample_rate_hz), detection_rate_hz, - absl::GetFlag(FLAGS_num_channels)); + TransientSuppressorImpl suppressor(TransientSuppressor::VadMode::kDefault, + absl::GetFlag(FLAGS_sample_rate_hz), + detection_rate_hz, + absl::GetFlag(FLAGS_num_channels)); const size_t audio_buffer_size = absl::GetFlag(FLAGS_chunk_size_ms) * absl::GetFlag(FLAGS_sample_rate_hz) / 1000; diff --git a/modules/audio_processing/transient/transient_suppressor_impl.cc b/modules/audio_processing/transient/transient_suppressor_impl.cc index 676fb8fa56..b2a389eb4b 100644 --- a/modules/audio_processing/transient/transient_suppressor_impl.cc +++ b/modules/audio_processing/transient/transient_suppressor_impl.cc @@ -57,7 +57,10 @@ std::string GetVadModeLabel(TransientSuppressor::VadMode vad_mode) { } // namespace -TransientSuppressorImpl::TransientSuppressorImpl(VadMode vad_mode) +TransientSuppressorImpl::TransientSuppressorImpl(VadMode vad_mode, + int sample_rate_hz, + int detector_rate_hz, + int num_channels) : vad_mode_(vad_mode), analyzed_audio_is_silent_(false), data_length_(0), @@ -77,6 +80,7 @@ TransientSuppressorImpl::TransientSuppressorImpl(VadMode vad_mode) seed_(182), using_reference_(false) { RTC_LOG(LS_INFO) << "VAD mode: " << GetVadModeLabel(vad_mode_); + Initialize(sample_rate_hz, detector_rate_hz, num_channels); } TransientSuppressorImpl::~TransientSuppressorImpl() {} diff --git a/modules/audio_processing/transient/transient_suppressor_impl.h b/modules/audio_processing/transient/transient_suppressor_impl.h index d4bca7d53a..ceb9cce38e 100644 --- a/modules/audio_processing/transient/transient_suppressor_impl.h +++ b/modules/audio_processing/transient/transient_suppressor_impl.h @@ -27,7 +27,10 @@ class TransientDetector; // restoration algorithm that attenuates unexpected spikes in the spectrum. class TransientSuppressorImpl : public TransientSuppressor { public: - explicit TransientSuppressorImpl(VadMode vad_mode); + TransientSuppressorImpl(VadMode vad_mode, + int sample_rate_hz, + int detector_rate_hz, + int num_channels); ~TransientSuppressorImpl() override; int Initialize(int sample_rate_hz, diff --git a/modules/audio_processing/transient/transient_suppressor_unittest.cc b/modules/audio_processing/transient/transient_suppressor_unittest.cc index 3bc43bd55e..eb24cd1cf8 100644 --- a/modules/audio_processing/transient/transient_suppressor_unittest.cc +++ b/modules/audio_processing/transient/transient_suppressor_unittest.cc @@ -23,8 +23,8 @@ TEST_P(TransientSuppressorImplTest, TypingDetectionLogicWorksAsExpectedForMono) { static const int kNumChannels = 1; - TransientSuppressorImpl ts(GetParam()); - ts.Initialize(ts::kSampleRate16kHz, ts::kSampleRate16kHz, kNumChannels); + TransientSuppressorImpl ts(GetParam(), ts::kSampleRate16kHz, + ts::kSampleRate16kHz, kNumChannels); // Each key-press enables detection. EXPECT_FALSE(ts.detection_enabled_);