summaryrefslogtreecommitdiffstats
path: root/chrome/browser/speech/speech_recognizer_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/speech/speech_recognizer_unittest.cc')
-rw-r--r--chrome/browser/speech/speech_recognizer_unittest.cc63
1 files changed, 55 insertions, 8 deletions
diff --git a/chrome/browser/speech/speech_recognizer_unittest.cc b/chrome/browser/speech/speech_recognizer_unittest.cc
index 9e1cf07..e049558 100644
--- a/chrome/browser/speech/speech_recognizer_unittest.cc
+++ b/chrome/browser/speech/speech_recognizer_unittest.cc
@@ -15,10 +15,6 @@ using media::AudioInputController;
using media::TestAudioInputController;
using media::TestAudioInputControllerFactory;
-namespace {
-const int kAudioPacketLengthBytes = 1000;
-}
-
namespace speech_input {
class SpeechRecognizerTest : public SpeechRecognizerDelegate,
@@ -31,7 +27,8 @@ class SpeechRecognizerTest : public SpeechRecognizerDelegate,
recording_complete_(false),
recognition_complete_(false),
result_received_(false),
- error_(SpeechRecognizer::RECOGNIZER_NO_ERROR) {
+ error_(SpeechRecognizer::RECOGNIZER_NO_ERROR),
+ volume_(-1.0f) {
int audio_packet_length_bytes =
(SpeechRecognizer::kAudioSampleRate *
SpeechRecognizer::kAudioPacketIntervalMs *
@@ -67,6 +64,10 @@ class SpeechRecognizerTest : public SpeechRecognizerDelegate,
error_ = error;
}
+ virtual void SetInputVolume(int caller_id, float volume) {
+ volume_ = volume;
+ }
+
// testing::Test methods.
virtual void SetUp() {
URLFetcher::set_factory(&url_fetcher_factory_);
@@ -78,6 +79,12 @@ class SpeechRecognizerTest : public SpeechRecognizerDelegate,
AudioInputController::set_factory(NULL);
}
+ 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);
+ }
+
protected:
MessageLoopForIO message_loop_;
ChromeThread io_thread_;
@@ -89,6 +96,7 @@ class SpeechRecognizerTest : public SpeechRecognizerDelegate,
TestURLFetcherFactory url_fetcher_factory_;
TestAudioInputControllerFactory audio_input_controller_factory_;
std::vector<uint8> audio_packet_;
+ float volume_;
};
TEST_F(SpeechRecognizerTest, StopNoData) {
@@ -237,9 +245,8 @@ TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) {
controller->event_handler()->OnData(controller, &audio_packet_[0],
audio_packet_.size());
}
- // Fill the rest of 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);
+
+ FillPacketWithTestWaveform();
for (int i = 0; i < num_packets / 2; ++i) {
controller->event_handler()->OnData(controller, &audio_packet_[0],
audio_packet_.size());
@@ -252,4 +259,44 @@ TEST_F(SpeechRecognizerTest, NoSpeechCallbackNotIssued) {
recognizer_->CancelRecognition();
}
+TEST_F(SpeechRecognizerTest, SetInputVolumeCallback) {
+ // Start recording and give a lot of packets with audio samples set to zero
+ // and then some more with reasonably loud audio samples. Check that we don't
+ // get the callback during estimation phase, then get zero for the silence
+ // samples and proper volume for the loud audio.
+ EXPECT_TRUE(recognizer_->StartRecording());
+ TestAudioInputController* controller =
+ audio_input_controller_factory_.controller();
+ ASSERT_TRUE(controller);
+ controller = audio_input_controller_factory_.controller();
+ ASSERT_TRUE(controller);
+
+ // Feed some samples to begin with for the endpointer to do noise estimation.
+ int num_packets = SpeechRecognizer::kEndpointerEstimationTimeMs /
+ SpeechRecognizer::kAudioPacketIntervalMs;
+ for (int i = 0; i < num_packets; ++i) {
+ controller->event_handler()->OnData(controller, &audio_packet_[0],
+ audio_packet_.size());
+ }
+ MessageLoop::current()->RunAllPending();
+ 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());
+ MessageLoop::current()->RunAllPending();
+ EXPECT_EQ(0, volume_);
+
+ FillPacketWithTestWaveform();
+ controller->event_handler()->OnData(controller, &audio_packet_[0],
+ audio_packet_.size());
+ MessageLoop::current()->RunAllPending();
+ EXPECT_FLOAT_EQ(0.9f, volume_);
+
+ EXPECT_EQ(SpeechRecognizer::RECOGNIZER_NO_ERROR, error_);
+ EXPECT_FALSE(recording_complete_);
+ EXPECT_FALSE(recognition_complete_);
+ recognizer_->CancelRecognition();
+}
+
} // namespace speech_input