summaryrefslogtreecommitdiff
path: root/common_audio
diff options
context:
space:
mode:
authorkwiberg@webrtc.org <kwiberg@webrtc.org>2014-08-25 06:26:04 +0000
committerkwiberg@webrtc.org <kwiberg@webrtc.org>2014-08-25 06:26:04 +0000
commit999bcbc7588ed449b0ee6db29aeb79f72007488b (patch)
tree75ee1c860eb0e2cc46445efddedc739399958b1b /common_audio
parentf854f30d7981795f687f9b4379100c037934535d (diff)
downloadwebrtc-999bcbc7588ed449b0ee6db29aeb79f72007488b.tar.gz
Fix WEBRTC_AEC_DEBUG_DUMP (broken by int16->float conversion)
And in the process, make it dump WAV files instead of raw PCM. R=andrew@webrtc.org, bjornv@webrtc.org Review URL: https://webrtc-codereview.appspot.com/19089004 git-svn-id: http://webrtc.googlecode.com/svn/trunk/webrtc@6959 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'common_audio')
-rw-r--r--common_audio/wav_writer.cc12
-rw-r--r--common_audio/wav_writer.h7
-rw-r--r--common_audio/wav_writer_unittest.cc21
3 files changed, 36 insertions, 4 deletions
diff --git a/common_audio/wav_writer.cc b/common_audio/wav_writer.cc
index e5714735..f3b8118c 100644
--- a/common_audio/wav_writer.cc
+++ b/common_audio/wav_writer.cc
@@ -101,3 +101,15 @@ void rtc_WavWriteSamples(rtc_WavFile* wf,
size_t num_samples) {
reinterpret_cast<webrtc::WavFile*>(wf)->WriteSamples(samples, num_samples);
}
+
+int rtc_WavSampleRate(const rtc_WavFile* wf) {
+ return reinterpret_cast<const webrtc::WavFile*>(wf)->sample_rate();
+}
+
+int rtc_WavNumChannels(const rtc_WavFile* wf) {
+ return reinterpret_cast<const webrtc::WavFile*>(wf)->num_channels();
+}
+
+uint32_t rtc_WavNumSamples(const rtc_WavFile* wf) {
+ return reinterpret_cast<const webrtc::WavFile*>(wf)->num_samples();
+}
diff --git a/common_audio/wav_writer.h b/common_audio/wav_writer.h
index a8fee51e..e0582657 100644
--- a/common_audio/wav_writer.h
+++ b/common_audio/wav_writer.h
@@ -34,6 +34,10 @@ class WavFile {
// interleaved channels.
void WriteSamples(const float* samples, size_t num_samples);
+ int sample_rate() const { return sample_rate_; }
+ int num_channels() const { return num_channels_; }
+ uint32_t num_samples() const { return num_samples_; }
+
private:
void WriteSamples(const int16_t* samples, size_t num_samples);
void Close();
@@ -57,6 +61,9 @@ void rtc_WavClose(rtc_WavFile* wf);
void rtc_WavWriteSamples(rtc_WavFile* wf,
const float* samples,
size_t num_samples);
+int rtc_WavSampleRate(const rtc_WavFile* wf);
+int rtc_WavNumChannels(const rtc_WavFile* wf);
+uint32_t rtc_WavNumSamples(const rtc_WavFile* wf);
#ifdef __cplusplus
} // extern "C"
diff --git a/common_audio/wav_writer_unittest.cc b/common_audio/wav_writer_unittest.cc
index 9efe96e3..9c593be6 100644
--- a/common_audio/wav_writer_unittest.cc
+++ b/common_audio/wav_writer_unittest.cc
@@ -25,10 +25,14 @@ static const float kSamples[] = {0.0, 10.0, 4e4, -1e9};
// Write a tiny WAV file with the C++ interface and verify the result.
TEST(WavWriterTest, CPP) {
const std::string outfile = webrtc::test::OutputPath() + "wavtest1.wav";
- static const int kNumSamples = 3;
+ static const uint32_t kNumSamples = 3;
{
webrtc::WavFile w(outfile, 14099, 1);
+ EXPECT_EQ(14099, w.sample_rate());
+ EXPECT_EQ(1, w.num_channels());
+ EXPECT_EQ(0u, w.num_samples());
w.WriteSamples(kSamples, kNumSamples);
+ EXPECT_EQ(kNumSamples, w.num_samples());
}
static const uint8_t kExpectedContents[] = {
'R', 'I', 'F', 'F',
@@ -64,9 +68,14 @@ TEST(WavWriterTest, CPP) {
TEST(WavWriterTest, C) {
const std::string outfile = webrtc::test::OutputPath() + "wavtest2.wav";
rtc_WavFile *w = rtc_WavOpen(outfile.c_str(), 11904, 2);
- static const int kNumSamples = 4;
+ EXPECT_EQ(11904, rtc_WavSampleRate(w));
+ EXPECT_EQ(2, rtc_WavNumChannels(w));
+ EXPECT_EQ(0u, rtc_WavNumSamples(w));
+ static const uint32_t kNumSamples = 4;
rtc_WavWriteSamples(w, &kSamples[0], 2);
+ EXPECT_EQ(2u, rtc_WavNumSamples(w));
rtc_WavWriteSamples(w, &kSamples[2], kNumSamples - 2);
+ EXPECT_EQ(kNumSamples, rtc_WavNumSamples(w));
rtc_WavClose(w);
static const uint8_t kExpectedContents[] = {
'R', 'I', 'F', 'F',
@@ -104,9 +113,9 @@ TEST(WavWriterTest, LargeFile) {
std::string outfile = webrtc::test::OutputPath() + "wavtest3.wav";
static const int kSampleRate = 8000;
static const int kNumChannels = 2;
- static const int kNumSamples = 3 * kSampleRate * kNumChannels;
+ static const uint32_t kNumSamples = 3 * kSampleRate * kNumChannels;
float samples[kNumSamples];
- for (int i = 0; i < kNumSamples; i += kNumChannels) {
+ for (uint32_t i = 0; i < kNumSamples; i += kNumChannels) {
// A nice periodic beeping sound.
static const double kToneHz = 440;
const double t = static_cast<double>(i) / (kNumChannels * kSampleRate);
@@ -117,7 +126,11 @@ TEST(WavWriterTest, LargeFile) {
}
{
webrtc::WavFile w(outfile, kSampleRate, kNumChannels);
+ EXPECT_EQ(kSampleRate, w.sample_rate());
+ EXPECT_EQ(kNumChannels, w.num_channels());
+ EXPECT_EQ(0u, w.num_samples());
w.WriteSamples(samples, kNumSamples);
+ EXPECT_EQ(kNumSamples, w.num_samples());
}
EXPECT_EQ(sizeof(int16_t) * kNumSamples + webrtc::kWavHeaderSize,
webrtc::test::GetFileSize(outfile));