Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(922)

Unified Diff: webrtc/modules/audio_processing/audio_processing_impl.cc

Issue 1234463003: Integrate Intelligibility with APM (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: webrtc/modules/audio_processing/audio_processing_impl.cc
diff --git a/webrtc/modules/audio_processing/audio_processing_impl.cc b/webrtc/modules/audio_processing/audio_processing_impl.cc
index 87b82a6a3509131adae9ed698cc0f896fd01d4c0..079ee952cf47bdd5aa40ac61185cc7fd05c12b11 100644
--- a/webrtc/modules/audio_processing/audio_processing_impl.cc
+++ b/webrtc/modules/audio_processing/audio_processing_impl.cc
@@ -28,6 +28,7 @@ extern "C" {
#include "webrtc/modules/audio_processing/echo_control_mobile_impl.h"
#include "webrtc/modules/audio_processing/gain_control_impl.h"
#include "webrtc/modules/audio_processing/high_pass_filter_impl.h"
+#include "webrtc/modules/audio_processing/intelligibility/intelligibility_enhancer.h"
#include "webrtc/modules/audio_processing/level_estimator_impl.h"
#include "webrtc/modules/audio_processing/noise_suppression_impl.h"
#include "webrtc/modules/audio_processing/processing_component.h"
@@ -195,7 +196,8 @@ AudioProcessingImpl::AudioProcessingImpl(const Config& config,
beamformer_enabled_(config.Get<Beamforming>().enabled),
beamformer_(beamformer),
array_geometry_(config.Get<Beamforming>().array_geometry),
- supports_48kHz_(config.Get<AudioProcessing48kHzSupport>().enabled) {
+ supports_48kHz_(config.Get<AudioProcessing48kHzSupport>().enabled),
+ intelligibility_enabled_(config.Get<Intelligibility>().enabled) {
echo_cancellation_ = new EchoCancellationImpl(this, crit_);
component_list_.push_back(echo_cancellation_);
@@ -305,6 +307,8 @@ int AudioProcessingImpl::InitializeLocked() {
InitializeBeamformer();
+ InitializeIntelligibility();
+
#ifdef WEBRTC_AUDIOPROC_DEBUG_DUMP
if (debug_file_->Open()) {
int err = WriteInitMessage();
@@ -427,6 +431,11 @@ void AudioProcessingImpl::SetExtraOptions(const Config& config) {
transient_suppressor_enabled_ = config.Get<ExperimentalNs>().enabled;
InitializeTransient();
}
+
+ if (intelligibility_enabled_ != config.Get<Intelligibility>().enabled) {
+ intelligibility_enabled_ = config.Get<Intelligibility>().enabled;
+ InitializeIntelligibility();
+ }
}
int AudioProcessingImpl::input_sample_rate_hz() const {
@@ -599,6 +608,14 @@ int AudioProcessingImpl::ProcessStreamLocked() {
MaybeUpdateHistograms();
AudioBuffer* ca = capture_audio_.get(); // For brevity.
+
+ if (intelligibility_enabled_) {
+ float voice_probability =
+ agc_manager_.get() ? agc_manager_->voice_probability() : 0.f;
turaj 2015/07/14 18:28:51 Shouldn't we turn activity detector part of AGC on
aluebs-webrtc 2015/07/15 01:02:04 Also, to avoid being out of sync, this should prob
ekm 2015/07/17 19:59:38 To avoid these problems, and simplify things, swit
+ intelligibility_enhancer_->ProcessCaptureAudio(
+ ca->split_channels_f(kBand0To8kHz), voice_probability);
+ }
+
if (use_new_agc_ && gain_control_->is_enabled()) {
agc_manager_->AnalyzePreProcess(ca->channels()[0],
ca->num_channels(),
@@ -664,7 +681,7 @@ int AudioProcessingImpl::ProcessStreamLocked() {
return kNoError;
}
-int AudioProcessingImpl::AnalyzeReverseStream(const float* const* data,
+int AudioProcessingImpl::AnalyzeReverseStream(float* const* data,
int samples_per_channel,
int sample_rate_hz,
ChannelLayout layout) {
@@ -697,7 +714,12 @@ int AudioProcessingImpl::AnalyzeReverseStream(const float* const* data,
#endif
render_audio_->CopyFrom(data, samples_per_channel, layout);
- return AnalyzeReverseStreamLocked();
+ RETURN_ON_ERR(AnalyzeReverseStreamLocked());
+ if (intelligibility_enabled_) {
+ render_audio_->CopyTo(samples_per_channel, layout, data);
+ }
+
+ return kNoError;
}
int AudioProcessingImpl::AnalyzeReverseStream(AudioFrame* frame) {
@@ -740,7 +762,12 @@ int AudioProcessingImpl::AnalyzeReverseStream(AudioFrame* frame) {
#endif
render_audio_->DeinterleaveFrom(frame);
- return AnalyzeReverseStreamLocked();
+ RETURN_ON_ERR(AnalyzeReverseStreamLocked());
+ if (intelligibility_enabled_) {
aluebs-webrtc 2015/07/15 01:02:04 You don't need this if statement, because Interlea
ekm 2015/07/17 19:59:38 Done. As a result, I updated audio_buffer.Interlea
aluebs-webrtc 2015/07/20 19:33:42 Ack
+ render_audio_->InterleaveTo(frame, intelligibility_enabled_);
+ }
+
+ return kNoError;
}
int AudioProcessingImpl::AnalyzeReverseStreamLocked() {
@@ -755,6 +782,11 @@ int AudioProcessingImpl::AnalyzeReverseStreamLocked() {
RETURN_ON_ERR(gain_control_->ProcessRenderAudio(ra));
}
+ if (intelligibility_enabled_) {
turaj 2015/07/14 18:28:51 I suppose we want to do all the modifications to p
ekm 2015/07/17 19:59:37 Done.
+ intelligibility_enhancer_->ProcessRenderAudio(
+ ra->split_channels_f(kBand0To8kHz));
aluebs-webrtc 2015/07/15 01:02:04 Maybe not for this CL, but at some point this need
ekm 2015/07/17 19:59:38 Acknowledged. I think we'll save this for a later
aluebs-webrtc 2015/07/20 19:33:42 Agreed on leaving for another CL. I don't think an
ekm 2015/07/21 19:22:13 Acknowledged.
+ }
+
return kNoError;
}
@@ -1001,6 +1033,17 @@ void AudioProcessingImpl::InitializeBeamformer() {
}
}
+void AudioProcessingImpl::InitializeIntelligibility() {
+ if (intelligibility_enabled_) {
+ if (!intelligibility_enhancer_) {
aluebs-webrtc 2015/07/15 01:02:04 We probably want to reset the intelligibility_enha
ekm 2015/07/17 19:59:38 Done.
+ IntelligibilityEnhancer::Config config;
+ config.sample_rate_hz = split_rate_;
+ config.channels = fwd_in_format_.num_channels();
aluebs-webrtc 2015/07/15 01:02:04 Shouldn't this be fwd_proc_format_?
ekm 2015/07/17 19:59:38 Just set it to single channel for now, since that'
aluebs-webrtc 2015/07/20 19:33:42 Then I think it is better to set the correct value
ekm 2015/07/21 19:22:13 I agree. The problem was that the enhancer only ha
aluebs-webrtc 2015/07/21 21:30:22 This is better.
+ intelligibility_enhancer_.reset(new IntelligibilityEnhancer(config));
+ }
+ }
+}
+
void AudioProcessingImpl::MaybeUpdateHistograms() {
static const int kMinDiffDelayMs = 60;

Powered by Google App Engine
This is Rietveld 408576698