 
			(1) 概念解釋
實時語音翻譯:可實現對連續音頻流的實時識別,實時識別和翻譯a語音輸入的內容,轉換成文本信息并返回對應文字流。
(2) 說明
Hi,您好,歡迎使用有道智云實時語音翻譯iOS SDK。如果您想快速體驗服務,建議您前往 實時語音翻譯體驗中心 或者在體驗中心右下側找到小程序二維碼,掃描進行體驗。
本文檔主要針對需要集成實時語音翻譯服務iOS SDK的開發工程師,詳細描述有道智云實時語音翻譯能力及集成過程。
如果您有與我們商務合作的需求,可以通過以下方式聯系我們:
商務郵箱: AIcloud_Business@corp.youdao.com
如果您對文檔內容有任何疑問,可以通過以下幾種方式聯系我們:
客服QQ:1906538062
智云語音技術交流QQ群:861723255
聯系郵箱: zhiyun@corp.youdao.com
溫馨提示: 本文檔主要針對開發人員,接入測試前需要在后臺創建iOS應用,并綁定實時語音翻譯實例;如果您還沒有,請按照新手指南 操作。 平臺向每個賬戶贈送50元的體驗金,供用戶集成前測試所用,具體資費規則詳見 實時語音翻譯服務報價 。
###功能介紹
有道智云實時語音翻譯 SDK 是有道智云開放平臺提供的云服務之一,是有道在線實時語音翻譯接口的一種實現,支持在線實時語音翻譯。
###兼容性
支持設備:運行了iOS 8.0及以上系統的 iOS 設備
開始集成SDK之前開發者需要登錄有道智云平臺 ,創建應用獲取應用ID(或者通過運營人員獲取應用ID),以便使用實時語音翻譯服務。
實時語音翻譯 SDK 由如下幾個 SDK 組成,YDStreamSpeechTrans.h、base.h 、libbase.a、libStreamSpeechTrans.a
(1). 添加頭文件和庫文件:將實時語音翻譯 SDK 添加到工程中,包括 YDStreamSpeechTrans.h 和 base.h 頭文件、libbase.a和libStreamSpeechTrans.a文件。
(2). 設置工程Other Linker Flags為-ObjC。
(3). 在工程build Phases – Link Binary With Libraries中添加libbase.a, AdSupport.framework, CoreTelephony.framework, SystemConfiguration, libz.tbd和libsqlite3.tbd。
說明:所有的查詢都需要初始化appkey,只執行初始化一次即可。 注:appKey即應用ID。
//初始化appkey
YDTranslateInstance *yd = [YDTranslateInstance sharedInstance];
yd.appKey = @"your appkey";
說明:支持實時實時語音翻譯,目前支持多達80余種語言的相互翻譯,請參考 demo 中 StreamSpeechTransVController 的使用,其語言的代碼可參考本文檔支持語言列表中的內容,其已經在base.h中的YDOnlineLanguageTool類中被封裝好,可以選擇自定義或直接使用;
1. 參數說明 格式支持:只支持wav格式。
采樣率:16k。
編碼:16bit位深的單聲道
2. 構造識別器
YDSpeechTranslate *translate = [YDSpeechTranslate sharedTranslate];
translate.delegate = self;
YDSpeechTranslateParam *param = [YDSpeechTranslateParam param];
param.from = @"zh-CHS";//源語言類型,目前支持多達80余種
param.to = @"en";//目標語言類型,目前支持多達80余種。  注:中英混合和粵語不能作為to
param.rate = @"16000";//采樣率
param.format = @"wav";//語音文件格式
param.vadBOS = 2000;//前端點靜音檢測時長,ms
param.vadEOS = 2000;//后端點靜音檢測時長,ms
translate.delegate = param;
3. 執行識別過程
執行[self.translate startListening];開始實時語音翻譯,結果將在代理方法中回調給開發者;
#pragma mark - YDSpeechTranslateDelegate
- (void)onBeginOfSpeech {
  [self startSpeakingAnimation];
  NSLog(@"------speech start-----");
}
- (void)onEndOfSpeech {
  [self endSpekingAnimation];
  NSLog(@"------speech end-----");
}
- (void)onResults:(NSDictionary *)result {
    NSString *context = result[@"context"];
    NSString *tranContent = result[@"tranContent"];
    BOOL isPartial = [result[@"partial"] boolValue];
    NSString *showContext = [NSString stringWithFormat:@"%@%@", self.displayingText, context];
    NSString *showTranContent = [NSString stringWithFormat:@"\n\n%@%@", self.displayingTranText, tranContent];
    NSMutableAttributedString *contextAtt = [self getShowText:showContext textColor:[UIColor grayColor] font:[UIFont systemFontOfSize:13]];
    NSMutableAttributedString *tranContentAtt = [self getShowText:showTranContent textColor:[UIColor blackColor] font:[UIFont boldSystemFontOfSize:15]];
    [contextAtt appendAttributedString:tranContentAtt];
    self.recognizedTV.attributedText = contextAtt;
    if (!isPartial) {
        [self.displayingText appendString:context];
        [self.displayingTranText appendString:tranContent];
    }
}
- (void)onCompleted:(NSError *)speechError {
  [self endSpekingAnimation];
  NSLog(@"------speech completed-----");
}
- (void)onConstantlyQuietIsBOS:(BOOL)isBOS {
  NSLog(@"檢測到%@靜音", isBOS ? @"前端點" : @"后端點");
}
4. 識別結果說明
| 參數 | 含義 | 說明 | 
|---|---|---|
| bg | 分句開始時間 | 單位毫秒/ms | 
| ed | 分句結束時間 | 單位毫秒/ms | 
| context | 識別結果 | |
| tranContent | 翻譯結果 | |
| partial | 是否是中間結果 | true:中間結果;false:完整句子 | 
| segId | 分句 id | 從 0 開始遞增 | 
| 代碼 | 語言 | 
|---|---|
| zh-CHS | 簡體中文 | 
| en | 通用英文 | 
| enzh | 中英混合 | 
| ar-IL | 阿拉伯語(以色列) | 
| ar-JO | 阿拉伯語(約旦) | 
| ar-AE | 阿拉伯語(阿拉伯聯合酋長國) | 
| ar-BH | 阿拉伯語(巴林) | 
| ar-DZ | 阿拉伯語(阿爾及利亞) | 
| ar-SA | 阿拉伯語(沙特阿拉伯) | 
| ar-IQ | 阿拉伯語(伊拉克) | 
| ar-KW | 阿拉伯語(科威特) | 
| ar-MA | 阿拉伯語(摩洛哥) | 
| ar-TN | 阿拉伯語(突尼斯) | 
| ar-OM | 阿拉伯語(阿曼) | 
| ar-PS | 阿拉伯語(巴勒斯坦國) | 
| ar-QA | 阿拉伯語(卡塔爾) | 
| ar-LB | 阿拉伯語(黎巴嫩) | 
| ar-EG | 阿拉伯語(埃及) | 
| pl | 波蘭語(波蘭) | 
| da | 丹麥語(丹麥) | 
| de | 德語(德國) | 
| ru | 俄語 | 
| fr | 法語(法國) | 
| fr-CA | 法語(加拿大) | 
| fi | 芬蘭語(芬蘭) | 
| ko | 韓語(韓國) | 
| nl | 荷蘭語(荷蘭) | 
| cs | 捷克語(捷克共和國) | 
| hr | 克羅地亞語(克羅地亞) | 
| lv | 拉脫維亞語(拉脫維亞) | 
| ro | 羅馬尼亞語(羅馬尼亞) | 
| ms | 馬來語(馬來西亞) | 
| pt-BRA | 葡萄牙語(巴西) | 
| pt | 葡萄牙語(葡萄牙) | 
| ja | 日語(日本) | 
| sv | 瑞典語(瑞典) | 
| te | 泰盧固語(印度) | 
| ta | 泰米爾語(印度) | 
| ta-SG | 泰米爾語(新加坡) | 
| ta-LK | 泰米爾語(斯里蘭卡) | 
| ta-MY | 泰米爾語(馬來西亞) | 
| th | 泰語(泰國) | 
| tr | 土耳其語(土耳其) | 
| es | 西班牙語(西班牙) | 
| es-AR | 西班牙語(阿根廷) | 
| es-BO | 西班牙語(玻利維亞) | 
| es-CL | 西班牙語(智利) | 
| es-COL | 西班牙語(哥倫比亞) | 
| es-CR | 西班牙語(哥斯達黎加) | 
| es-EC | 西班牙語(厄瓜多爾) | 
| es-SV | 西班牙語(薩爾瓦多) | 
| es-US | 西班牙語(美國) | 
| es-GT | 西班牙語(危地馬拉) | 
| es-HN | 西班牙語(洪都拉斯) | 
| es-MEX | 西班牙語(墨西哥) | 
| es-NI | 西班牙語(尼加拉瓜) | 
| es-PA | 西班牙語(巴拿馬) | 
| es-PY | 西班牙語(巴拉圭) | 
| es-PE | 西班牙語(秘魯) | 
| es-PR | 西班牙語(波多黎各) | 
| es-DO | 西班牙語(多米尼加共和國) | 
| es-UY | 西班牙語(烏拉圭) | 
| es-VE | 西班牙語(委內瑞拉) | 
| it | 意大利語(意大利) | 
| hi | 印地語(印度) | 
| en-AUS | 英語(澳大利亞) | 
| en-CA | 英語(加拿大) | 
| en-GH | 英語(加納) | 
| en-GBR | 英語(英國) | 
| en-IND | 英語(印度) | 
| en-IE | 英語(愛爾蘭) | 
| en-KE | 英語(肯尼亞) | 
| en-NZ | 英語(新西蘭) | 
| en-NG | 英語(尼日利亞) | 
| en-PH | 英語(菲律賓) | 
| en-SG | 英語(新加坡) | 
| en-ZAF | 英語(南非) | 
| en-TZ | 英語(坦桑尼亞) | 
| en-US | 英語(美國) | 
| vi | 越南語(越南) | 
| zh-TWN | 臺灣普通話(中國臺灣) | 
| lo | 老撾語(老撾) | 
| bn | 孟加拉語(孟加拉) | 
| bn-IN | 孟加拉語(印度) | 
| tl | 菲律賓語 | 
| 錯誤碼 | 含義 | 
|---|---|
| 101 | 缺少必填的參數 | 
| 102 | 不支持的語言類型 | 
| 103 | 翻譯文本過長 | 
| 104 | 不支持的API類型 | 
| 105 | 不支持的簽名類型 | 
| 106 | 不支持的響應類型 | 
| 107 | 不支持的傳輸加密類型 | 
| 108 | 應用ID無效,注冊賬號,登錄后臺創建應用和實例并完成綁定,可獲得應用ID和應用密鑰等信息 | 
| 109 | batchLog格式不正確 | 
| 110 | 無相關服務的有效實例 | 
| 111 | 開發者賬號無效 | 
| 113 | q不能為空 | 
| 114 | 不支持的圖片傳輸方式 | 
| 201 | 解密失敗,可能為DES,BASE64,URLDecode的錯誤 | 
| 202 | 簽名檢驗失敗 | 
| 203 | 訪問IP地址不在可訪問IP列表 | 
| 205 | 請求的接口與應用的平臺類型不一致,如有疑問請參考入門指南 | 
| 206 | 因為時間戳無效導致簽名校驗失敗 | 
| 207 | 重放請求 | 
| 301 | 辭典查詢失敗 | 
| 302 | 翻譯查詢失敗 | 
| 303 | 服務端的其它異常 | 
| 304 | 會話閑置太久超時 | 
| 401 | 賬戶已經欠費停 | 
| 402 | offlinesdk不可用 | 
| 411 | 訪問頻率受限,請稍后訪問 | 
| 412 | 長請求過于頻繁,請稍后訪問 | 
| 1001 | 無效的OCR類型 | 
| 1002 | 不支持的OCR image類型 | 
| 1003 | 不支持的OCR Language類型 | 
| 1004 | 識別圖片過大 | 
| 1201 | 圖片base64解密失敗 | 
| 1301 | OCR段落識別失敗 | 
| 1411 | 訪問頻率受限 | 
| 1412 | 超過最大識別字節數 | 
| 2003 | 不支持的語音聲道 | 
| 2004 | 不支持的語音上傳類型 | 
| 2005 | 不支持的語言類型 | 
| 2006 | 不支持的識別類型 | 
| 2201 | 識別音頻文件過大 | 
| 2301 | 識別音頻時長過長 | 
| 2411 | 不支持的音頻文件類型 | 
| 2412 | 不支持的發音類型 | 
| 3001 | 不支持的語音格式 | 
| 3002 | 不支持的語音采樣率 | 
| 3003 | 不支持的語音聲道 | 
| 3004 | 不支持的語音上傳類型 | 
| 3005 | 不支持的語言類型 | 
| 3006 | 不支持的識別類型 | 
| 3007 | 識別音頻文件過大 | 
| 3008 | 識別音頻時長過長 | 
| 3009 | 不支持的音頻文件類型 | 
| 3010 | 不支持的發音類型 | 
| 3201 | 解密失敗 | 
| 3301 | 語音識別失敗 | 
| 3302 | 語音翻譯失敗 | 
| 3303 | 服務的異常 | 
| 3411 | 訪問頻率受限,請稍后訪問 | 
| 3412 | 超過最大請求字符數 | 
| 4001 | 不支持的語音識別格式 | 
| 4002 | 不支持的語音識別采樣率 | 
| 4003 | 不支持的語音識別聲道 | 
| 4004 | 不支持的語音上傳類型 | 
| 4005 | 不支持的語言類型 | 
| 4006 | 識別音頻文件過大 | 
| 4007 | 識別音頻時長過長 | 
| 4201 | 解密失敗 | 
| 4301 | 語音識別失敗 | 
| 4303 | 服務的異常 | 
| 4411 | 訪問頻率受限,請稍后訪問 | 
| 4412 | 超過最大請求時長 | 
| 5001 | 無效的OCR類型 | 
| 5002 | 不支持的OCR image類型 | 
| 5003 | 不支持的語言類型 | 
| 5004 | 識別圖片過大 | 
| 5005 | 不支持的圖片類型 | 
| 5006 | 文件為空 | 
| 5201 | 解密錯誤,圖片base64解密失敗 | 
| 5301 | OCR段落識別失敗 | 
| 5411 | 訪問頻率受限 | 
| 5412 | 超過最大識別流量 | 
| 9001 | 不支持的語音格式 | 
| 9002 | 不支持的語音采樣率 | 
| 9003 | 不支持的語音聲道 | 
| 9004 | 不支持的語音上傳類型 | 
| 9005 | 不支持的語音識別 Language類型 | 
| 9301 | ASR識別失敗 | 
| 9303 | 服務器內部錯誤 | 
| 9411 | 訪問頻率受限(超過最大調用次數) | 
| 9412 | 超過最大處理語音長度 | 
| 10001 | 無效的OCR類型 | 
| 10002 | 不支持的OCR image類型 | 
| 10004 | 識別圖片過大 | 
| 10201 | 圖片base64解密失敗 | 
| 10301 | OCR段落識別失敗 | 
| 10411 | 訪問頻率受限 | 
| 10412 | 超過最大識別流量 | 
| 11001 | 不支持的語音識別格式 | 
| 11002 | 不支持的語音識別采樣率 | 
| 11003 | 不支持的語音識別聲道 | 
| 11004 | 不支持的語音上傳類型 | 
| 11005 | 不支持的語言類型 | 
| 11006 | 識別音頻文件過大 | 
| 11007 | 識別音頻時長過長,最大支持30s | 
| 11201 | 解密失敗 | 
| 11301 | 語音識別失敗 | 
| 11303 | 服務的異常 | 
| 11411 | 訪問頻率受限,請稍后訪問 | 
| 11412 | 超過最大請求時長 | 
| 12001 | 圖片尺寸過大 | 
| 12002 | 圖片base64解密失敗 | 
| 12003 | 引擎服務器返回錯誤 | 
| 12004 | 圖片為空 | 
| 12005 | 不支持的識別圖片類型 | 
| 12006 | 圖片無匹配結果 | 
| 13001 | 不支持的角度類型 | 
| 13002 | 不支持的文件類型 | 
| 13003 | 表格識別圖片過大 | 
| 13004 | 文件為空 | 
| 13301 | 表格識別失敗 | 
| 15001 | 需要圖片 | 
| 15002 | 圖片過大(1M) | 
| 15003 | 服務調用失敗 | 
| 17001 | 需要圖片 | 
| 17002 | 圖片過大(1M) | 
| 17003 | 識別類型未找到 | 
| 17004 | 不支持的識別類型 | 
| 17005 | 服務調用失敗 | 
| -1000 | 未知錯誤 | 
| -2000 | 查詢輸入為空 | 
運行程序崩潰?
 檢查下是否對應的 SDK靜態庫包 是否放到當前工程目錄下。
翻譯沒結果? 檢查下翻譯接口回調的錯誤信息,保證申請的應用ID是有效且提前綁定了。
如何獲得應用ID 注冊賬號,登錄后臺創建應用和實例并完成綁定, 可獲得應用ID和應用密鑰等信息。
添加翻譯 SDK 之后審核沒有通過? 翻譯 SDK 使用了 AdSupport 框架獲取設備 IDFA 信息用以統計計費,提交審核時對應用是否有廣告選項請選擇“是”。
| 上線日期 | 版本號 | 更新內容 | 
|---|---|---|
| 2019.06.20 | v1.0.0 | 增加流式語音翻譯 | 
| 2019.09.19 | v1.1.0 | 擴充小語種 |