Unity 中使用百度语音识别发布Android程序(二)
2018-01-29 22:02
309 查看
http://blog.csdn.net/z3465875/article/details/78527269
在上一篇博客中我们成功在Unity发布的安卓apk中回调到了安卓插件的方法,因此在这篇章中,我们开始集成百度语音识别。
首先在百度AI网址下载安卓sdk,将app/libs 文件夹下的jar包放到之前创建的Library的libs目录下,并且将其添加到Dependencies中。
在BaiduVoice中添加如下代码:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
保存,然后导出jar包。
打开 Unity工程,将导出的jar包替换之前的测试jar包,将百度语音安卓sdk中app\libs文件夹下的jar包,app\src\main下的assets文件夹放到Assets\Plugins\Android中。
在Unity的安装目录下的Editor\Data\PlaybackEngines\AndroidPlayer\Apk中将AndroidManifest.xml文件放到Assets\Plugins\Android中.
将安卓sdk中app\src\main\jniLibs下的armeabi-v7a文件夹放到Assets\Plugins\Android\libs文件夹中。
接下来,我们需要修改安卓的配置文件,代码如下:其中xxxxx处需要填写百度语音的真实id,key和secret_key。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
修改Test脚本,代码如下:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
在场景中的Canvas下添加两个按钮,分别调用Test脚本中的StartVoice方法和StopVoice方法。发布安卓apk,在手机中进行测试。
点击识别按钮,然后说出hello,然后点击停止,出现如下图片所示,表明调用成功。
在上一篇博客中我们成功在Unity发布的安卓apk中回调到了安卓插件的方法,因此在这篇章中,我们开始集成百度语音识别。
1、插件中引入百度语音识别
首先在百度AI网址下载安卓sdk,将app/libs 文件夹下的jar包放到之前创建的Library的libs目录下,并且将其添加到Dependencies中。在BaiduVoice中添加如下代码:
package com.beefun.baiduvoice; import android.app.Fragment; import com.baidu.speech.EventListener; import com.baidu.speech.EventManager; import com.baidu.speech.EventManagerFactory; import com.baidu.speech.asr.SpeechConstant; import com.unity3d.player.UnityPlayer; import com.unity3d.player.UnityPlayerActivity; /** * Created by User on 2017/11/8. */ public class BaiduVoice extends Fragment{ public static BaiduVoice instance; //语音识别对象 public EventManager asr = null; public static void start(){ instance = new BaiduVoice(); UnityPlayer.currentActivity.getFragmentManager().beginTransaction().add(instance, "BaiduVoice").commit(); } /** * 初始化监听类方法 */ public void Init(){ asr = EventManagerFactory.create(UnityPlayer.currentActivity, "asr"); EventListener myEventListener = new EventListener() { @Override public void onEvent(String name, String params, byte[] bytes, int i, int i1) { //解析数据并且传到unity中 String logTxt = "name: " + name; //此回调表示可以开始识别 if(name.equals(SpeechConstant.CALLBACK_EVENT_ASR_READY)){ UnityPlayer.UnitySendMessage("Canvas", "SetText", "start"); } //百度语音开始识别的回调 if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_PARTIAL)){ logTxt += " ;params :" + params; UnityPlayer.UnitySendMessage("Canvas", "SetText", logTxt); } //识别结束的回调 if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_FINISH)){ logTxt += " ;params :" + params; UnityPlayer.UnitySendMessage("Canvas", "SetText", logTxt); } } } /** * 开始录音方法 * @param json */ public void start(String json){ asr.send(SpeechConstant.ASR_START, json, null, 0, 0); } /** * 停止录音方法 */ public void stop(){ asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); } /** * * @param _obj Unity中场景中的对象名称 * @param _fun 回调的Unity方法 * @param _val */ public void CallBack(String _obj, String _fun, String _val){ UnityPlayer.UnitySendMessage(_obj, _fun, "Android Callback " + _val); } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
保存,然后导出jar包。
2、将jar包放入Unity中
打开 Unity工程,将导出的jar包替换之前的测试jar包,将百度语音安卓sdk中app\libs文件夹下的jar包,app\src\main下的assets文件夹放到Assets\Plugins\Android中。在Unity的安装目录下的Editor\Data\PlaybackEngines\AndroidPlayer\Apk中将AndroidManifest.xml文件放到Assets\Plugins\Android中.
将安卓sdk中app\src\main\jniLibs下的armeabi-v7a文件夹放到Assets\Plugins\Android\libs文件夹中。
接下来,我们需要修改安卓的配置文件,代码如下:其中xxxxx处需要填写百度语音的真实id,key和secret_key。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal" android:versionCode="1" android:versionName="1.0"> <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true"/> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <application android:theme="@style/UnityThemeSelector" android:icon="@drawable/app_icon" android:label="@string/app_name"> <!-- 请填写真实的APP_ID API_KEY SECRET_KEY--> <meta-data android:name="com.baidu.speech.APP_ID" android:value="xxxxxxx" /> <meta-data android:name="com.baidu.speech.API_KEY" android:value="xxxxxxx" /> <meta-data android:name="com.baidu.speech.SECRET_KEY" android:value="xxxxxxx" /> <service android:name="com.baidu.speech.VoiceRecognitionService" android:exported="false" /> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name"> <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> /manifest>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
修改Test脚本,代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System.Text; public class Test : MonoBehaviour { public Text myText; public StringBuilder stringBuilder = new StringBuilder(); public AndroidJavaClass ajc = null; public AndroidJavaObject ajo = null; public void SetText(string str){ this.stringBuilder.Append(str); this.myText.text = stringBuilder.ToString(); } // Use this for initialization void Start () { ajc = new AndroidJavaClass("com.beefun.baiduvoice.BaiduVoice"); ajc.CallStatic("start"); ajo = ajc.GetStatic<AndroidJavaObject>("instance"); ajo.Call("Init"); } /// <summary> /// 开始语音识别方法 /// </summary> /// <param name="str">json参数</param> public void StartVoice(string str){ //pid 为识别语言种类 str = "{\"accept-audio-data\":false,\"disable-punctuation\":false,\"accept-audio-volume\":true,\"pid\":1736}"; ajo.Call("start", str); } /// <summary> /// 停止识别方法 /// </summary> public void StopVoice(){ ajo.Call("stop"); } // Update is called once per frame void Update () { } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
在场景中的Canvas下添加两个按钮,分别调用Test脚本中的StartVoice方法和StopVoice方法。发布安卓apk,在手机中进行测试。
点击识别按钮,然后说出hello,然后点击停止,出现如下图片所示,表明调用成功。
相关文章推荐
- Unity 中使用百度语音识别发布Android程序(一)
- Unity 中使用百度语音识别发布Android程序(一)
- Windows平台下使用Jenkins自动发布Unity之Android程序与补丁
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- android语音识别方法一:使用intent调用语音识别程序
- [Unity]Android(安卓)代码安卓APK时,使用系统安装器安装的[最正确]办法(不弹出选择打开的程序)
- Unity打包安卓apk时或发布安卓程序时提示 Android Asset Packaging Tool Failed
- Android开发学习之使用百度语音识别SDK实现语音识别(下)
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- Android使用百度语音识别
- Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法
- android语音识别方法一:使用intent调用语音识别程序
- Unity 使用教程 之 Win 配置Android环境,打包发布Apk流程详解
- Unity发布android程序,报错Resource compilation failed!
- 如何用unity发布Android程序APK
- 微信小程序使用百度语音识别成功后,小程序端cancel了请求
- Android-图像识别项目OpenCV(3):程序目标以及单独发布
- Android开发学习之使用百度语音识别SDK实现语音识别(上)
- OSX平台下使用Jenkins自动发布Unity之iOS程序与补丁
- android语音识别方法一:使用intent调用语音识别程序