提供漢語、英語兩種語言的評測,支持單字(漢語專有)、詞語和句子朗讀三種題型,通過簡單地接口調用就可以集成到您的應用中。語音評測的使用主要有三個步驟:

~~~
// 獲取評測對象單例
_iFlySpeechEvaluator = [IFlySpeechEvaluator sharedInstance];
_iFlySpeechEvaluator.delegate = self;
// 設置訓練參數
// 清空參數
[_iFlySpeechEvaluator setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];
// 設置評測采樣率
[self.iFlySpeechEvaluator setParameter:@"16000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
// 設置評測題目編碼,如果是utf-8格式,請添加bom頭,添加方式可參考demo。
[self.iFlySpeechEvaluator setParameter:@"utf-8" forKey:[IFlySpeechConstant TEXT_ENCODING]];
// 設置評測題目結果格式,目前僅支持xml
[self.iFlySpeechEvaluator setParameter:@"xml" forKey:[IFlySpeechConstant ISE_RESULT_TYPE]];
// 設置評測前端點超時
[self.iFlySpeechEvaluator setParameter:self.iseParams.bos forKey:[IFlySpeechConstant VAD_BOS]];
// 設置評測后端點超時
[self.iFlySpeechEvaluator setParameter:self.iseParams.eos forKey:[IFlySpeechConstant VAD_EOS]];
// 設置評測題型
[self.iFlySpeechEvaluator setParameter:self.iseParams.category forKey:[IFlySpeechConstant ISE_CATEGORY]];
// 設置評測語言
[self.iFlySpeechEvaluator setParameter:self.iseParams.language
forKey:[IFlySpeechConstant LANGUAGE]];
// 設置評測結果級別
[self.iFlySpeechEvaluator setParameter:self.iseParams.rstLevel forKey:[IFlySpeechConstant ISE_RESULT_LEVEL]];
// 設置評測超時
[self.iFlySpeechEvaluator setParameter:self.iseParams.timeout forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];
~~~
可通過setParameter設置的評測相關參數說明如下:
|參數|說明|是否必需|
| :---: | :---|:---:|
|language|評測語種,可選值:<br>en_us(英語)、zh_cn(漢語)|是|
|category|評測題型,可選值:<br>read_syllable(單字,漢語專有)、read_word(詞語)、<br>read_sentence(句子)、read_chapter(篇章)|是|
|text_encoding|上傳的試題編碼格式,可選值:<br>gb2312、utf-8。<br>當進行漢語評測時,必須設置成utf-8,<br>建議所有試題都使用utf-8編碼|是|
|vad_bos|前端點超時,默認5000ms|否|
|vad_eos|后端點超時,默認1800ms|否|
|speech_timeout|錄音超時,當錄音達到時限將自動觸發<br>vad停止錄音,默認-1(無超時)|否|
|result_level|評測結果等級,可選值:<br>plain、complete,默認為complete|否|
實現協議:
~~~
//語音評測實現Delegate
// 音量和數據回調
- (void)onVolumeChanged:(int)volume buffer:(NSData *)buffer{}
// 開始錄音回調
- (void)onBeginOfSpeech{}
// 停止錄音回調
- (void)onEndOfSpeech{}
// 會話取消回調
- (void)onCancel{}
// 評測錯誤回調
- (void)onError:(IFlySpeechError *)errorCode{}
// 評測結果回調
- (void)onResults:(NSData *)results isLast:(BOOL)isLast{}
~~~
調用startListening即開始評測錄音,讀完試題內容后可以調用 stopListening停止錄音,也可以在一段時間后由SDK自動檢測VAD并停止錄音。當評測出錯時,SDK會回調onError方法拋出IFlySpeechError 錯誤,通過IFlySpeechError的getErrorCode()方法可獲得錯誤碼,常見的錯誤碼詳見 [附錄](附錄.md) 錯誤碼列表和下表:
|錯誤碼|數值|含義|
| :---: | :---: | :---: |
|MSP_ERROR_ASE_EXCEP_SILENCE|11401|無語音或音量太小|
|MSP_ERROR_ASE_EXCEP_SNRATIO|11402|信噪比低或有效語音過短|
|MSP_ERROR_ASE_EXCEP_PAPERDATA|11403|非試卷數據|
|MSP_ERROR_ASE_EXCEP_PAPERCONTENTS|11404|試卷內容有誤|
|MSP_ERROR_ASE_EXCEP_NOTMONO|11405|錄音格式有誤|
|MSP_ERROR_ASE_EXCEP_OTHERS|11406|其他評測數據異常,包括錯讀、漏讀、惡意錄入、試卷內容等錯誤|
|MSP_ERROR_ASE_EXCEP_PAPERFMT|11407|試卷格式有誤|
|MSP_ERROR_ASE_EXCEP_ULISTWORD|11408|存在未登錄詞,即引擎中沒有該詞語的信息|
**解析評測結果**:
SDK通過onResult回調拋出XML格式的評測結果,**結果格式及字段含義詳見 [語音評測試題格式及結果說明](http://www.hmoore.net/iflytek_sdk/ise_protocol/325501) 文檔**,具體解析過程可參考Demo工程IFlyMscDemo中ISE 目錄下Result目錄中的源代碼。

**其它常見問題請參見 [科大訊飛語音評測 FAQ](http://www.hmoore.net/iflytek_sdk/faq_ise/326200) 文檔。**
## 音頻流評測
音頻流評測功能可以讓開發者將已錄制好的音頻數據寫入評測控件,最后得到評測結果。
~~~
//設置音頻源為音頻流(-1)
[self.iFlySpeechEvaluatorr setParameter:@"-1" forKey:@"audio_source"];
//啟動評測服務
[self.iFlySpeechEvaluator startListening:buffer params:nil];
//寫入音頻數據
NSData *data = [NSData dataWithContentsOfFile:_pcmFilePath]; //從文件中讀取音頻
[self.iFlySpeechEvaluator writeAudio:data];//寫入音頻,讓SDK評測。建議將音頻數據分段寫入。
//音頻寫入結束或出錯時,必須調用結束評測接口
[self.iFlySpeechEvaluator stopListening];//音頻數據寫入完成,進入等待狀態
~~~