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

Unified Diff: webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc

Issue 1729753003: Fix the stereo support in IntelligibilityEnhancer (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@gains2
Patch Set: Rebasing Created 4 years, 10 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
« no previous file with comments | « webrtc/modules/audio_processing/intelligibility/intelligibility_utils_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc
diff --git a/webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc b/webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc
index ab8524bb0028de2f9f5e9cb1e3b9b39534a2e7a5..e196e29436e4ee6c7e28b98797e8653662f3be54 100644
--- a/webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc
+++ b/webrtc/modules/audio_processing/intelligibility/test/intelligibility_proc.cc
@@ -8,17 +8,10 @@
* be found in the AUTHORS file in the root of the source tree.
*/
-//
-// Command line tool for speech intelligibility enhancement. Provides for
-// running and testing intelligibility_enhancer as an independent process.
-// Use --help for options.
-//
-
-#include <sys/stat.h>
-
#include "gflags/gflags.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "webrtc/base/criticalsection.h"
+#include "webrtc/common_audio/channel_buffer.h"
#include "webrtc/common_audio/include/audio_util.h"
#include "webrtc/common_audio/wav_file.h"
#include "webrtc/modules/audio_processing/audio_buffer.h"
@@ -40,62 +33,45 @@ void void_main(int argc, char* argv[]) {
"\n\nInput files must be little-endian 16-bit signed raw PCM.\n");
google::ParseCommandLineFlags(&argc, &argv, true);
- // Load settings and wav input.
- struct stat in_stat, noise_stat;
- ASSERT_EQ(stat(FLAGS_clear_file.c_str(), &in_stat), 0)
- << "Empty speech file.";
- ASSERT_EQ(stat(FLAGS_noise_file.c_str(), &noise_stat), 0)
- << "Empty noise file.";
-
- const size_t samples = std::min(in_stat.st_size, noise_stat.st_size) / 2;
-
WavReader in_file(FLAGS_clear_file);
- std::vector<float> in_fpcm(samples);
- in_file.ReadSamples(samples, &in_fpcm[0]);
- FloatS16ToFloat(&in_fpcm[0], samples, &in_fpcm[0]);
-
WavReader noise_file(FLAGS_noise_file);
- std::vector<float> noise_fpcm(samples);
- noise_file.ReadSamples(samples, &noise_fpcm[0]);
- FloatS16ToFloat(&noise_fpcm[0], samples, &noise_fpcm[0]);
-
- // Run intelligibility enhancement.
+ WavWriter out_file(FLAGS_out_file, in_file.sample_rate(),
+ in_file.num_channels());
IntelligibilityEnhancer enh(in_file.sample_rate(), in_file.num_channels());
rtc::CriticalSection crit;
NoiseSuppressionImpl ns(&crit);
ns.Initialize(noise_file.num_channels(), noise_file.sample_rate());
ns.Enable(true);
-
- // Mirror real time APM chunk size. Duplicates chunk_length_ in
- // IntelligibilityEnhancer.
- size_t fragment_size = in_file.sample_rate() / 100;
- AudioBuffer capture_audio(fragment_size, noise_file.num_channels(),
- fragment_size, noise_file.num_channels(),
- fragment_size);
- StreamConfig stream_config(in_file.sample_rate(), noise_file.num_channels());
-
- // Slice the input into smaller chunks, as the APM would do, and feed them
- // through the enhancer.
- float* clear_cursor = &in_fpcm[0];
- float* noise_cursor = &noise_fpcm[0];
-
- for (size_t i = 0; i < samples; i += fragment_size) {
- capture_audio.CopyFrom(&noise_cursor, stream_config);
+ const size_t in_samples = noise_file.sample_rate() / 100;
+ const size_t noise_samples = noise_file.sample_rate() / 100;
+ std::vector<float> in(in_samples * in_file.num_channels());
+ std::vector<float> noise(noise_samples * noise_file.num_channels());
+ ChannelBuffer<float> in_buf(in_samples, in_file.num_channels());
+ ChannelBuffer<float> noise_buf(noise_samples, noise_file.num_channels());
+ AudioBuffer capture_audio(noise_samples, noise_file.num_channels(),
+ noise_samples, noise_file.num_channels(),
+ noise_samples);
+ StreamConfig stream_config(noise_file.sample_rate(),
+ noise_file.num_channels());
+ while (in_file.ReadSamples(in.size(), in.data()) == in.size() &&
+ noise_file.ReadSamples(noise.size(), noise.data()) == noise.size()) {
+ FloatS16ToFloat(in.data(), in.size(), in.data());
+ FloatS16ToFloat(noise.data(), noise.size(), noise.data());
+ Deinterleave(in.data(), in_buf.num_frames(), in_buf.num_channels(),
+ in_buf.channels());
+ Deinterleave(noise.data(), noise_buf.num_frames(), noise_buf.num_channels(),
+ noise_buf.channels());
+ capture_audio.CopyFrom(noise_buf.channels(), stream_config);
ns.AnalyzeCaptureAudio(&capture_audio);
ns.ProcessCaptureAudio(&capture_audio);
enh.SetCaptureNoiseEstimate(ns.NoiseEstimate());
- enh.ProcessRenderAudio(&clear_cursor, in_file.sample_rate(),
+ enh.ProcessRenderAudio(in_buf.channels(), in_file.sample_rate(),
in_file.num_channels());
- clear_cursor += fragment_size;
- noise_cursor += fragment_size;
+ Interleave(in_buf.channels(), in_buf.num_frames(), in_buf.num_channels(),
+ in.data());
+ FloatToFloatS16(in.data(), in.size(), in.data());
+ out_file.WriteSamples(in.data(), in.size());
}
-
- FloatToFloatS16(&in_fpcm[0], samples, &in_fpcm[0]);
-
- WavWriter out_file(FLAGS_out_file,
- in_file.sample_rate(),
- in_file.num_channels());
- out_file.WriteSamples(&in_fpcm[0], samples);
}
} // namespace
« no previous file with comments | « webrtc/modules/audio_processing/intelligibility/intelligibility_utils_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698