700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Unity接入科大讯飞的语音sdk

Unity接入科大讯飞的语音sdk

时间:2020-10-26 16:30:43

相关推荐

Unity接入科大讯飞的语音sdk

在Unity中添加语音识别功能方法有许多,这里像大家介绍怎么接入科大讯飞的语音sdk

1.来到科大讯飞的官方网站 没有账号的去注册一个即可。

2.登录上之后选择控制台,进入后选择创建新应用。

3. 创建完成后添加新服务,这时候我们可以看到APPID,一会我们会用到。

4.选择语音听写

5.添加完成后,选择右边的sdk下载进入下载页面

6.下载完成后会得到一个压缩文件,文件夹最后的数字字母也就是APPID。

assets里面就是一些资源文件没有什么用libs主要是.so文件和讯飞的.jar包res是个空文件夹sample里面有个讯飞自带的speechDemo(我们会用到(不想用也可以自己做))。

7.这里我们先AndroidStudio创建一个新Empty Activity的工程。然后倒入这个speechDemo模块。

8.倒入之后如果AndroidStudio中sdk 没有speechDemo所用的SDK平台会出现下面这种情况。

9.如果遇到这种情况我们可以修改为我们现有的平台即可。在Project视图下打开speechDemo->build.gradle

(1)把compileSdkVersion 23 修改为26(注:我有26的平台,根据自己的SDK平台修改)

(2)把buildToolsVersion '26.0.2' 删除(不需要)

(3)把minSdkVersion 9 修改为Unity支持的最低16

(4)把targetSdkVersion 23 修改为自己的26

(5)把compile ' com.android.support:support-v4:23.+'中的23改为26

(6)这些都修改完成之后点击Try Again

10.等编译完成后我们可以先Run->Run 'speechDemo' (手机要打开USB调试)现在手机上运行一下自带的Demo

10.File->New->New Module...创建一个模块(名称随意),选择Android Library

11.创建完成后在Project视图把jar包放到自己创建的UnityLib库中。

(1)Msc.jar在讯飞SDK的libs文件夹

(2)classes.jar在Unity的安装目录下的\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes文件夹

12.在classes.jar和Msc.jar包上分别右键Add As Library...,在unitylib上右键->Open Module Settings查看是否都依赖上了。

如果没有添加上两个jar包,就手动添加即可。

13.在unitylib->src->main文件夹下面创建一个叫jniLibs的文件夹,把讯飞SDK下libs文件夹下的armeabi-v7a文件夹直接复制进去。

14.完成之后打开安卓视图,在unitylib->java->com.example.stt.unitylibFile上右键New->Activity->Empty Activity创建一个新的Activity。

(1)把布局文件给删掉

(2)把setContentView(R.layou.activity_main);删除掉

(3)把继承自AppCompatActivity改为继承自UnityPlayerActivity并把多余的引用删除。

(4)把unitylib->res里面的layout里的文件删掉

15.下面修改manifests文件。

(1)打开unitylib里面的AndroidManifest.xml文件,

(2)打开app里面的AndroidManifest.xml文件,用里面的application标签里的内容覆盖掉unitylib里面的AndroidManifest里面,

把报红的地方全部删掉

(3)在intent-filter结束标签后添加

<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>

(4)找到speechDemo下面的AndroidManifest.xml文件,把结束标签前边的设置权限部分复制到unitylib的AnidroidManifest的结束标签前面。

最后unitylib的文件应该是以下这样。

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.stt.unitylib"><applicationandroid:allowBackup="true"android:label="@string/app_name"android:supportsRtl="true"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter><meta-data android:name="unityplayer.UnityActivity" android:value="true" /></activity></application><uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /></manifest>

16.在写代码之前先把speechDemo->java->speech->util里面的JsonParser复制到unitylib中(和MainActivity在同一目录)。这是个解析Json数据的工具类。如果不用的话可以自己写一个解析数据的类。

