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

Unified Diff: content/browser/speech/speech_recognizer_impl_unittest.cc

Issue 344583002: Modifies AudioInputCallback::OnData and use media::AudioBus instead of plain byte vector (Relanding) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added extra non-pure OnData API Created 6 years, 6 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 | « content/browser/speech/speech_recognizer_impl.cc ('k') | media/audio/agc_audio_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/speech/speech_recognizer_impl_unittest.cc
diff --git a/content/browser/speech/speech_recognizer_impl_unittest.cc b/content/browser/speech/speech_recognizer_impl_unittest.cc
index 3709024420c98592390cf5303ade209dda11fd36..13d5eba7dfc14a32db8595f3eea57b6bb02e1329 100644
--- a/content/browser/speech/speech_recognizer_impl_unittest.cc
+++ b/content/browser/speech/speech_recognizer_impl_unittest.cc
@@ -13,6 +13,7 @@
#include "media/audio/fake_audio_output_stream.h"
#include "media/audio/mock_audio_manager.h"
#include "media/audio/test_audio_input_controller_factory.h"
+#include "media/base/audio_bus.h"
#include "net/base/net_errors.h"
#include "net/url_request/test_url_fetcher_factory.h"
#include "net/url_request/url_request_status.h"
@@ -66,6 +67,13 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
ChannelLayoutToChannelCount(SpeechRecognizerImpl::kChannelLayout) *
SpeechRecognizerImpl::kNumBitsPerAudioSample) / (8 * 1000);
audio_packet_.resize(audio_packet_length_bytes);
+
+ const int channels =
+ ChannelLayoutToChannelCount(SpeechRecognizerImpl::kChannelLayout);
+ bytes_per_sample_ = SpeechRecognizerImpl::kNumBitsPerAudioSample / 8;
+ const int frames = audio_packet_length_bytes / channels / bytes_per_sample_;
+ audio_bus_ = media::AudioBus::Create(channels, frames);
+ audio_bus_->Zero();
}
void CheckEventsConsistency() {
@@ -147,10 +155,17 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
AudioInputController::set_factory_for_testing(NULL);
}
+ void CopyPacketToAudioBus() {
+ // Copy the created signal into an audio bus in a deinterleaved format.
+ audio_bus_->FromInterleaved(
+ &audio_packet_[0], audio_bus_->frames(), bytes_per_sample_);
+ }
+
void FillPacketWithTestWaveform() {
// Fill the input with a simple pattern, a 125Hz sawtooth waveform.
for (size_t i = 0; i < audio_packet_.size(); ++i)
audio_packet_[i] = static_cast<uint8>(i);
+ CopyPacketToAudioBus();
}
void FillPacketWithNoise() {
@@ -160,6 +175,7 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
value += factor;
audio_packet_[i] = value % 100;
}
+ CopyPacketToAudioBus();
}
protected:
@@ -178,6 +194,8 @@ class SpeechRecognizerImplTest : public SpeechRecognitionEventListener,
net::TestURLFetcherFactory url_fetcher_factory_;
TestAudioInputControllerFactory audio_input_controller_factory_;
std::vector<uint8> audio_packet_;
+ scoped_ptr<media::AudioBus> audio_bus_;
+ int bytes_per_sample_;
float volume_;
float noise_volume_;
};
@@ -222,8 +240,7 @@ TEST_F(SpeechRecognizerImplTest, StopWithData) {
// full recording to complete.
const size_t kNumChunks = 5;
for (size_t i = 0; i < kNumChunks; ++i) {
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
ASSERT_TRUE(fetcher);
@@ -264,8 +281,7 @@ TEST_F(SpeechRecognizerImplTest, CancelWithData) {
TestAudioInputController* controller =
audio_input_controller_factory_.controller();
ASSERT_TRUE(controller);
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
recognizer_->AbortRecognition();
base::MessageLoop::current()->RunUntilIdle();
@@ -285,8 +301,7 @@ TEST_F(SpeechRecognizerImplTest, ConnectionError) {
TestAudioInputController* controller =
audio_input_controller_factory_.controller();
ASSERT_TRUE(controller);
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
ASSERT_TRUE(fetcher);
@@ -323,8 +338,7 @@ TEST_F(SpeechRecognizerImplTest, ServerError) {
TestAudioInputController* controller =
audio_input_controller_factory_.controller();
ASSERT_TRUE(controller);
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
net::TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0);
ASSERT_TRUE(fetcher);
@@ -377,8 +391,7 @@ TEST_F(SpeechRecognizerImplTest, AudioControllerErrorWithData) {
TestAudioInputController* controller =
audio_input_controller_factory_.controller();
ASSERT_TRUE(controller);
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
controller->event_handler()->OnError(controller,
AudioInputController::UNKNOWN_ERROR);
base::MessageLoop::current()->RunUntilIdle();
@@ -403,8 +416,7 @@ TEST_F(SpeechRecognizerImplTest, NoSpeechCallbackIssued) {
GoogleOneShotRemoteEngine::kAudioPacketIntervalMs + 1;
// The vector is already filled with zero value samples on create.
for (int i = 0; i < num_packets; ++i) {
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
}
base::MessageLoop::current()->RunUntilIdle();
EXPECT_TRUE(recognition_started_);
@@ -432,14 +444,12 @@ TEST_F(SpeechRecognizerImplTest, NoSpeechCallbackNotIssued) {
// The vector is already filled with zero value samples on create.
for (int i = 0; i < num_packets / 2; ++i) {
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
}
FillPacketWithTestWaveform();
for (int i = 0; i < num_packets / 2; ++i) {
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
}
base::MessageLoop::current()->RunUntilIdle();
@@ -470,21 +480,18 @@ TEST_F(SpeechRecognizerImplTest, SetInputVolumeCallback) {
GoogleOneShotRemoteEngine::kAudioPacketIntervalMs;
FillPacketWithNoise();
for (int i = 0; i < num_packets; ++i) {
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
}
base::MessageLoop::current()->RunUntilIdle();
EXPECT_EQ(-1.0f, volume_); // No audio volume set yet.
// The vector is already filled with zero value samples on create.
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
EXPECT_FLOAT_EQ(0.74939233f, volume_);
FillPacketWithTestWaveform();
- controller->event_handler()->OnData(controller, &audio_packet_[0],
- audio_packet_.size());
+ controller->event_handler()->OnData(controller, audio_bus_.get());
base::MessageLoop::current()->RunUntilIdle();
EXPECT_NEAR(0.89926866f, volume_, 0.00001f);
EXPECT_FLOAT_EQ(0.75071919f, noise_volume_);
« no previous file with comments | « content/browser/speech/speech_recognizer_impl.cc ('k') | media/audio/agc_audio_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698