修改日期:160806,
急用的直接下项目TulingDemo
0、创建安卓或ios项目,让开发工具先编译环境,利用这段时间打开浏览器完成注册什么的
1、注册登录,创建机器人
2、在机器人昵称右侧 有个“查看详情” ,进去按电脑键盘“end”键,到页面末尾,下载安卓或者ios文档;
3、解压缩下载的文件。苹果的我不清楚,安卓的解压缩,把libs这个文件夹复制到项目中,位置自己决定,能把各种jar包添加依赖即可
4、添加好以后,让他编译,利用这段时间,进入百度语音 创建应用,把三个key值保存到项目常量类中 ;对照官方文档之后的操作请对照官方文档吧,他们说不定啥时候会更新 这是文档 ,一步一步走;添加权限,添加代码什么的(文档中有纰漏,权限没写好,直接复制我的吧
请在程序清单添加上)
//如果需要使用蓝牙设备作为输入源, 需要额外在AndroidManifest.xml 文件添加下列权限:-
5、注意:配置分为语音识别、语义理解、语音合成三大模块
6、我在application中完成了三部分的初始化,包括监听,然后懵逼的发现他们没有解耦…………
1、如果报错:java.lang.UnsatisfiedLinkError: com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader[DexPathList[[dex file “/data/data/com.czh.assistant/files/instant-run/dex/slice-volley_fb8c39d7ceaeba89900705620c454ab7fe731a84-classes.dex”, dex file “/data/data/ 以上是由于so’文件加载失败造成,解决方案:
在module级别的gradle文件,android级别标签(花括号)添加如下标签,方括号里面的路径一定要看准了,差一级菜单都没用;
sourceSets { main { jniLibs.srcDirs = ['src/main/java/jniLibs'] jni.srcDirs = [] // This prevents the auto generation of Android.mk }}
原文解决方案点击这里
识别返回码处理
{“code”:40002,”text”:”亲爱的,不明白你说的什么意思。”}
{“code”:200000,”text”:”亲,已帮你找到图片”,”url”:”http:\/\/m.image.so.com\/i?q=%E7%BE%8E%E5%A5%B3”}
近期上代码,今天没时间了
160809:添加代码,如果想免去自己写代码的麻烦,快速出效果,请复制代码:
布局文件
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.MainActivity">
activity :
/************************************************* * @desc 改包名 com.czh.myrob * 1 语义识别解析 :requestTuringAPI(String requestInfo) * 2 语音合成播报:TTSManager.startTTS(String ttsContent) * 3 * @auther LiJianfei * @time 2016/8/6 9:41 ************************************/ public class MainActivity extends BaseActivity { private InitListener initListener; private TuringApiManager m; private TTSListener ttsListener; private TTSManager ttsManager; private VoiceRecognizeManager voiceRecognizeManager; private String ttsString;// 将要播报的语音 private AudioManager audioManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0); setRecognize(); } /** * 启动语音识别 * * @param v */ public void reqVoice(View v) { voiceRecognizeManager.startRecognize();// 开始收集语音 showSnack(v, "语音识别已启动"); } public void stopVoice(View v) { voiceRecognizeManager.stopRecognize(); showSnack(v, "语音识别已关闭"); } public void introduce(View v) { m.requestTuringAPI("晨之晖"); // showSnack(v, "语音识别已关闭"); } public void bequiet(View v) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0); // showSnack(v, "语音识别已关闭"); } public void cover(View v) { audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0); // showSnack(v, "语音识别已关闭"); } private void initTuling() { /** *E 初始化图灵组件 */ SDKInitBuilder sdkInitBuilder = new SDKInitBuilder(this); sdkInitBuilder.context = this; sdkInitBuilder.setTuringKey(Constant.TULING_KEY); sdkInitBuilder.setSecret(Constant.TULING_SECRET); sdkInitBuilder.setUniqueId(Constant.UniqueId); SDKInit.init(sdkInitBuilder, initListener); } private void setRecognize() { // A 初始化ASR语音识别状态监听 VoiceRecognizeListener listener = new VoiceRecognizeListener() { @Override public void onStartRecognize() { // DebugLogUtil.getInstance().Info("onStartRecognize="); } @Override public void onRecordStart() { // DebugLogUtil.getInstance().Info("onRecordStart="); } @Override public void onRecordEnd() { DebugLogUtil.getInstance().Info("onRecordEnd="); } @Override public void onRecognizeResult(String s) { // 获取识别结果,在步骤2里listener的回调方法onRecognizeResult中获取识别结果。然后传入语义解析 m.requestTuringAPI(s); DebugLogUtil.getInstance().Info("onRecognizeResult 获取语音识别结果=" + s); } @Override public void onRecognizeError(String s) { // TODO 这里应该做人性化判断 提醒用户说话 if (s == null || s.equals("") || s.equals("没有说话")) { ttsManager.startTTS("亲,说两句呗"); } DebugLogUtil.getInstance().Info("onRecognizeError=" + s); } @Override public void onVolumeChange(int i) { DebugLogUtil.getInstance().Info("onVolumeChange=" + i); } }; // 初始化百度语音 voiceRecognizeManager = new VoiceRecognizeManager(this, Constant.BDtuisongAPIKey, Constant.BDtuisongSecret_Key); // 设定ASR状态监听 voiceRecognizeManager.setVoiceRecognizeListener(listener); /*B 网络请求状态监听*/ final HttpConnectionListener httpConnectionListener = new HttpConnectionListener() { @Override public void onError(ErrorMessage errorMessage) { DebugLogUtil.getInstance().Info("网络请求监听onError"); } @Override public void onSuccess(RequestResult requestResult) { // TODO 在这里应该做解析和判断 ttsString = requestResult.getContent().toString(); String text; String code; String url; JSONObject object = (JSONObject) requestResult.getContent(); try { code = object.getString("code"); if (code.equals(200000)) {// 解析图片和其他生活帮助等信息返回的页面 url = object.getString("url"); } text = object.getString("text"); ttsManager.startTTS(text);// 合成 播报 } catch (JSONException e) { e.printStackTrace(); DebugLogUtil.getInstance().Info("objec解析失败"); } DebugLogUtil.getInstance().Info(requestResult.getType() + "网络请求成功" + requestResult.getContent()); } }; /*C 组件状态监听*/ initListener = new InitListener() { @Override public void onComplete() { // 实例化TuringApiManager类 m = new TuringApiManager(App.getInstance()); m.setHttpListener(httpConnectionListener); } @Override public void onFail(String s) { DebugLogUtil.getInstance().Error("图灵初始化onFail"); } }; initTTSListner(); } /** * 2 初始化语音识别 */ private void initTTSListner() { /*D 初始化语音合成监听*/ ttsListener = new TTSListener() { @Override public void onSpeechStart() { DebugLogUtil.getInstance().Error("语音识别onSpeechStart"); } @Override public void onSpeechProgressChanged() { // DebugLogUtil.getInstance().Error("语音识别onSpeechProgressChanged"); } @Override public void onSpeechPause() { DebugLogUtil.getInstance().Error("语音识别onSpeechPause"); } @Override public void onSpeechFinish() { /*语音合成后,就会触发onSpeechFinish(),这样即可在其方法中添加相应的逻辑。*/ DebugLogUtil.getInstance().Error("语音识别结束Finish"); // TODO 能在这里调用语音识别 不用再按启动语音识别吗 能! voiceRecognizeManager.startRecognize();// 重新开始收集语音 } @Override public void onSpeechError(int i) { DebugLogUtil.getInstance().Error("语音识别onSpeechError" + i); } @Override public void onSpeechCancel() { DebugLogUtil.getInstance().Error("语音识别 onSpeechCancel"); } }; ttsManager = new TTSManager(this, Constant.BDtuisongAPIKey, Constant.BDtuisongSecret_Key); ttsManager.setTTSListener(ttsListener); initTuling();// 最后调用这里 } @Override protected void onPause() { // 退出界面要提升系统音量 最完美的应该是进入时判断目前音量 退出app时 恢复这个音量! audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 5, 0); super.onPause(); } }