前言
用mui混合开发的APP,现有一个功能需求就是语音转换成文字,并把语音进行保存。对此考虑两种选择讯飞和百度。最终选择了百度语音。
百度语音

通过官方文档我们大致可以确定如果想要实现语音识别,要做到以下几点:
1.获取Access Token
2.获取录音 REST API的形式传给百度服务器,返回文字
1.获取Access Token
1.1.申请百度开发账号
我是把百度信息放到系统中的配置文件中,每次使用的时候调用接口即可。如果有所修改便于维护。
<!--百度人工智能平台访问配置--> <add key="BaiduAIPAppID" value="22465672" /> <add key="BaiduAIPAPIKey" value="hUw1j0gFd5k0GVzM3m9dGGnL" /> <add key="BaiduAIPSecretKey" value="YddydGN4NqbzHUGtFu1Gug8jhFXKf7vN" />
ps:以上百度账号不能正常使用,自己如果要用请自行申请。
1.2.获取Access Token
从官网上我们可以知道access Token 是有有效期的。但在有效期下多次提交申请获得Access Token是相同的,所以我在同步到手机缓存是设置了有效期。在判断是否存在或者是否过期而做出是否重新申请的判断。
1.2.1.初始化更新数据
下载安装app后,把百度账号存入手机缓存中,以便于后期直接使用。
/* * 更新百度人工智能平台访问配置 */ function UpdateBaiduAipConfig(){ //代用服务器接口获取百度账号相应信息保存到手机缓存中 platform.ajax("MBase/GetBaiduAipConfig",null,function(data){ if(data){ var currentAppID = platform.GetData('BaiduAIPAppID') ; console.log(currentAppID) if (currentAppID != data.AppID) {//判断是否已存在相关数据 console.log("AppID变化,更新配置"); platform.SaveData("BaiduAIPAppID", data.AppID)//此方法是封装的H5存储页面缓存在这不再过多叙述 platform.SaveData("BaiduAIPAPIKey", data.APIKey) platform.SaveData("BaiduAIPSecretKey", data.SecretKey) // 强制刷新token; platform.SaveData("token_timeout", new Date().getTime()) }else{ console.log("AppID没有变化,无需更新"); } } },"post"); }
以上把百度账号存进了到了手机页面缓存中,一直有效。
1.2.2.获取token
判断是否需要更新获取Token//判断是否需要更新获取Tokenfunction needUpdateToken() { if(access_token == null || access_token == undefined || access_token.length == 0) { console.log("没有token,需要更新"); return true; } var now = new Date().getTime(); if(token_timeout - now < 86400 * 1000) { console.log("token即将过期,需要更新"); return true; } console.log("token有效,无需更新:" + access_token); return false; }
//获取token

