找回密码
 立即注册
搜索

unity5 调用讯飞Android sdk(二)

[复制链接]

8

主题

9

帖子

59

积分

注册会员

Rank: 2

积分
59
47441 AR_小白 发表于 2016-1-30 11:47:13 楼主
然后添加对讯飞识别结果的解析脚本JsonParser
  1. import org.json.JSONArray;
  2. import org.json.JSONObject;
  3. import org.json.JSONTokener;

  4. public class JsonParser{
  5.        
  6.         public static String parseIatResult(String json) {
  7.                 StringBuffer ret = new StringBuffer();
  8.                 try {
  9.                         JSONTokener tokener = new JSONTokener(json);
  10.                         JSONObject joResult = new JSONObject(tokener);

  11.                         JSONArray words = joResult.getJSONArray("ws");
  12.                         for (int i = 0; i < words.length(); i++) {
  13.                                 JSONArray items = words.getJSONObject(i).getJSONArray("cw");
  14.                                 JSONObject obj = items.getJSONObject(0);
  15.                                 ret.append(obj.getString("w"));
  16.                         }
  17.                 } catch (Exception e) {
  18.                         e.printStackTrace();
  19.                 }
  20.                 return ret.toString();
  21.         }
  22.         public static String parseGrammarResult(String json) {
  23.                 StringBuffer ret = new StringBuffer();
  24.                 try {
  25.                         JSONTokener tokener = new JSONTokener(json);
  26.                         JSONObject joResult = new JSONObject(tokener);

  27.                         JSONArray words = joResult.getJSONArray("ws");
  28.                         for (int i = 0; i < words.length(); i++) {
  29.                                 JSONArray items = words.getJSONObject(i).getJSONArray("cw");
  30.                                 for(int j = 0; j < items.length(); j++)
  31.                                 {
  32.                                         JSONObject obj = items.getJSONObject(j);
  33.                                         if(obj.getString("w").contains("nomatch"))
  34.                                         {
  35.                                                 ret.append("没有匹配结果.");
  36.                                                 return ret.toString();
  37.                                         }
  38.                                         ret.append("【结果】" + obj.getString("w"));
  39.                                         ret.append("【置信度】" + obj.getInt("sc"));
  40.                                         ret.append("\n");
  41.                                 }
  42.                         }
  43.                 } catch (Exception e) {
  44.                         e.printStackTrace();
  45.                         ret.append("没有匹配结果.");
  46.                 }
  47.                 return ret.toString();
  48.         }
  49.        
  50.         public static String parseLocalGrammarResult(String json) {
  51.                 StringBuffer ret = new StringBuffer();
  52.                 try {
  53.                         JSONTokener tokener = new JSONTokener(json);
  54.                         JSONObject joResult = new JSONObject(tokener);

  55.                         JSONArray words = joResult.getJSONArray("ws");
  56.                         for (int i = 0; i < words.length(); i++) {
  57.                                 JSONArray items = words.getJSONObject(i).getJSONArray("cw");
  58.                                 for(int j = 0; j < items.length(); j++)
  59.                                 {
  60.                                         JSONObject obj = items.getJSONObject(j);
  61.                                         if(obj.getString("w").contains("nomatch"))
  62.                                         {
  63.                                                 ret.append("没有匹配结果");
  64.                                                 return ret.toString();
  65.                                         }
  66.                                         ret.append("【结果】" + obj.getString("w"));
  67.                                         ret.append("\n");
  68.                                 }
  69.                         }
  70.                         ret.append("【置信度】" + joResult.optInt("sc"));

  71.                 } catch (Exception e) {
  72.                         e.printStackTrace();
  73.                         ret.append("【置信度】.");
  74.                 }
  75.                 return ret.toString();
  76.         }
  77. }
复制代码
修改AndroidManifest.xml 添加讯飞语音识别的所需权限
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     package="com.rhino.unityspeak"
  4.     android:versionCode="1"
  5.     android:versionName="1.0" >

  6.     <uses-sdk
  7.         android:minSdkVersion="14"
  8.         android:targetSdkVersion="21" />
  9.         <uses-permission android:name="android.permission.RECORD_AUDIO" />
  10.     <uses-permission android:name="android.permission.INTERNET" />
  11.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  12.     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  13.     <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  14.     <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  15.     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  16.     <uses-permission android:name="android.permission.READ_CONTACTS"/>
  17.     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  18.     <application
  19.         android:allowBackup="true"
  20.         android:icon="@drawable/ic_launcher"
  21.         android:label="@string/app_name"
  22.         android:theme="@style/AppTheme" >
  23.         <activity
  24.             android:name=".UnityTestActivity"
  25.             android:label="@string/app_name" >
  26.             <intent-filter>
  27.                 <action android:name="android.intent.action.MAIN" />

  28.                 <category android:name="android.intent.category.LAUNCHER" />
  29.             </intent-filter>
  30. <font color="#ff0000">            <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> 此段务必添加</font>
  31.         </activity>
  32.     </application>

  33. </manifest>
