935
windows
Android SDK__一句話識別_語音識別(ASR)_智能語音交互-阿裏雲
功能介紹
語音Android SDK提供一句話識別服務,提供將實時短語音轉成文字的功能,可直接用於語音搜索類應用。
阿裏雲語音服務SDK(NLSClinet),是運行於android平台的基礎語音識別、自然語言理解和語音合成的基礎服務,本服務通過Jar包和.so庫的形式導入,用戶通過本指南可以方便的接入。
SDK下載地址
開發包目錄
文件夾 | 內容 |
---|---|
libs/ | |
libs/NlsClientSdk.jar | NLSClinet的服務包 |
libs/armeabi | |
libs/armeabi/libjoysecurity.so | |
libs/armeabi/libzts2.so | |
libs/armeabi-v7a | |
libs/armeabi-v7a/libjoysecurity.so | |
libs/armeabi-v7a/libzts2.so | |
libs/x86 | |
libs/x86/libjoysecurity.so | |
libs/x86/libzts2.so |
- 本服務使用了解析json的gson.jar,需要用戶自行導入。
集成指南
導入服務包
將下載的服務包解壓後,將NlsClientSdk.jar,以及對應架構的.so包導入你的項目中的libs/目錄下。
Android權限管理
在AndroidManifest.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.WRITE_SETTINGS" />
Proguard配置
如果代碼使用了混淆,請在proguard-rules.pro中配置:
-keep class com.alibaba.idst.nls.** {*;}
-keep class com.google.**{*;}
重要接口說明
com.alibaba.idst.nls.NlsClient
語音服務的核心服務類,客戶端程序通過調用該類的cancel()、start()、stop()等方法來打開、關閉或發送語音數據。
全局配置
public static void configure(Context appContext)
- 說明 全局配置,在初始化NlsClient前需要被調用,建議放在Application的onCreate()裏
- 參數
- appContext 傳入ApplicationContext參數,用於識別引擎內部訪問和Android上下文相關的資源
- 返回值 null
實例化NlsClient對象
public static NlsClient newInstance(Context context,NlsListener nlsListener,StageListener stageListener, NlsRequest nlsRequest)
- 說明 獲得一個NlsClient, 通過該方法實例化NlsClient。
- 參數
- context 傳入Context參數,用於識別引擎內部訪問和Android上下文相關的資源
- nlsListener 識別相關的回調接口,用於通知客戶端識別結果
- stageListener 引擎狀態回調接口,用於通知客戶端當前的引擎狀態以及錄音音量等
- 返回值 NlsClient
打開語音識別引擎
public boolean start()
- 說明 打開語音識別引擎
參數
返回值 isOpen true:打印log false:關閉log
true:開始錄音,並對錄音進行語音識別 false:打開語音識別引擎失敗,可能重複打開或者遠程服務處於不可用狀態。
關閉語音識別引擎
public void stop()
- 說明 關閉語音識別引擎
參數
返回值
判斷是否正在進行語音識別
public boolean isStarted()
- 說明 返回當前引擎是否已啟動
參數
返回值 true:引擎已啟動 false:引擎未啟動
取消此次語音識別
public void cancel()
- 說明 取消此次語音識別,識別結果為ErrorCode.USER_CANCEL
參數
返回值 null
其它接口
:
Log開關
public static void openLog(boolean isOpen)
- 說明 log開關,標識是否需要通過logcat打印識別引擎的相關log
- 參數
- isOpen true:打印log false:關閉log
- 返回值 null
設置VAD是否打開
public NlsClient setRecordAutoStop(boolean isAutoStop)
- 說明 VAD 是端點檢測功能,打開VAD可以自動檢測語音結束,並結束語音
- 參數
- isAutoStop true:打開VAD false:關閉VAD
- 返回值 NlsClient
設置音量回調時長
public NlsClient setMinVoiceValueInterval(int interval)
- 說明 設置獲取錄音音量的最短時間間隔,防止錄音音量回調過於頻繁影響客戶端對音量的展示邏輯
- 參數
- interval 更新間隔 單位ms
- 返回值 NlsClient
設置最短錄音時長
public NlsClient setMinRecordTime(int minRecordTime)
- 說明 用於設置最短錄音時間,引擎開始時,用戶在該時間內不說話,則會自動關閉引擎,識別結果為ErrorCode.NOTHING
- 參數
- minRecordTime 最短錄音時間 單位ms
- 返回值 NlsClient
設置最大錄音時長
public NlsClient setMaxRecordTime(int maxRecordTime)
- 說明 用於設置最大錄音時間
- 參數
- maxRecordTime 最大錄音時間 單位ms
- 返回值 NlsClient
設置最大錄音中斷時間
public NlsClient setMaxStallTime(int milliSeconds)
- 說明 打開VAD時, 設置錄音中句子之間的最長停頓時間 ,錄音過程中,如果用戶停頓超過該時間則認為用戶已經停止說話,停止錄音
- 參數
- milliSeconds 最大錄音時間 單位ms
- 返回值 NlsClient
獲取完整錄音語音
public byte[] getObject()
- 說明
- 得到錄音樣本PCM,該方法可以在mStageListener.onStopRecognizing()方法中調用。
- 參數
- pcm bytes
com.alibaba.idst.nls.internal.protocol.NlsRequest
語音服務的請求封裝對象。調用程序需要至少在請求對象裏設定好調用者的appKey和語音數據的格式以便後台服務能正確識別並翻譯語音。
初始化Nls 請求:NlsRequest mNlsRequest = new NlsRequest(proto)或缺省proto:NlsRequest mNlsRequest = new NlsRequest()
public void setApp_key(String app_key)
- 說明 設置應用的appkey,appkey請從 “快速開始” 幫助頁麵的appkey列表中獲取。
- 參數
- app_key
- 返回值 null
public void setAsr_sc(String sc)
- 說明 設置語音識別的語音格式,默認為opu。 該項在使用語音識別服務時必須設置,起到初始化作用。
- 參數
- sc 設置為opu。
- 返回值 null
public void authorize(String id, String secret)
- 說明 數加認證模塊,所有的請求都必須通過authorize方法認證通過,才可以使用。 id和secret需要申請獲取。
- 參數
- id id。
- secret 對應密鑰。
- 返回值 null
com.alibaba.idst.nls.internal.protocol.NlsRequestProto
NlsRequest對象初始化時需要注入的參數。
public void setApp_id(String app_id)
- 設置application_id.
public void setApp_user_id(String app_user_id)
- 設置app_user_id.
public void setReq_id(String req_id)
- 設置req_id.
public void setQuery_type(String query_type)
- 設置query_type.
com.alibaba.idst.nls.StageListener
語音服務引擎狀態變更回調接口,服務狀態的改變、音量大小的回調、語音文件的生成通過本接口獲取。
錄音開始的回調
public void onStartRecording(NlsClient recognizer)
- 說明 錄音開始
參數
返回值 NlsClient
錄音結束的回調
public void onStopRecording(NlsClient recognizer)
- 說明 錄音結束
參數
返回值 NlsClient
識別開始的回調
public void onStartRecognizing(NlsClient recognizer)
- 說明 識別開始
參數
返回值 NlsClient
識別結束的回調
public void onStopRecognizing(NlsClient recognizer)
- 說明 識別結束
參數
返回值 NlsClient
音量大小回調
public void onVoiceVolume(int volume)
說明 獲取音量
參數
- volume 錄音音量,範圍0-100
返回值 null
獲取流式返回錄音語音
public void onVoiceData(short[] data, int length)
- 說明 當引擎獲取到每幀錄音時回調,用於客戶端應用獲取錄音數據,默認20ms每幀數據
- 參數
- data 錄音數據 原始未壓縮 未判斷VAD
- length 該幀錄音長度
com.alibaba.idst.nls.NlsListener
語音服務結果的回調類,語音服務是一個相對較長過程,為了不影響客戶端的正常工作,語音sdk被設計成異步模式,調用程序將語音客戶端建立好並將語音數據交給sdk後就可以離開。在收到語音數據之後的處理需要通過實現該接口來完成。每一個識別過程創建的時候都需要注入偵聽者以響應語音服務的結果。
語音識別結果的回調接口
public void onRecognizingResult(int status, RecognizedResult result)
- 說明 語音識別結果回調接口,識別結束時回調。(使用流式返回的key時,會多次回調本接口得到實時識別結果)
- 參數
- status 標識識別結果的狀態,詳情見下方。
- result 返回識別結果的數據結構,詳情見下方。
- 返回值 null
- result中的字段值:
字段名 | 含義 | 類型 |
---|---|---|
asr_out | 語音識別結果json | String |
finish | 流式返回時判斷返回是否結束的字段,finish=true表示返回結束 | Boolean |
bstream_attached | 判斷後麵是否跟有語音流 | Boolean |
status_code | 狀態碼 | int |
錯誤碼
- 客戶端錯誤碼
字段名 | 錯誤碼 | 含義 |
---|---|---|
SUCCESS | 0 | 成功 |
RECOGNIZE_ERROR | 1 | 識別失敗 |
USER_CANCEL | 520 | 用戶取消 |
CONNECT_ERROR | 530 | 網絡及通訊異常 |
NOTHING | 540 | 語音服務異常 |
RECORDING_ERROR | 550 | 錄音及語音識別異常 |
ERROR_CLICK_TOOMUCH | 570 | 用戶點擊過快 |
- 服務端返回結果錯誤碼
狀態 | status_code | CloseFrame狀態碼 | HTTP語義 |
---|---|---|---|
成功 | 200 | 1000 | 成功處理 |
請求格式有誤 | 400 | 4400 | 錯誤請求 |
需要鑒權信息 | 401 | 4401 | 請求要求身份驗證 |
鑒權失敗 | 403 | 4403 | 服務器拒絕請求 |
超出最大並發量 | 429 | 4429 | 太多請求 |
請求超時 | 408 | 4408 | 處理請求超時 |
處理出錯 | 500 | 4500 | 服務器內部錯誤 |
服務不可用 | 503 | 4503 | 服務不可用 |
完整示例
package com.alibaba.idst.nlsdemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.alibaba.idst.R;
import com.alibaba.idst.nls.NlsClient;
import com.alibaba.idst.nls.NlsListener;
import com.alibaba.idst.nls.StageListener;
import com.alibaba.idst.nls.internal.protocol.NlsRequest;
import com.alibaba.idst.nls.internal.protocol.NlsRequestProto;
public class PublicAsrActivity extends Activity {
private boolean isRecognizing = false;
private EditText mFullEdit;
private EditText mResultEdit;
private Button mStartButton;
private Button mStopButton;
private NlsClient mNlsClient;
private NlsRequest mNlsRequest = initNlsRequest();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_public_asr);
mFullEdit = (EditText) findViewById(R.id.editText2);
mResultEdit = (EditText) findViewById(R.id.editText);
mStartButton = (Button) findViewById(R.id.button);
mStopButton = (Button) findViewById(R.id.button2);
String appkey = ""; //請設置簡介頁麵的Appkey
mNlsRequest.setApp_key(appkey); //appkey列表中獲取
mNlsRequest.setAsr_sc("opu"); //設置語音格式
NlsClient.openLog(true);
NlsClient.configure(getApplicationContext()); //全局配置
mNlsClient = NlsClient.newInstance(this, mRecognizeListener, mStageListener,mNlsRequest); //實例化NlsClient
mNlsClient.setMaxRecordTime(60000); //設置最長語音
mNlsClient.setMaxStallTime(1000); //設置最短語音
mNlsClient.setMinRecordTime(500); //設置最大錄音中斷時間
mNlsClient.setRecordAutoStop(false); //設置VAD
mNlsClient.setMinVoiceValueInterval(200); //設置音量回調時長
initStartRecognizing();
initStopRecognizing();
}
private NlsRequest initNlsRequest(){
NlsRequestProto proto = new NlsRequestProto();
proto.setApp_user_id("xxx"); //設置在應用中的用戶名,可選
return new NlsRequest(proto);
}
private void initStartRecognizing(){
mStartButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isRecognizing = true;
mResultEdit.setText("正在錄音,請稍候!");
mNlsRequest.authorize("", ""); //請替換為用戶申請到的Access Key ID和Access Key Secret
mNlsClient.start();
mStartButton.setText("錄音中。。。");
}
});
}
private void initStopRecognizing(){
mStopButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
isRecognizing = false;
mResultEdit.setText("");
mNlsClient.stop();
mStartButton.setText("開始 錄音");
}
});
}
private NlsListener mRecognizeListener = new NlsListener() {
@Override
public void onRecognizingResult(int status, RecognizedResult result) {
switch (status) {
case NlsClient.ErrorCode.SUCCESS:
Log.i("asr", "[demo] callback onRecognizResult " + result.asr_out);
mResultEdit.setText(result.asr_out);
mFullEdit.setText(result.asr_out);
break;
case NlsClient.ErrorCode.RECOGNIZE_ERROR:
Toast.makeText(PublicAsrActivity.this, "recognizer error", Toast.LENGTH_LONG).show();
break;
case NlsClient.ErrorCode.RECORDING_ERROR:
Toast.makeText(PublicAsrActivity.this,"recording error",Toast.LENGTH_LONG).show();
break;
case NlsClient.ErrorCode.NOTHING:
Toast.makeText(PublicAsrActivity.this,"nothing",Toast.LENGTH_LONG).show();
break;
}
isRecognizing = false;
}
} ;
private StageListener mStageListener = new StageListener() {
@Override
public void onStartRecognizing(NlsClient recognizer) {
super.onStartRecognizing(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStopRecognizing(NlsClient recognizer) {
super.onStopRecognizing(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStartRecording(NlsClient recognizer) {
super.onStartRecording(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onStopRecording(NlsClient recognizer) {
super.onStopRecording(recognizer); //To change body of overridden methods use File | Settings | File Templates.
}
@Override
public void onVoiceVolume(int volume) {
super.onVoiceVolume(volume);
}
};
}
最後更新:2016-12-08 11:44:40
上一篇:
賬號和服務申請__快速開始_智能語音交互-阿裏雲
下一篇:
iOS SDK__一句話識別_語音識別(ASR)_智能語音交互-阿裏雲
CDN監控__雲服務監控_用戶指南_雲監控-阿裏雲
惡意代碼掃描接口__惡意代碼掃描API_API手冊_移動安全-阿裏雲
備份恢複服務__係統架構_產品簡介_雲數據庫 RDS 版-阿裏雲
登陸狀態丟失問題__排錯手冊_Web 應用防火牆-阿裏雲
配置ECS安全組隻放行高防回源IP段__運維問題_產品常見問題_DDoS 高防IP-阿裏雲
如何跨項目配置任務依賴__用戶常見問題反饋_常見問題_大數據開發套件-阿裏雲
碎片管理__控製台用戶指南_對象存儲 OSS-阿裏雲
RAM和STS介紹__權限管理_最佳實踐_對象存儲 OSS-阿裏雲
ALIYUN::ECS::EIPAssociation__資源列表_資源編排-阿裏雲
根據 Topic 查詢消息__消息管理相關接口_Open API_消息隊列 MQ-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