【記錄】科大訊飛語音控制元件的使用——Android Studio
阿新 • • 發佈:2019-02-14
一、將libs資料夾移至Android Studio的Project的根目錄下
將科大訊飛提供的SDK中的libs資料夾直接拖拽至Android Studio的Project的根目錄下
二、匯入xxx.jar檔案
其實.jar檔案已經存在於libs資料夾下了,不過此時它並不會隨工程一起編譯,所以我們還需要做一些設定。
設定方法很簡單,如下圖所示:
三、匯入xxx.so檔案
其實.so檔案已經存在於libs資料夾下了,不過此時它並不會隨工程一起編譯,所以我們還需要做一些設定。
設定方法很簡單在build.gradle中新增如下程式碼即可
source Sets {
main {
jniLibs.srcDirs = ['libs']
}
}
完整檔案如下圖:
四、初始化語音控制元件
檔案:App.java
// 建立全域性例項
SpeechUtility.createUtility(App.this, "appid=" + getString(R.string.app_id));
// 關閉MSC Log
Setting.setShowLog(false);
檔案:MainActivity.java
//語音控制元件
private SpeechUnderstander mSpeechUnderstander; // 語義理解物件(語音到語義)
private TextUnderstander mTextUnderstander; // 語義理解物件(文字到語義)
private SpeechRecognizer mIat; // 語音聽寫物件
private SpeechSynthesizer mTts; // 語音合成物件
/*
* 初始化語音控制元件
*/
private void initVoice() {
// 初始化語義理解物件(語音到語義)
mSpeechUnderstander = SpeechUnderstander.createUnderstander(MainActivity.this , mSpeechUdrInitListener);
// 初始化語義理解物件(文字到語義)
mTextUnderstander = TextUnderstander.createTextUnderstander(MainActivity.this, textUnderstanderListener);
// 初始化語音合成物件
mTts = SpeechSynthesizer.createSynthesizer(MainActivity.this, mTtsInitListener);
// 初始化語音識別物件
mIat = SpeechRecognizer.createRecognizer(MainActivity.this, mInitListener);
// 語音識別引數設定
setRecognizerParam();
// 語音合成引數設定
setTtsParam();
}
/***start*************************************語音控制元件初始化回撥**************************************************/
/**
* 初始化語義理解監聽器(語音到語義)
*/
private InitListener mSpeechUdrInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "speechUnderstanderListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失敗,錯誤碼:"+code);
}
}
};
/**
* 初始化監聽器(文字到語義)
*/
private InitListener textUnderstanderListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "textUnderstanderListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失敗,錯誤碼:"+code);
}
}
};
/**
* 初始化語音識別監聽器
*/
private InitListener mInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "SpeechRecognizer init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失敗,錯誤碼:" + code);
}
}
};
/**
* 初始化語音合成監聽
*/
private InitListener mTtsInitListener = new InitListener() {
@Override
public void onInit(int code) {
Log.d(TAG, "InitListener init() code = " + code);
if (code != ErrorCode.SUCCESS) {
showTip("初始化失敗,錯誤碼:"+code);
} else {
// 初始化成功,之後可以呼叫startSpeaking方法
// 注:有的開發者在onCreate方法中建立完合成物件之後馬上就呼叫startSpeaking進行合成,
// 正確的做法是將onCreate中的startSpeaking呼叫移至這裡
// mTts.startSpeaking("小朋友", mTtsListener);
}
}
};
/***end*************************************語音控制元件初始化回撥****************************************************/
五、語音控制元件的使用
/**
* 使用語音合成
*/
mTts.startSpeaking("需要合稱為語音的文字", mTtsListener);
/**
* 使用語音識別
*/
ret = mIat.startListening(mRecognizerListener);
if (ret != ErrorCode.SUCCESS) {
showTip("聽寫失敗,錯誤碼:" + ret);
} else {
showTip("請開始說話…");
}
/**
* 使用語義理解(語音到語義)
*/
if(mSpeechUnderstander.isUnderstanding()){// 開始前檢查狀態
mSpeechUnderstander.stopUnderstanding();
mMyHandler.obtainMessage(0, "停止錄音").sendToTarget();
}else {
ret = mSpeechUnderstander.startUnderstanding(mSpeechUnderstanderListener);
if(ret != 0){
showTip("語義理解失敗,錯誤碼:" + ret);
}else {
showTip("請開始說話…");
}
}
/**
* 使用語義理解(文字到語義)
*/
if(mTextUnderstander.isUnderstanding()){
mTextUnderstander.cancel();
showTip("取消");
}else {
ret = mTextUnderstander.understandText("需要語義理解的文字", textListener);
if(ret != 0)
{
showTip("語義理解失敗,錯誤碼:"+ ret);
}
}
/***start*************************************語音控制元件回撥****************************************************/
/**
* 語音合成回撥
*/
private SynthesizerListener mTtsListener = new SynthesizerListener() {
@Override
public void onSpeakResumed() {
// TODO Auto-generated method stub
}
@Override
public void onSpeakProgress(int arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onSpeakPaused() {
// TODO Auto-generated method stub
}
@Override
public void onSpeakBegin() {
System.out.println("開始播放");
}
@Override
public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {
}
@Override
public void onCompleted(SpeechError error) {
System.out.println("播放完成");
if (atEnterWakeup) {
atEnterWakeup = false;
new SemanticUnderstand("WithoutHello").start();
}else {
new SemanticUnderstand(null).start();
}
}
@Override
public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {
// TODO Auto-generated method stub
}
};
/**
* 語音識別回撥
*/
private RecognizerListener mRecognizerListener = new RecognitionListener() {
@Override
public void onRmsChanged(float rmsdB) {
// TODO Auto-generated method stub
}
@Override
public void onResults(Bundle results) {
// TODO Auto-generated method stub
}
@Override
public void onReadyForSpeech(Bundle params) {
// TODO Auto-generated method stub
}
@Override
public void onPartialResults(Bundle partialResults) {
// TODO Auto-generated method stub
}
@Override
public void onEvent(int eventType, Bundle params) {
// TODO Auto-generated method stub
}
@Override
public void onError(int error) {
// TODO Auto-generated method stub
}
@Override
public void onEndOfSpeech() {
// TODO Auto-generated method stub
}
@Override
public void onBufferReceived(byte[] buffer) {
// TODO Auto-generated method stub
}
@Override
public void onBeginningOfSpeech() {
// TODO Auto-generated method stub
}
};
/**
* 語義理解回撥(語音到語義)
*/
private SpeechUnderstanderListener mSpeechUnderstanderListener = new SpeechUnderstanderListener() {
@Override
public void onVolumeChanged(int arg0, byte[] arg1) {
// TODO Auto-generated method stub
}
@Override
public void onResult(UnderstanderResult arg0) {
// TODO Auto-generated method stub
}
@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
}
@Override
public void onEndOfSpeech() {
// TODO Auto-generated method stub
}
@Override
public void onBeginOfSpeech() {
// TODO Auto-generated method stub
}
};
/**
*語音理解回撥(文字到語義)
*/
private TextUnderstanderListener textListener= new TextUnderstanderListener() {
@Override
public void onResult(UnderstanderResult arg0) {
// TODO Auto-generated method stub
}
@Override
public void onError(SpeechError arg0) {
// TODO Auto-generated method stub
}
};
/***end*************************************語音控制元件回撥****************************************************/