给 APK 做语音输入,我踩的三层坑
v2.0 给「天使中转」加了语音输入,以为半小时搞定。结果从 SpeechRecognizer 一路改到 Whisper,前后迭代了 v2.0.1、v2.2、v2.3、v2.4、v2.5、v2.6、v2.7 七个版本。三个坑,一层比一层深。
第一层:以为是代码写法问题
最开始用的是 SpeechRecognizer:点按钮开始识别。在 OPPO A5 上点下去,按钮一直闪,松开没反应,也不报错。
v2.0.1 换成系统 RecognizerIntent(国产机兼容性好点)——结果返回"已取消",或者干脆没反应。
v2.2 到 v2.4 修的都是表现层:取消识别误报失败、加状态提示、加详细错误码诊断。修完发现:错误码一切正常,识别服务就是不起字。不是写法问题。
第二层:以为是交互问题
v2.5 改成按住说话、松开停止识别;v2.6 又加了 15 秒超时保护,防止按钮闪一辈子。
还是不行。于是 v2.6 加了一行检测:系统到底有没有语音识别服务?
真机一跑,明确提示:系统无语音识别服务。
这台 OPPO A5 压根没装 Google 语音服务,也没有国产替代。之前所有"为什么没声音"的排查,全是在给一台没有声带的手机治嗓子。坑在设备环境,不在代码。
第三层:不依赖系统,自己录音
v2.7 换思路:不用系统识别了,自己录,云端转写。
按住按钮 → MediaRecorder 录 m4a → 松开 → 音频传给网页层 → 调自己的 New API /v1/audio/transcriptions,模型填 whisper-1 → 返回文本填进输入框。
APK 侧已构建签名(versionCode 21),但这条路把坑搬到了服务端:New API 里必须配好 whisper-1 的转写渠道,否则录音发出去也是一句 404。
截至发稿,v2.7 还没上更新服务器,whisper-1 也还没配。这个坑填完,语音这章才算完。
一句话总结
语音输入排查三问:写法对吗?交互对吗?手机里有这个服务吗? 第三问,应该放第一问。
评论 0
还没有评论,来抢沙发吧 :)