17.下面就是写代码了,别的也就不多说了直接上代码就可以了。

package com.example.stt.unitylib;import android.os.Bundle;import com.iflytek.cloud.RecognizerListener;import com.iflytek.cloud.RecognizerResult;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechRecognizer;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechUtility;import com.unity3d.player.UnityPlayer;import com.unity3d.player.UnityPlayerActivity;import org.json.JSONException;import org.json.JSONObject;import java.util.HashMap;import java.util.LinkedHashMap;public class MainActivity extends UnityPlayerActivity {private SpeechRecognizer mIat;private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//初始化SpeechUtility.createUtility(this, SpeechConstant.APPID+"=5b5594a3");mIat = SpeechRecognizer.createRecognizer(this, null);//设置mIat的参数//表示是什么服务mIat.setParameter(SpeechConstant.DOMAIN,"iat");//设置语言mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");//接受语言的类型mIat.setParameter(SpeechConstant.ACCENT,"mandarin");//使用什么样引擎mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);}//创建一个监听器RecognizerListener mRecognizerLis = new RecognizerListener() {@Override//当声音改变的时候调用public void onVolumeChanged(int i, byte[] bytes) {}@Override//开始说话的时候调用public void onBeginOfSpeech() {}@Override//结束说话的时候调用public void onEndOfSpeech() {}@Override//返回结果public void onResult(RecognizerResult recognizerResult, boolean b) {printResult(recognizerResult);}@Override//出错的时候调用public void onError(SpeechError speechError) {}@Override//自定义事件public void onEvent(int i, int i1, int i2, Bundle bundle) {}};//解析Json的方法//方法来自speechDemo->java->voicedemo->IatDemo中的printResult方法private void printResult(RecognizerResult results) {String text = JsonParser.parseIatResult(results.getResultString());String sn = null;// 读取json结果中的sn字段try {JSONObject resultJson = new JSONObject(results.getResultString());sn = resultJson.optString("sn");} catch (JSONException e) {e.printStackTrace();}mIatResults.put(sn, text);StringBuffer resultBuffer = new StringBuffer();for (String key : mIatResults.keySet()) {resultBuffer.append(mIatResults.get(key));}//把消息发送给Unity场景中MsgController物体上的OnResult方法UnityPlayer.UnitySendMessage("MsgController", "OnResult", resultBuffer.toString());}//这个方法让Unity来调用public void beginListen(){//开始识别mIat.startListening(mRecognizerLis);}

18.这些搞完之后我们就快大功告成了,下面我们可以Build我们的模块

19.完成之后打开Project视图

(1)找到unitylib->build->outputs->aar里面的aar包

(2)找到unitylib->build->intermediates->manifests->full->debug里面的AndroidManifest.xml

把这两个文件复制出来我们需要对它们稍作修改

20.修改导出的文件

(1)aar包可以用压缩文件打开(直接拖到压缩软件的快捷方式上就可以打开)

(2)把libs里面的classes.jar包删除掉,

(3)把根目录下的AndroidManifest文件拖出来后删除里面的android:label="@string/app_name"后再拖进去,把里面的给替换掉

(4)aar包搞好之后要修改AndroidManifest.xml文件,把包名和label都可以修改下

21.完成后把这两个文件放到Unity的目录下,必须按照下图放

22.后面的就是Unity中的部分了。下面是个简单的界面

23.Unity中只要写简单的代码即可

using UnityEngine;using UnityEngine.UI;public class Test : MonoBehaviour {private AndroidJavaObject crtActivity;public Text message;// 放在MsgController的游戏物体上void Start () {AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");crtActivity = javaClass.GetStatic<AndroidJavaObject>("currentActivity");}//绑定按钮public void BeginListen(){crtActivity.Call("beginListen");}//java中 UnityPlayer.UnitySendMessage("MsgController", "OnResult", resultBuffer.toString());来调用void OnResult(string str){message.text = str;}}

24.发布完成后按下开始讲话就可以识别了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。