diff options
author | satish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-01 18:38:36 +0000 |
---|---|---|
committer | satish@chromium.org <satish@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-01 18:38:36 +0000 |
commit | 3b283d6e8c6285efde6a1a34273a3bdb9061bd44 (patch) | |
tree | 9c221cc4d11dacf4f20e9c05287fde698d6721c6 /content/browser/speech/endpointer | |
parent | 229fa74de71e0771f734cc788063515da62f30b4 (diff) | |
download | chromium_src-3b283d6e8c6285efde6a1a34273a3bdb9061bd44.zip chromium_src-3b283d6e8c6285efde6a1a34273a3bdb9061bd44.tar.gz chromium_src-3b283d6e8c6285efde6a1a34273a3bdb9061bd44.tar.bz2 |
Add a noise indicator to the speech bubble volume indicator.
The noise indicator is drawn as a light blue area at the beginning and if there
was clipping that is denoted with a red area at the end of the meter. The noise
level comes from the endpointer -> SpeechRecognizer -> SpeechInputBubbleController -> SpeechInputBubble
hence a bunch of volume setting methods are updated with the new parameter.
I have also added a new utility method to SpeechInputManager to invoke the platform
provided microphone settings UI, this will be used in the next CL which contains
windows, mac and linux specific UI changes.
BUG=69886
TEST=manual, invoke speech input and check the bubble volume indicator to see background noise and clipping.
Review URL: http://codereview.chromium.org/6597071
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76395 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/speech/endpointer')
-rw-r--r-- | content/browser/speech/endpointer/endpointer.h | 3 | ||||
-rw-r--r-- | content/browser/speech/endpointer/energy_endpointer.cc | 18 | ||||
-rw-r--r-- | content/browser/speech/endpointer/energy_endpointer.h | 3 |
3 files changed, 19 insertions, 5 deletions
diff --git a/content/browser/speech/endpointer/endpointer.h b/content/browser/speech/endpointer/endpointer.h index be4bd65..c8cf80a 100644 --- a/content/browser/speech/endpointer/endpointer.h +++ b/content/browser/speech/endpointer/endpointer.h @@ -96,6 +96,9 @@ class Endpointer { return speech_input_complete_; } + // RMS background noise level in dB. + float NoiseLevelDb() const { return energy_endpointer_.GetNoiseLevelDb(); } + private: // Reset internal states. Helper method common to initial input utterance // and following input utternaces. diff --git a/content/browser/speech/endpointer/energy_endpointer.cc b/content/browser/speech/endpointer/energy_endpointer.cc index c806aed..edf3edd 100644 --- a/content/browser/speech/endpointer/energy_endpointer.cc +++ b/content/browser/speech/endpointer/energy_endpointer.cc @@ -33,6 +33,13 @@ int64 Secs2Usecs(float seconds) { return static_cast<int64>(0.5 + (1.0e6 * seconds)); } +float GetDecibel(float value) { + const float kVerySmallValue = 1.0e-100f; + if (value < kVerySmallValue) + value = kVerySmallValue; + return 20 * log10(value); +} + } // namespace namespace speech_input { @@ -326,11 +333,12 @@ void EnergyEndpointer::ProcessAudioFrame(int64 time_us, UpdateLevels(rms); ++frame_counter_; - if (rms_out) { - *rms_out = -120.0; - if ((noise_level_ > 0.0) && ((rms / noise_level_ ) > 0.000001)) - *rms_out = static_cast<float>(20.0 * log10(rms / noise_level_)); - } + if (rms_out) + *rms_out = GetDecibel(rms); +} + +float EnergyEndpointer::GetNoiseLevelDb() const { + return GetDecibel(noise_level_); } void EnergyEndpointer::UpdateLevels(float rms) { diff --git a/content/browser/speech/endpointer/energy_endpointer.h b/content/browser/speech/endpointer/energy_endpointer.h index b10d8b7..77ccc55 100644 --- a/content/browser/speech/endpointer/energy_endpointer.h +++ b/content/browser/speech/endpointer/energy_endpointer.h @@ -91,6 +91,9 @@ class EnergyEndpointer { return estimating_environment_; } + // Returns estimated noise level in dB. + float GetNoiseLevelDb() const; + private: class HistoryRing; |