1. 程式人生 > >Unity接入訊飛語音識別___Android版

Unity接入訊飛語音識別___Android版

Unity版本4.6+Eclipse

1,首先我們先去訊飛開放平臺註冊一個開發者賬號(註冊地址:http://www.xfyun.cn),註冊完成後進入控制檯建立一個新的應用。​

2,提交成功後我們需要選擇我們需要開通我們需要的服務,​​​點選開通服務


3,上面步驟完成後我們就可以取下載sdk了。​在左側找到SDK下載中心

​4,現在我們就可以開始進入開發了,找到我們剛剛下載的壓縮包並且解壓

​5,接下來我們找到一個叫classes.jar的檔案,他在unity的安裝目錄檔案中,

windows上路津如下

​mac系統上路徑如下(找unity安裝的位置,然後右鍵點選Unity 選擇 顯示包內容--contents---PlaybackEngines---androidPlayer----release---bin

​6,新建一個Andrid工程

7,然後把剛剛我們找到的​classes.jar檔案匯入到bin目錄下(拖進去即可),然後在新增到構建路徑中去,選擇classes.jar右鍵--Build Path  ---Add to Build Path.

​8,接著把訊飛提供的SDK中libs檔案下的部分jar包新增進來

​9,在我們下載的sdk檔案中找到sample檔案找到JsonParser.java匯入的工程中如圖,並且修改它的包名為你自己工程的包名

​10,現在我們就可以寫程式碼了,下面看看MainActivity裡面的程式碼:

package com.example.lijiaunityyuying;

import com.iflytek.cloud.InitListener;

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 android.os.Bundle;

import android.app.Activity;

import android.view.Menu;

import android.widget.Toast;

public class MainActivity extends UnityPlayerActivity {

SpeechRecognizer mIat;

String voiceResult ="";

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        SpeechUtility.createUtility(this, "appid=5818a273");

        mIat = SpeechRecognizer.createRecognizer(this, mInitListener);

    }

    public void StartActivity1(){

    mIat.setParameter(SpeechConstant.DOMAIN,"iat");

    mIat.setParameter(SpeechConstant.ACCENT,"mandarin");

    mIat.setParameter(SpeechConstant.LANGUAGE,"zh_cn");

    mIat.setParameter(SpeechConstant.KEY_SPEECH_TIMEOUT,"4000");

    mIat.setParameter(SpeechConstant.VAD_EOS,"2000");

    mIat.setParameter(SpeechConstant.ASR_PTT,"0");

    int ret = mIat.startListening(recognizerListener);

    UnityPlayer.UnitySendMessage("Main Camera", "LiJia", "初始化完成");

    if(voiceResult != null || voiceResult !=""){

    voiceResult = "";

    }

    }

    

    private RecognizerListener recognizerListener = new RecognizerListener() {

    //說話音量

@Override

public void onVolumeChanged(int arg0, byte[] arg1) {

// TODO Auto-generated method stub

}

//得到返回的語音結果

@Override

public void onResult(RecognizerResult arg0, boolean arg1) {

// TODO Auto-generated method stub

voiceResult = voiceResult +JsonParser.parseIatResult(arg0.getResultString());

if(arg1){

UnityPlayer.UnitySendMessage("Main Camera", "LiJia", voiceResult);

}

}

//擴充套件介面

@Override

public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {

// TODO Auto-generated method stub

}

//發生錯誤回撥

@Override

public void onError(SpeechError arg0) {

// TODO Auto-generated method stub

UnityPlayer.UnitySendMessage("Main Camera", "LiJia", "發生錯誤啦");

}

//結束錄音

@Override

public void onEndOfSpeech() {

// TODO Auto-generated method stub

UnityPlayer.UnitySendMessage("Main Camera", "LiJia", "結束錄音啦");

}

//開始錄音

@Override

public void onBeginOfSpeech() {

// TODO Auto-generated method stub

UnityPlayer.UnitySendMessage("Main Camera", "LiJia", "開始錄音啦");

}

};

    

    

    private InitListener mInitListener = new InitListener() {

@Override

public void onInit(int arg0) {

// TODO Auto-generated method stub

UnityPlayer.UnitySendMessage("Main Camera", "LiJia", "mInitListener");

if(arg0==0){

Toast.makeText(MainActivity.this, "語音可以用", Toast.LENGTH_SHORT).show();

}else{

Toast.makeText(MainActivity.this, "語音不可以用", Toast.LENGTH_SHORT).show();

}

}

};

    

    

}

11,接著修改res工程目錄下的AndroidManifest.xml檔案,新增如下許可權:

12,現在程式碼我們就寫完啦,現在我們倒出jar包;​

​13,下面新建一個unity工程,注意工程目錄結構

 14,接著把剛剛我們生成jar包拖到bin檔案中

​15,開啟我們的android工程找到如下檔案拖入到unity工程中的android檔案家中

16,接下來我們寫一個C#指令碼掛在攝像機上

17,釋出app就可以啦。