677
財經資訊
iOS SDK__一句話識別_語音識別(ASR)_智能語音交互-阿裏雲
功能介紹
語音iOS SDK提供一句話識別服務,提供將實時短語音轉成文字的功能,可直接用於語音搜索類應用。
SDK下載地址
重要接口說明
發送語音請求的對象及方法NlsRequest.h
語音請求初始化方法
- (instancetype)init;
- 說明 語音識別、語音合成的語音請求初始化方法
- 返回值 self
設置語音請求的appkey
- (void)setAppkey:(NSString *)appKey;
- 說明 設置語音請求的appkey。
- 參數
- appKey 用戶申請的appKey
- 返回值 無
設置發送的請求是否需要帶語音數據
- (void)setBstreamAttached:(BOOL)bstreamAttached;
- 說明 設置發送的請求是否需要帶語音數據。若發送的是語音識別請求,則bstreamAttached為YES;若發送的是語音合成請求,則bstreamAttached為NO。
- 參數
- bstreamAttached 請求是否需要帶語音數據。
- 返回值 無
設置語音識別ASR請求
- (void)setAsrRequest:(NSString *)userId;
- 說明 設置語音識別ASR請求
- 參數
- userId 用戶id
- 返回值 無
數加驗證
- (void)Authorize:(NSString )authId withSecret:(NSString )secret;
- 說明 數加驗證,未經過數加驗證的語音請求均為非法請求。
- 參數
- authId 數加驗證的ak_id
- secret 數加驗證的ak_secret
- 返回值 無
將語音請求NlsRequest對象轉換成JSON字符串
+ (NSString )getJSONStringfromNlsRequest:(NlsRequest )nlsRequest;
- 說明 將語音請求NlsRequest對象轉換成JSON字符串形式。
- 參數
- nlsRequest NlsRequest對象
- 返回值 NlsRequest的JSON字符串
將對象轉換成JSONString方法
+ (NSString *)getJSONString:(id)obj options:(NSJSONWritingOptions)options error:(NSError)error;**
- 說明 將object轉換成JSONString。
- 參數
- obj 被轉化對象
- options NSJSONWritingOptions
- error NSError
- 返回值 NlsRequest的JSON字符串
將對象轉換成NSDictionary方法
+ (NSDictionary *)getObjectData:(id)obj;
- 說明 將object轉換成NSDictionary。
- 參數
- obj 被轉化對象
- 返回值 NSDictionary
語音服務SDK的核心類NlsRecognizer.h
語音服務SDK的核心類,封裝了錄音設備的初始化,壓縮處理,語音檢測(VAD)等複雜邏輯,自動的將語音數據同步傳送到語音服務器上。開發者隻需要傳遞正確的delegate,就能完成語音識別和語音合成。
語音識別的關鍵回調函數
-(void)recognizer:(NlsRecognizer )recognizer didCompleteRecognizingWithResult:(NlsRecognizerResult)result error:(NSError*)error;
- 說明 語音識別的關鍵回調函數,delegate必須實現。若appkey為流式返回appkey,將會多次回調該方法。
- 參數
- recognizer NlsRecognizer
- result 返回值對象 NlsRecognizerResult
- error 語音識別錯誤和異常 NSError
- 返回值 無
返回錄音的語音音量
-(void)recognizer:(NlsRecognizer *)recognizer recordingWithVoiceVolume:(NSUInteger)voiceVolume;
- 說明 返回錄音的語音音量,調用頻率取決於SDK內部設定。
- 參數
- recognizer NlsRecognizer
- voiceVolume 0-100的數值
- 返回值 無
返回錄音的數據
-(void)recognizer:(NlsRecognizer )recognizer recordingWithVoiceData:(NSData)voiceData;
- 說明 返回錄音的數據,調用頻率取決於SDK內部設定。
- 參數
- recognizer NlsRecognizer
- frame 返回的語音
- 返回值 無
開始錄音的回調通知
-(void)recognizerDidStartRecording:(NlsRecognizer *)recognizer;
- 說明 開始錄音的回調通知
- 參數
- recognizer NlsRecognizer
- 返回值 無
停止錄音的回調通知
-(void)recognizerDidStopRecording:(NlsRecognizer *)recognizer;
- 說明 停止錄音的回調通知
- 參數
- recognizer NlsRecognizer
- 返回值 無
錄音模式下停止的回調通知
-(void)recognizerDidStopRecording:(NlsRecognizer )recognizer withRecorderData:(NSData)data;
- 說明 錄音模式下停止的回調通知,可得到錄音數據(保留方法)
- 參數
- recognizer NlsRecognizer
- data 錄音數據
- 返回值 無
設置SDK工作模式
NlsRecognizer @property(nonatomic,assign,readwrite) kNlsRecognizerMode mode;
- 說明 設置語音SDK的工作模式,若不設置,則為kMODE_RECOGNIZER
設置SDK是否監聽App狀態
NlsRecognizer @property(nonatomic,assign,readwrite) BOOL cancelOnAppEntersBackground;
- 說明 設置SDK是否監聽App狀態,缺省為NO。如果設為YES,則SDK會監聽App狀態,一旦切換到後台,就自動取消請求。
設置cancel時是否回調onRecognizeComplete方法
NlsRecognizer @property(nonatomic,assign,readwrite) BOOL enableUserCancelCallback;
- 說明 NlsRecognizer的cancel方法被調用的時候,會觸發delegate的onRecognizeComplete方法,錯誤碼為kERR_USER_CANCELED,錯誤信息為kNlsRecognizerErrorUserCanceled。如果App不想被回調,請設置為NO即可。參見 cancel方法。
設置是否記錄語音
NlsRecognizer @property(nonatomic,assign,readwrite) BOOL enableVoiceLog;
- 說明 打開語音記錄功能,SDK將會把語音識別的文件記錄到當前App的document下麵,調試用。缺省關閉,在DEBUG模式下有效,Release模式下無效。(保留字段)
配置語音服務模塊的基礎參數
+(void)configure;
- 說明 配置語音服務模塊的基礎參數,請在App啟動的時候調用
- 參數 無
- 返回值 無
初始化NlsRecognizer
-(id)initWithNlsRequest:(NlsRequest )nlsRequest svcURL:(NSString )svcURL;
- 說明 初始化NlsRecognizer,注意: 通過該API使用的appKey必須提前通過configure函數預先配置好
- 參數
- nlsRequest 語音請求NlsRequest
- svcURL 語音服務地址
- 返回值 無
設置是否打開VAD開關
-(void)setVad;
- 說明 設置是否打開VAD開關,VAD默認關閉。
- 參數
- isVad 是否打開靜音檢測開關
- 返回值 無
檢測到用戶語音後,自動停止的間隙
-(void)setVadAutoStopTimeInterval:(NSTimeInterval) timeinterval;
- 說明 檢測到用戶語音後,自動停止的間隙。
- 參數
- timeinterval 靜音觸發自動停止的時長,以秒表示.缺省0.7s
- 返回值 無
打開VAD時,設置最短錄音時間,缺省時為5s
-(void)setMinRecordTime:(NSTimeInterval) timeinterval;
- 說明 打開VAD時,設置最短錄音時間,缺省時為5s
- 參數
- timeinterval 最短錄音時間,缺省時為5s
- 返回值 無
設置最長錄音時間,缺省時為60s
-(void)setMaxRecordTime:(NSTimeInterval) timeinterval;
- 說明 設置最長錄音時間,缺省時為60s
- 參數
- timeinterval 最短錄音時間,缺省時為60s
- 返回值 無
語音主服務是否可用
+(BOOL)isServiceAvailable;
- 說明 語音主服務是否可用,開發者可以根據測返回值,調整UI行為
- 返回值 返回語音主服務當前是否可用。
開始語音識別
-(void)start;
- 說明 開始語音識別。打開錄音設備,同時開始識別。
- 返回值 無
停止語音識別
-(void)stop;
- 說明 停止語音識別。停止錄音設備,delegate的didStopRecord會被回調。網絡請求在後台繼續,如果有識別結果返回,則會通過delegate的didCompleteRecognizingWithResult回調方法單獨返回。
- 返回值 無
取消語音識別
-(void)cancel;
- 說明 取消語音識別。取消語音識別,錄音會停止,網絡請求會取消。根據enableUserCancelCallback的設置,決定是否回調delegate方法。
- 返回值 無
語音識別是否已經開始
-(BOOL)isStarted;
- 說明 語音識別是否已經開始
- 返回值 YES表示語音識別已經開始,NO表示語音識別未開始。
參數和錯誤碼說明
發送ASR語音請求的參數:
{
"requests" : {
"asr_in" : {
"version" : "3.0",// 協議版本號
"asrSC" : "opu",// 輸入的語音格式,默認opu
"user_id" : ""// 用戶名,可選項
},
"context" : {
"auth" : {} //requested
}
},
"app_key" : "",
"bstream_attached" : true,// 請求包的後麵是不是還接著二進製語音流。語音識別時bstream_attached = YES 。
"version" : "4.0"// 協議版本號
}
返回的識別結果result是一個NlsRecognizerResult的對象:
{
"status" : "1",// 服務器狀態,0為失敗,非零為成功
"id" : "",// 透傳係統始終的uuid,服務端配置是否返回
"finish" : "1",// 0為未結束,非零為結束,識別是否已經結束
"results" : {
"asr_out" : {
"result" : "",// 語音識別結果
"status" : 1,// 服務器狀態,0為失敗,非零為成功
"finish" : 1,// 0為未結束,非零為結束,識別是否已經結束
"version" : "4.0"
},
"out" : {}//保留字段
},
"bstream_attached" : false,// 應答包的後麵是不是還接著二進製語音流。
"version" : "4.0"// 協議版本號
}
若識別發生錯誤,recognizer:didCompleteRecognizingWithResult:error:
的回調函數中error不為nil。相應錯誤碼的對應表如下所示。
- 客戶端錯誤碼
字段名 | 錯誤碼 | 含義 |
---|---|---|
kERR_NO_ERROR | 0 | 成功 |
kERR_GENERIC_ERROR | 1 | 識別失敗 |
kERR_USER_CANCELED | 520 | 用戶取消 |
kERR_NETWORK_ERROR | 530 | 網絡及通訊異常 |
kERR_SERVICE_ERROR | 540 | 語音服務異常或被降級 |
kERR_VOICE_ERROR | 550 | 錄音及語音識別異常 |
kERR_MIC_ERROR | 560 | Mic無法訪問或硬件異常 |
kERR_TOOSHORT_ERROR | 570 | 用戶點擊過快 |
- 服務端返回結果錯誤碼
狀態 | status_code | CloseFrame狀態碼 | HTTP語義 |
---|---|---|---|
成功 | 200 | 1000 | 成功處理 |
請求格式有誤 | 400 | 4400 | 錯誤請求 |
需要鑒權信息 | 401 | 4401 | 請求要求身份驗證 |
鑒權失敗 | 403 | 4403 | 服務器拒絕請求 |
超出最大並發量 | 429 | 4429 | 太多請求 |
請求超時 | 408 | 4408 | 處理請求超時 |
處理出錯 | 500 | 4500 | 服務器內部錯誤 |
服務不可用 | 503 | 4503 | 服務不可用 |
完整示例
創建應用
使用Xcode創建iOS application應用工程。
添加Framework
在Xcode工程中需要引入所需要的framework,NlsClientSDK.framework。
添加方法:選中工程,點擊TARGETS,在右側的Build Phases中選擇 Link Binary With Libraries,點擊上圖中左下角的+號,在彈出界麵中依次添加所依賴的framework。
$lipo -info NlsClientSDK
Architectures in the fat file: NlsClientSDK are: armv7 i386 x86_64 arm64
引入頭文件
在需要調用SDK的文件中,添加如下頭文件:
#import <NlsClientSDK/NlsClientSDK.h>
語音服務注冊
AppDelegate中注冊語音服務:
#import "AppDelegate.h"
#import "ViewController.h"
#import <NlsClientSDK/NlsClientSDK.h>
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
-
#warning configure語音服務,必須在調用語音服務前執行該方法。
[NlsRecognizer configure];
……
}
實現語音識別功能
ViewController中實現語音識別方法:
#import "ViewController.h"
#import <NlsClientSDK/NlsClientSDK.h>
@interface ViewController ()<NlsRecognizerDelegate>
@property(nonatomic,strong) NlsRecognizer *recognizer;
@end
@implementation ViewController
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
// 檢查asr服務是否可用
if([NlsRecognizer isServiceAvailable]) {
NSLog(@"當前語音服務可用");
}
else {
NSLog(@"當前語音服務不可用");
}
// 監測語音服務狀態
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(asrStatusChanged:) name:kNlsRecognizerServiceStatusChanged object:nil];
}
#pragma mark - Actions
- (void)onStartAsrButtonClick:(id)sender {
// 初始化語音請求類
NlsRequest * nlsRequest = [[NlsRequest alloc] init];
#warning appkey請從 "快速開始" 幫助頁麵的appkey列表中獲取
[nlsRequest setAppkey:@""]; // requested
[nlsRequest setBstreamAttached:YES]; // requested 語音識別,setBstreamAttached = YES
[nlsRequest setAsrRequest:@"input_userid"]; // requested 設置asr_in參數
#warning 請修改為您在阿裏雲申請的數字驗證串Access Key ID和Access Key Secret
[nlsRequest Authorize:@"" withSecret:@""]; // requested
// 初始化語音服務核心類
NlsRecognizer *r = [[NlsRecognizer alloc] initWithNlsRequest:nlsRequest svcURL:nil]; // requested 采用默認svcURL
//vad:自動語音檢測,可根據需要設置是否打開,YES為打開,NO為關閉。
[r setVad:self.setVadFlag];
r.delegate = self;
r.cancelOnAppEntersBackground = YES;
r.enableUserCancelCallback = YES;
self.recognizer = r;
NSString *nlsRequestJSONString = [NlsRequest getJSONStringfromNlsRequest:nlsRequest];
NSLog(@"setupAsrIn : %@",nlsRequestJSONString);
//開始語音識別
[self.recognizer start];
}
- (void)onStopAsrButtonClick:(id)sender {
//結束語音識別
[self.recognizer stop];
}
#pragma mark - Notification Callbacks
-(void)asrStatusChanged:(NSNotification*)notify{
//處理網絡變化
}
#pragma mark - RecognizerDelegate
-(void) recognizer:(NlsRecognizer *)recognizer didCompleteRecognizingWithResult:(NlsRecognizerResult*)result error:(NSError*)error{
//處理識別結果和錯誤信息
//若appkey為流式返回appkey,將會多次回調該方法
}
-(void) recognizer:(NlsRecognizer *)recognizer recordingWithVoiceVolume:(NSUInteger)voiceVolume{
//處理音量變化
}
-(void) recognizerDidStartRecording:(NlsRecognizer *)recognizer{
//處理開始識別事件
}
-(void) recognizerDidStopRecording:(NlsRecognizer *)recognizer{
//處理結束識別事件
}
@end
FAQ
問題1 : bitcode。
ld: 'xxx/NlsClientSDK.framework/NlsClientSDK(NlsRecognizer.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
解決1 : 打開項目-targets-build settings-Enable Bitcode-設置為No。
問題2 : 數加驗證失敗4403。
{
NSLocalizedDescription = "server closed connection, code:4403, reason:Unauthorized AppKey [xxx], wasClean:1";
}
解決2 : 檢查數加驗證的 ak_id 和 ak_secret 是否正確;檢查 appkey 填寫是否正確。
#warning 請修改為您在阿裏雲申請的數字驗證串Authorize withSecret
[nlsRequest Authorize:@"Access Key ID" withSecret:@"Access Key Secret"]; // requested Access Key ID和Access Key Secret
#warning appkey請從 "快速開始" 幫助頁麵的appkey列表中獲取。
[nlsRequest setAppkey:@"your_appkey"]; // requested
問題3 : Assertion failed。
解決3 : 檢查在開始語音識別前,是否注冊;檢查NlsRecognizer初始化時svcURL是否為nil。
//Config appkey.
[NlsRecognizer configure];
NlsRecognizer *r = [[NlsRecognizer alloc] initWithNlsRequest:nlsRequest svcURL:nil];
問題4 : 錯誤碼4400。
{
NSLocalizedDescription = "server closed connection, code:4400, reason:illegal params, operation forbidden, wasClean:1";
}
解決4 : 檢查appkey是否為空,填寫正確的appkey。
#warning 請修改為您在阿裏雲申請的APP_KEY
[nlsRequest setAppkey:@"your_appkey"]; // requested
最後更新:2016-12-08 11:07:23
上一篇:
Android SDK__一句話識別_語音識別(ASR)_智能語音交互-阿裏雲
下一篇:
OPUS格式語音編解碼__一句話識別_語音識別(ASR)_智能語音交互-阿裏雲
認證所需具備的知識__彈性計算認證(ACP級)_如何獲得專業技術認證?_專業技術認證-阿裏雲
快速開始__雲渲染管理係統_行業解決方案_批量計算-阿裏雲
刪除HTTP頭信息__配置操作接口_API 手冊_CDN-阿裏雲
Logtail日期格式__logtail(Agent)_用戶指南_日誌服務-阿裏雲
UpdateGroup__組管理接口_RAM API文檔_訪問控製-阿裏雲
查詢服務狀態__服務操作接口_API 手冊_CDN-阿裏雲
新建自定義路由__路由表相關接口_API 參考_雲服務器 ECS-阿裏雲
雲服務器 ECS擴容數據盤(Windows實例)
CreateMachineGroup__Logtail機器組相關接口_API-Reference_日誌服務-阿裏雲
阿裏雲若勝訴我們就欠快播一個會員,阿裏雲敗訴判賠26萬
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