Unity 中使用百度语音识别发布Android程序(二)

http://blog.csdn.net/z3465875/article/details/78527269

在上一篇博客中我们成功在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,然后点击停止,出现如下图片所示,表明调用成功。

这里写图片描述


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
Unity科大讯飞语音识别是基于科大讯飞AIUI平台的一种人机交互解决方案。它整合了语音唤醒、语音识别、语义理解、内容平台、语音合成等能力。默认情况下,Unity科大讯飞语音识别自带语音识别功能。如果需要让AIUI回答你的问题,则需要开启语义理解。如果需要有声音输出,则需要开启语音合成。开启SDK时,可以返回语义理解和语音合成的数据。关于Unity科大讯飞语音识别的具体配置,可以参考<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>这个设置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [unity接入讯飞AIUI(Windows SDK)](https://blog.csdn.net/weixin_41132607/article/details/130575204)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Unity接入科大讯飞的语音sdk](https://blog.csdn.net/u011721655/article/details/81169910)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值