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
, 無法正確取得辨識結果了。