1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "ui/app_list/speech_ui_model.h"
13 // The default sound level, just gotten from the developer device.
14 const int16 kDefaultSoundLevel = 200;
18 SpeechUIModel::SpeechUIModel()
21 state_(app_list::SPEECH_RECOGNITION_OFF),
22 minimum_sound_level_(kDefaultSoundLevel),
23 maximum_sound_level_(kDefaultSoundLevel) {
26 SpeechUIModel::~SpeechUIModel() {}
28 void SpeechUIModel::SetSpeechResult(const base::string16& result,
30 if (result_ == result && is_final_ == is_final)
35 FOR_EACH_OBSERVER(SpeechUIModelObserver,
37 OnSpeechResult(result, is_final));
40 void SpeechUIModel::UpdateSoundLevel(int16 level) {
41 if (sound_level_ == level)
46 // Tweak the sound level limits adaptively.
47 // - min is the minimum value during the speech recognition starts but speech
48 // itself hasn't started.
49 // - max is the maximum value when the user speaks.
50 if (state_ == SPEECH_RECOGNITION_IN_SPEECH)
51 maximum_sound_level_ = std::max(level, maximum_sound_level_);
53 minimum_sound_level_ = std::min(level, minimum_sound_level_);
55 if (maximum_sound_level_ < minimum_sound_level_) {
56 maximum_sound_level_ = std::max(
57 static_cast<int16>(minimum_sound_level_ + kDefaultSoundLevel),
61 int16 range = maximum_sound_level_ - minimum_sound_level_;
62 uint8 visible_level = 0;
64 int16 visible_level_in_range =
65 std::min(std::max(minimum_sound_level_, sound_level_),
66 maximum_sound_level_);
68 (visible_level_in_range - minimum_sound_level_) * kuint8max / range;
71 FOR_EACH_OBSERVER(SpeechUIModelObserver,
73 OnSpeechSoundLevelChanged(visible_level));
76 void SpeechUIModel::SetSpeechRecognitionState(
77 SpeechRecognitionState new_state) {
78 if (state_ == new_state)
82 // Revert the min/max sound level to the default.
83 if (state_ != SPEECH_RECOGNITION_RECOGNIZING &&
84 state_ != SPEECH_RECOGNITION_IN_SPEECH) {
85 minimum_sound_level_ = kDefaultSoundLevel;
86 maximum_sound_level_ = kDefaultSoundLevel;
89 FOR_EACH_OBSERVER(SpeechUIModelObserver,
91 OnSpeechRecognitionStateChanged(new_state));
94 void SpeechUIModel::AddObserver(SpeechUIModelObserver* observer) {
95 observers_.AddObserver(observer);
98 void SpeechUIModel::RemoveObserver(SpeechUIModelObserver* observer) {
99 observers_.RemoveObserver(observer);
102 } // namespace app_list