复制代码
然后就是导出unity所用JAR包了
QQeee.png

QQee11.png
在下面的jar file  选择导出jar包的文件路径
QQee22.png
此时,android部分就已经结束了,下面打开Unity5.3(其他版本也可以)新建一个工程,然后再其中新建文件夹Plugins→Android→libs、bin、res文件夹,然后分别将刚刚打包的jar包放入bin目录下,将armeabi文件夹和Msc.jar放到libs文件夹下,res文件夹则将android工程的res文件夹整个拷过来即可,对于unity脚本如何调用,此处给出一个脚本。
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;

  4. public class test : MonoBehaviour {

  5.         [SerializeField]
  6.         Text text;

  7.         [SerializeField] private string[] recLRCs = new string[4];
  8.         [SerializeField]
  9.         private string[] SHOWLRCs = new string[4];
  10.         [SerializeField] private SpeakEnglish speak;
  11.         [SerializeField] private AudioClip[] Clips;
  12.         //private string SpeechContent;
  13.         private string checkContent;
  14. //        private AndroidJavaObject javaObject;
  15.         private int lrcOrder;
  16.         private int ErorNum;
  17.         private AudioSource audio;
  18.         // Use this for initialization
  19.         void Awake ()
  20.         {
  21.                 audio = GetComponent<AudioSource>();
  22.                 text.text = SHOWLRCs[lrcOrder];
  23.                 text.color = Color.green;
  24.                 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  25.                 AndroidJavaObject javaObject = jc.GetStatic<AndroidJavaObject>("currentActivity");
  26.                 javaObject.Call("StartActivity0");
  27.         }
  28.        
  29.         // Update is called once per frame
  30.         void Update () {
  31.        
  32.         }

  33.         //void ObjREc()
  34.         //{
  35.         //    using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
  36.         //    {
  37.         //        using (AndroidJavaObject obj_Activity = jc.GetStatic<AndroidJavaObject>("currentActivity"))
  38.         //        {
  39.         //            AndroidJavaClass cls_CompassActivity = new AndroidJavaClass("com.xys.UnityTestActivity");
  40.         //            //cls_CompassActivity.CallStatic("Init", obj_Activity);
  41.         //            SpeechContent = cls_CompassActivity.CallStatic<string>("ReturnStr");
  42.         //        }
  43.         //    }

  44.         //    text.GetComponent<Text>().text = SpeechContent;
  45.         ////        checkContent = false;
  46.         //}

  47.         public void check(string str)
  48.         {
  49.                 text.text = str;
  50.                 checkContent = str;
  51.                 if (recLRCs[lrcOrder] == checkContent)
  52.                 {
  53.                   
  54.                        
  55.                         lrcOrder += 1;
  56.                         if (lrcOrder == 4)
  57.                         {
  58.                                 lrcOrder = 3;
  59.                         }
  60.                         stopListen();
  61.                         ErorNum = 0;
  62.                         text.text = SHOWLRCs[lrcOrder];
  63.                         text.color = Color.green;
  64.                         speak.startSay = true;
  65.                 }
  66.                 else
  67.                 {
  68.                        
  69.                         text.color = Color.red;
  70.                         ErorNum += 1;
  71.                 }
  72.                 StartCoroutine(Xianshi());
  73.                 if (ErorNum > 3)
  74.                 {
  75.                         stopListen();
  76.                         audio.clip = Clips[lrcOrder];
  77.                         audio.Play();
  78.                         StartCoroutine(next());
  79.                 }

  80.                 else
  81.                 {
  82.                         //stopListen();
  83.                         startActivity();
  84.                 }

  85.         }


  86.         public void startActivity()
  87.         {
  88.                 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  89.                 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  90.                 jo.Call("StartActivity1");
  91.         }
  92.         public void stopListen()
  93.         {
  94.                 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  95.                 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  96.                 jo.Call("Stoplisten");
  97.         }

  98.         IEnumerator  Xianshi()
  99.         {
  100.                 yield return new WaitForSeconds(0.4f);
  101.                 text.text = SHOWLRCs[lrcOrder];
  102.                 text.color = Color.green;
  103.         }

  104.         IEnumerator next()
  105.         {
  106.                 yield return new WaitForSeconds(1);
  107.                 speak.startSay = true;
  108.                 lrcOrder += 1;
  109.                 ErorNum = 0;

  110.                 text.text = SHOWLRCs[lrcOrder];
  111.                 text.color = Color.green;
  112.                
  113.           
  114.         }
  115. }
复制代码


使用道具 举报 回复
 楼主| AR_小白 发表于 2016-1-30 17:26:54
沙发
(需要注意的是在你的Unity项目的player Settings中的Bundle Identifier项必须和你的Android一致)
使用道具 举报 回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则