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

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

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="http://schemas.android.com/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.发布完成后按下开始讲话就可以识别了。

Unity接入科大讯飞的语音sdk相关推荐

  1. Unity接入科大讯飞SDK-安卓篇

    最近需要接入sdk,现把接入科大讯飞SDK安卓端的过程整理如下: 接入SDK分成两个大的部分:安卓端 和 Unity端 安卓端主要负责导入科大讯飞的sdk,并编写相关脚本,最后生成aar包,提供给Un ...

  2. 微信小程序接入科大讯飞实现语音测评

    由于公司业务需求需要实现在微信小程序中实现语音测评功能,因为之前在H5中已经实现了该功能认为在小程序中问题不大,但是在实际开发中遇到了不少坑. 问题一:语音测评流式版在微信小程序中无法正确的传输数据并 ...

  3. unity接入腾讯语音Gvoice

    腾讯语音插件gvoice,基于unity 至于导入插件什么的就不多说,多的是教程,但是详细的使用教程少的可怜,也是踩了好多坑,才算调试通. 新建一个语音模块管理器 GVoiceManager,做成单例 ...

  4. Unity 接入安卓 支付宝支付SDK遇到ALI38173问题

    今天遇到一个特坑的问题,跟Web大佬找了一整天,再次记录一下.. 1.如果大家遇到这个问题,先去官网排查一下:https://opensupport.alipay.com/support/knowle ...

  5. 接入科大讯飞语音听写,增加语音动画,类似京东语音搜索功能

    前言:小白第一次接入科大讯飞语音听写,接入还是比较简单的,先看效果图无UI界面 Demo地址拿去 效果图有两部分,一是接入科大讯飞语音听写功能,可以实现将语音转换成文字. 二是看到的语音音量动画效果, ...

  6. AndroidStudio集成科大讯飞语音SDK

    AndroidStudio集成科大讯飞语音SDK 讯飞开放平台作为全球首个开放的智能交互技术服务平台,致力于为开发者打造一站式智能人机交互解决方案.用户可通过互联网.移动互联网,使用任何设备.在任何时 ...

  7. Android 接入科大讯飞语音

    砖友们,先去了解一下科大讯飞吧 1.今天接入的是科大讯飞的语音,同样有一些SDK需要砖友们,去抢夺 科大讯飞开放平台直通车  创建App和下载SDK都可以哦 并附上一张图  cp到相应的位置就行 2. ...

  8. Unity游戏开发——unity接入多渠道sdk

    最近游戏进入最后测试和接入sdk阶段,对接了多个sdk简单记录和分享一下在接入各个渠道sdk中遇到的问题和坑,在之后或其他人看到之后可以绕过,提高效率仅此而已. 我们使用的unity开发,在选择sdk ...

  9. Unity接入微信SDK——iOS(接入微信SDK)

    Unity接入微信SDK--iOS(一 接入微信SDK) 下载微信SDK 下载地址:微信开放平台 导出Unity Xcode项目 导出Unity Xcode项目,并打开 微信SDK导入Xcode项目 ...

最新文章

  1. Lucky 7 in the Pocket
  2. 巨坑 之 pip install 和 conda install 的区别 以及 查看 和 修改 虚拟环境下运行路径
  3. 17款开源论坛系统/Forum Software(转载)
  4. NS2仿真分析无线网络的攻击防御(1)
  5. 防火墙设置导致服务器站点打开,服务器、网站、环境配置全正常网站打不开原来是系统防火墙造成的...
  6. 哗啦啦用Java_哗啦啦
  7. ORACLE之字符集修改(10g)
  8. mysql主从搭建教程
  9. linux如何安装zip文件格式,如何在Linux下创建与解压,安装zip, tar, tar.gz和tar.bz2文件...
  10. Python 网络数据采集
  11. (附源码)php小型网络舆情平台设计的开发毕业设计252324
  12. Latex错误:xxx PDF objects out of 1000 (max. 8388607) ……
  13. 硬盘分区 整G整数法(从1g到200g最精确的整数分区)
  14. 衡水互联网服务器网站,衡水联通dns的服务器地址
  15. win7老计算机,windows7旗舰版系统电脑老是自动重启的原因汇总
  16. 全球每日被黑站点一览表!
  17. 从事嵌入式软件开发的好处是什么
  18. 树莓派网线直连海康威视摄像头
  19. Echarts-----map(单独省级地图)
  20. 开源免费的参数化人物角色建模工具MakeHuman1.2.0,大家一起捏人儿吧(附CSDN下载)

热门文章

  1. 对于iPhone5分辨率兼容性调整问题 .
  2. 【EI稳检|华东交通大学主办】2021年智慧交通、能源与动力国际学术会议(STEP 2021)...
  3. 黑盒测试和白盒测试技术总结
  4. 简单公司网络架构.......拓扑图讲解(华为)。
  5. FreeCAD错误:没有激活的实体 解决办法
  6. 《关于粗糙集和邻域粗糙集的基本理论和程序算例(第二版本)》的声明
  7. 用r语言画出y = ax^2 + bx + c,R语言中如何使用最小二乘法
  8. day7 Excel函数-动态函数
  9. js 获取url 参数
  10. 5G大规模MIMO增强技术及发展趋势