| 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_);
|
|
|