Amadeus复刻计划(App篇 七)
前言:调用第三方软件的activity用以语音识别的方式还是存在很多问题,版本不兼容、需要另行下载第三方软件、不同设备存在的各种问题等,本篇则是为了解决这些问题而存在的
更新内容:
打包了百度语音识别的sdk,因此本软件可以做到开箱即用,无需下载其他语音引擎,缺点是有效期仅有半年,并限制了15万次的接口调用,由于是免费使用的,到期再行注册应该就可以了。
增加了复读功能,原本打算使用chatgpt进行人机对话,但最近大陆ip被封禁,暂无法使用,于是只能退而求其次,使用ai语音合成进行复读,为之后添加功能做准备。
降低了系统版本要求,此次更新后安卓5.0及以上版本均可使用(之前仅限安卓10)
具体实现:
打包百度语音识别的方法已有详细教程(虽说csdn很烂,但总能shi里刨金)
参考链接:https://blog.csdn.net/qq_38436214/article/details/106636277
该教程中一直到获取语音识别的结果均可一步步照做,但其对结果的解析略显复杂,笔者的处理是将字符串类型的结果转为json,并从中直接提取best_result键值对,两行代码即可解决,如下:
res = new JSONObject(params);
input = res.getString("best_result");打包百度sdk时可能会报错(VAD……),请将minsdk改为21,实测好用,具体理由未知,猜测时该sdk使用了高版本安卓被弃用的方法
复读功能的实现借助了语音合成的api,安卓中使用网络请求需要单独开设一个线程,因此结果的获取也需要通过消息传递机制交给UI界面,笔者使用的是Handle机制,个人认为比较简单好用。
因代码较为冗长、繁琐,此处笔者便不列出了,具体思路为:
获取中文语音识别结果->翻译成日文->通过语音合成api拿到相应音频二进制信息->将该信息保存在本地以避免重复获取->传递信息给ui界面并播放该音频
值得注意的事:
百度语音识别的开发文档不甚完善,因此目前仅支持中文语音识别与部分简单的英文识别(如hello,good morning)
安卓开发时需要小心处理权限问题,如文件储存权限不仅需要在manifest中静态定义,并且也需要在activity中进行动态申请,否则会出现访问拒绝等错误
复读功能会检测“进入复读模式”之类的关键词进入,点击麦克风即可录制待复读的音频,如要退出,请说“退出复读模式”,具体操作请诸位自行探索。