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