Add beamforming to audioproc_float utility.
R=andrew@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/41469004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@8069 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/webrtc/common_audio/wav_file.cc b/webrtc/common_audio/wav_file.cc
index de83b03..9950434 100644
--- a/webrtc/common_audio/wav_file.cc
+++ b/webrtc/common_audio/wav_file.cc
@@ -39,7 +39,7 @@
WavReader::WavReader(const std::string& filename)
: file_handle_(fopen(filename.c_str(), "rb")) {
- CHECK(file_handle_);
+ CHECK(file_handle_ && "Could not open wav file for reading.");
ReadableWavFile readable(file_handle_);
WavFormat format;
@@ -96,7 +96,7 @@
num_channels_(num_channels),
num_samples_(0),
file_handle_(fopen(filename.c_str(), "wb")) {
- CHECK(file_handle_);
+ CHECK(file_handle_ && "Could not open wav file for writing.");
CHECK(CheckWavParameters(num_channels_,
sample_rate_,
kWavFormat,
diff --git a/webrtc/modules/audio_processing/test/audioproc_float.cc b/webrtc/modules/audio_processing/test/audioproc_float.cc
index 6286b5a..83e9a88 100644
--- a/webrtc/modules/audio_processing/test/audioproc_float.cc
+++ b/webrtc/modules/audio_processing/test/audioproc_float.cc
@@ -9,6 +9,7 @@
*/
#include <stdio.h>
+#include <string>
#include "gflags/gflags.h"
#include "webrtc/base/checks.h"
@@ -23,12 +24,15 @@
DEFINE_string(o, "out.wav", "Name of the capture output file to write to.");
DEFINE_int32(o_channels, 0, "Number of output channels. Defaults to input.");
DEFINE_int32(o_sample_rate, 0, "Output sample rate in Hz. Defaults to input.");
+DEFINE_double(mic_spacing, 0.0,
+ "Microphone spacing in meters. Used when beamforming is enabled");
DEFINE_bool(aec, false, "Enable echo cancellation.");
DEFINE_bool(agc, false, "Enable automatic gain control.");
DEFINE_bool(hpf, false, "Enable high-pass filtering.");
DEFINE_bool(ns, false, "Enable noise suppression.");
DEFINE_bool(ts, false, "Enable transient suppression.");
+DEFINE_bool(bf, false, "Enable beamforming.");
DEFINE_bool(all, false, "Enable all components.");
DEFINE_int32(ns_level, -1, "Noise suppression level [0 - 3].");
@@ -72,13 +76,27 @@
o_sample_rate = c_file.sample_rate();
WavWriter o_file(FLAGS_o, o_sample_rate, o_channels);
- printf("Input file: %s\nChannels: %d, Sample rate: %d Hz\n\n",
- FLAGS_c.c_str(), c_file.num_channels(), c_file.sample_rate());
- printf("Output file: %s\nChannels: %d, Sample rate: %d Hz\n\n",
- FLAGS_o.c_str(), o_file.num_channels(), o_file.sample_rate());
-
Config config;
config.Set<ExperimentalNs>(new ExperimentalNs(FLAGS_ts || FLAGS_all));
+
+ if (FLAGS_bf || FLAGS_all) {
+ if (FLAGS_mic_spacing <= 0) {
+ fprintf(stderr,
+ "mic_spacing must a positive value when beamforming is enabled.\n");
+ return 1;
+ }
+
+ const size_t num_mics = c_file.num_channels();
+ std::vector<Point> array_geometry;
+ array_geometry.reserve(num_mics);
+
+ for (size_t i = 0; i < num_mics; ++i) {
+ array_geometry.push_back(Point(0.0, i * FLAGS_mic_spacing, 0.0));
+ }
+
+ config.Set<Beamforming>(new Beamforming(true, array_geometry));
+ }
+
scoped_ptr<AudioProcessing> ap(AudioProcessing::Create(config));
if (FLAGS_dump != "") {
CHECK_EQ(kNoErr, ap->echo_cancellation()->Enable(FLAGS_aec || FLAGS_all));
@@ -94,6 +112,11 @@
CHECK_EQ(kNoErr, ap->noise_suppression()->set_level(
static_cast<NoiseSuppression::Level>(FLAGS_ns_level)));
+ printf("Input file: %s\nChannels: %d, Sample rate: %d Hz\n\n",
+ FLAGS_c.c_str(), c_file.num_channels(), c_file.sample_rate());
+ printf("Output file: %s\nChannels: %d, Sample rate: %d Hz\n\n",
+ FLAGS_o.c_str(), o_file.num_channels(), o_file.sample_rate());
+
ChannelBuffer<float> c_buf(c_file.sample_rate() / kChunksPerSecond,
c_file.num_channels());
ChannelBuffer<float> o_buf(o_file.sample_rate() / kChunksPerSecond,