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就可以啦。