700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > unity 接入讯飞语音听写的SDK

unity 接入讯飞语音听写的SDK

时间:2021-01-10 14:35:56

相关推荐

unity 接入讯飞语音听写的SDK

获取讯飞语音听写的APPID

讯飞开放平台的网址:/

进入讯飞开放平台注册登录后,创建应用,取得所需的APPID

然后找到对应的语音听写的SDK进行下载,我下载后的文件夹名称是Android_iat1140_5e70aa24

测试下讯飞自带的SDK效果

我们先AndroidStudio创建一个新Empty Activity的工程。然后导入前面下载的SDK里面的speechDemo。

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

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

(2)把buildToolsVersion ‘26.0.2’ 删除(好像也可以不删,不清楚)

(3)把minSdkVersion 9 修改为19(尽量要改成16以上)

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

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

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

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

如果不能识别的话,也可以在Android Studio上创建AVD,就是手机的模拟器,也可以运行自带的Demo。

或者还可以在Android Studio上打包apk,然后自己通过qq或者其他方法将apk发送到手机进行安装运行。

创建供Unity使用的SDK库(Android Studio中的操作)

File->New->New Module…创建一个模块(名称随意),选择Android Library,我取名为xflibrary。

找到自己下载的SDK的Android_iat1140_5e70aa24\libs/Msc.jar和unity安装目录下的D:\unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes/classes.jar

按住ctrl将这两个资源复制进Android studio工程中的xflibrary/libs下,然后选中这两个文件,右键选择Add As Library…,等待编译,可以选中xflibrary,右键点击Open Module Settings,点击Dependencies看看是否将这两个文件添加上了,如果没有添加上或者只添加了一个,那么我们可以点击加号选择Jar Dependency,将所需要的添加上去。

然后在xflibrary/src/main下新建一个文件夹,取名为jniLibs,然后将Android_iat1140_5e70aa24\libs下的armeabi-v7a文件拷贝到刚刚新建的文件夹下。

然后回到Android,在xflibrary/java/com.guanhui.xiaolin.xflibrary下右键New–>Activity–>Empty Activity,然后点击Finish。将xflibrary/res/layout下的.xml文件删除掉,然后将打开的

MainActivity.java下的setContentView(R.layout.activity_main);删掉,将AppCompatActivity改为UnityPlayerActivity,将import android.support.v7.app.AppCompatActivity;也删掉。

接下来就是修改xflibrary下的manifests下的AndroidManifest.xml,将app/mainfests/AndroidManifest.xml的<application和</ application>包裹的内容复制到刚刚要修改的AndroidManifest.xml里,也就是将那个标签里的内容替换掉,替换之后,将爆红的内容删掉,然后在下面加一句<meta-data

android:name=“unityplayer.UnityActivity” android:value=“true” />,将

speechDemo/mainfests/AndroidManifest.xml里的前面的<uses-permission的内容都复制到

xflibrary//mainfests/AndroidManifest.xml的相同位置。到了这里就配置完成了。

回到MainActivity.java,在里面添加代码,如下:

package com.guanhui.xiaolin.xflibrary;import android.os.Bundle;import com.iflytek.cloud.RecognizerListener;import com.iflytek.cloud.RecognizerResult;import com.iflytek.cloud.SpeechConstant;import com.iflytek.cloud.SpeechError;import com.iflytek.cloud.SpeechRecognizer;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 {// 用HashMap存储听写结果private HashMap<String, String> mIatResults = new LinkedHashMap<String, String>();private SpeechRecognizer mIat;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);SpeechUtility.createUtility(this,SpeechConstant.APPID+"=APPID");mIat=SpeechRecognizer.createRecognizer(this,null);mIat.setParameter(SpeechConstant.DOMAIN,"iat");mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");mIat.setParameter(SpeechConstant.ACCENT,"mandarin");mIat.setParameter(SpeechConstant.ENGINE_TYPE,SpeechConstant.TYPE_CLOUD);}private RecognizerListener RecoListener=new RecognizerListener() {@Overridepublic void onVolumeChanged(int i, byte[] bytes) {}@Overridepublic void onBeginOfSpeech() {}@Overridepublic void onEndOfSpeech() {}@Overridepublic void onResult(RecognizerResult recognizerResult, boolean b) {printResult(recognizerResult);}@Overridepublic void onError(SpeechError speechError) {}@Overridepublic void onEvent(int i, int i1, int i2, Bundle bundle) {}};public void startListen()//这个方法供unity调用{mIat.startListening(RecoListener);}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中名为XfManager的物体身上的OnResult方法,resultBuffer是解析出来的最终返回的结果UnityPlayer.UnitySendMessage("XfManager","OnResult",resultBuffer.toString());}}

需要注意的是,上面代码中 SpeechUtility.createUtility(this,SpeechConstant.APPID+"=APPID");将APPID改为你自己的APPID,注意双引号里面的=不要删

需要将speechDemo/java/com.iflytek/speech/util下的jsonParser文件复制到

xflibrary/java/com.guanhui.xiaolin.xflibrary目录下,也就是和MainActivity的相同目录下。然后选中xflibrary,点击菜单栏的Build–>Make Module’xflibrary’,make完成后,在Project下,

xflibrary/build/outputs/aar点击show in Explorer,将xflibrary-debug.aar复制到桌面上。

【旧版的unity要这样做,应该是以下的版本吧,没测试过】

(用压缩软件打开这个aar包,将libs里面的classes.jar删除,然后返回上一级,将classes.jar拖到桌面,再将它拖进libs的目录下,再返回上一级,将classes.jar删除。整个过程就相当于将外面的classes.jar替换掉libs里面的classes.jar文件。)

【我用的的版本,较新版本一点的这样做】

(用压缩软件打开这个aar包,将libs里面的classes.jar删除)

回到android studio的Project下,

xflibrary/intermediates/merged_manifests/debug/processDebugManifest/AndroidManifest.xml目录下,将AndroidManifest.xml复制到桌面,那么现在桌面就有AndroidManifest.xml和xflibrary-debug.aar了。

打开AndroidManifest.xml,将package="com.guanhui.xiaolin.xflibrary"中的xflibrary改为xftest,名字随便起,但是发布的时候unity的包名也跟着一样。

Unity中的操作(完成语音识别SDK接入)

在unity中新建目录Plugins/Android

将桌面的AndroidManifest.xml和xflibrary-debug.aar拖入到Plugins/Android中

在unity中设置好Android平台,新建一个Text和Button,放到合适的位置,点击Button后,语音识别的内容显示在Text中的,新建一个空物体,名为XfManager,再新建一个同名脚本挂载上去。

打开XfManager.cs,代码如下:

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;public class XfManager : MonoBehaviour{public Text resultText;private AndroidJavaObject currentActivity;void Start(){currentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");}public void OnClick(){currentActivity.Call("startListen");}public void OnResult(string s){resultText.text = s;}}

在unity中指定好resultText,还有绑定好Button的事件OnClick()

设置好包名之后就可以打包了,打包完成之后可以在手机上使用语音听写功能了。

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