DEV Community

codemee
codemee

Posted on • Updated on

Android 開發 RecognizerIntent 的陷阱

Android App 中要進行語音辨識, 也就是 speech to text 的功能, 必須仰賴 SpeechRecognizer 類別, 並搭配 RecognizerIntent 指定相關的設定, 其中有一項設定是 EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, 根據文件的說明, 它的作用是在辨識出文字後, 要等多少靜默的時間才當成是辨識結束, 不過這個設定原本似乎一直無效, 至少在我測試的以下手機中如此:

手機型號 系統版本 語音相關 App 版本
OPPO A31 Android 9 Google 10.84.19.21.arm64
OPPO A31 Android 9 Google 13.4.19.23.arm64
Real me C3 Android 10 Google 10.84.19.21.arm64
小米 A1 Android 9 Google 10.84.19.21.arm64
Pixel 4a Android 12 Speech Services by Google
googletts.google-speech-apk_20210729.00_p0.387528199.tnt

事實上, 在 Android 官方的文件中, 有以下這樣的說明:

Depending on the recognizer implementation, these values may have no effect.

所以沒有效用也算是正常的。但是如果把上述語音相關 App 更新到新的版本, 變成以下這樣 (實際變化的版本我不確定):

手機型號 系統版本 語音相關 App 版本
OPPO A31 Android 9 Google 13.17.13.23.arm64
Real me C3 Android 10 Google 13.17.13.23.arm64
小米 A1 Android 9 Google 13.17.13.23.arm64
Pixel 4a Android 12 Speech Services by Google
版本 googletts.google-speech-apk_20220404.02_p1.440604258

剛剛提到的 EXTRA_SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS 它就生效了, 如果有設定這個選項, 而且時間設定比較長, 就可能會導致一直無法持續靜默足夠的時間, 導致語音辨識時只會引發 onPartialResults, 不會引發 onResults, 無法正確取得辨識結果了。

Discussion (0)