實例代碼先行 AutomaticSpeechRecognition
一、申請語音識別API(可忽略,代碼中有我自己的)
在阿里智能語音識別網頁申請自己的AccessKey,secret。
二、用Android Studio創建項目
可以從git clone下載用下我的
git clone https://github.com/zzuwenjie/AutomaticSpeechRecognition
1、在build.gradle(module:app)文件的android中添加
sourceSets {
main {
jniLibs.srcDirs = ["libs"]
}
}
2、將在阿里雲智能語音識別上下載的android sdk解壓
將下圖中的包複製到自己項目的app/libs文件夾中
3、修改代碼
3.1 在manifest.xml文件夾中添加所需權限,記得申請下這些權限。(實例代碼中有)
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
在主進程(UI)申請下權限
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.RECORD_AUDIO,
Manifest.permission.INTERNET,
Manifest.permission.ACCESS_NETWORK_STATE,
}, 1);
3.2 添加語音識別類 AutoSpeechRecognizer .可自命名
/**
* Created by wjsay on 2018/10/30
* Describe: 阿里雲,一句話識別。
* 其中id、secret是我自己實名認證申請的。請換成自己的
*/
public class AutoSpeechRecognizer {
private static final String TAG = "AutoSpeechRecognizer";
private static final String appKey = "nls-service";
private static final String id = "LTAILtpaW9KOS53M";
private static final String secret = "iL8LEpKJAGjCsA93sGgc0TD005yovA";
private boolean recognizing;
private NlsClient mNlsClient;
private NlsRequest mNlsRequest;
/**
* 實例化語音識別
*
* @param listener 異步語音服務結果的回調類,回調參數:
* NlsClient.ErrorCode.SUCCESS:
* NlsClient.ErrorCode.RECOGNIZE_ERROR:
* NlsClient.ErrorCode.RECORDING_ERROR:
* NlsClient.ErrorCode.NOTHING:
* @param stageListener 語音服務引擎狀態變更回調接口,服務狀態的改變
* 音量大小的回調、語音文件的生成通過本接口獲取。
*/
public AutoSpeechRecognizer(Context context, NlsListener listener, StageListener stageListener) {
NlsClient.openLog(true);
NlsClient.configure(context.getApplicationContext());
mNlsRequest = new NlsRequest(new NlsRequestProto(context));
mNlsRequest.setApp_key(appKey);
mNlsRequest.setAsr_sc("opu");
//實例化NlsClient
mNlsClient = NlsClient.newInstance(context, listener, stageListener, mNlsRequest);
mNlsClient.setMaxRecordTime(60000); //設置最長語音
mNlsClient.setMaxStallTime(1000); //設置最短語音
mNlsClient.setMinRecordTime(500); //設置最大錄音中斷時間
mNlsClient.setRecordAutoStop(false); //設置VAD
mNlsClient.setMinVoiceValueInterval(100); //設置音量回調時長
}
/**
* 開始識別
*/
public void startRecognize() {
recognizing = true;
mNlsRequest.authorize(id, secret);
if (!mNlsClient.start()){
Log.e(TAG, "startRecognize: can not start recognize");
}
}
/**
* 停止識別
*/
public void stopRecognize() {
if (recognizing)
mNlsClient.stop();
recognizing = false;
}
/**
*
* @return 是否正在錄音識別的布爾值
*/
public boolean isRecognizing() {
return recognizing;
}
}
3.3 使用樣例
點擊按鈕開始語音識別,再次點擊識別結束。併發量不大於10.。
AutoSpeechRecognize的實例有幾個方法需要注意,
isRecognizing 判斷是否在識別 stopRecognize 停止識別,處理結果 startRecognize開始識別
實例代碼比較簡潔,容易化爲適合自己使用的,嘿嘿。
————————————————————————————————————————————————————
感謝我室友BoldEric的幫助
——by wjsay 2018-10-30 23:53:41