提供汉语、英语两种语言的评测,支持单字(汉语专有)、词语和句子朗读三种题型,通过简单地接口调用就可以集成到您的应用中。语音评测的使用主要有三个步骤:语音评测  - 图1

  1. // 获取评测对象单例
  2. _iFlySpeechEvaluator = [IFlySpeechEvaluator sharedInstance];
  3. _iFlySpeechEvaluator.delegate = self;
  4. // 设置训练参数
  5. // 清空参数
  6. [_iFlySpeechEvaluator setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];
  7. // 设置评测采样率
  8. [self.iFlySpeechEvaluator setParameter:@"16000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
  9. // 设置评测题目编码,如果是utf-8格式,请添加bom头,添加方式可参考demo。
  10. [self.iFlySpeechEvaluator setParameter:@"utf-8" forKey:[IFlySpeechConstant TEXT_ENCODING]];
  11. // 设置评测题目结果格式,目前仅支持xml
  12. [self.iFlySpeechEvaluator setParameter:@"xml" forKey:[IFlySpeechConstant ISE_RESULT_TYPE]];
  13. // 设置评测前端点超时
  14. [self.iFlySpeechEvaluator setParameter:self.iseParams.bos forKey:[IFlySpeechConstant VAD_BOS]];
  15. // 设置评测后端点超时
  16. [self.iFlySpeechEvaluator setParameter:self.iseParams.eos forKey:[IFlySpeechConstant VAD_EOS]];
  17. // 设置评测题型
  18. [self.iFlySpeechEvaluator setParameter:self.iseParams.category forKey:[IFlySpeechConstant ISE_CATEGORY]];
  19. // 设置评测语言
  20. [self.iFlySpeechEvaluator setParameter:self.iseParams.language
  21. forKey:[IFlySpeechConstant LANGUAGE]];
  22. // 设置评测结果级别
  23. [self.iFlySpeechEvaluator setParameter:self.iseParams.rstLevel forKey:[IFlySpeechConstant ISE_RESULT_LEVEL]];
  24. // 设置评测超时
  25. [self.iFlySpeechEvaluator setParameter:self.iseParams.timeout forKey:[IFlySpeechConstant SPEECH_TIMEOUT]];

可通过setParameter设置的评测相关参数说明如下:

参数说明是否必需
language评测语种,可选值:en_us(英语)、zh_cn(汉语)
category评测题型,可选值:read_syllable(单字,汉语专有)、read_word(词语)、read_sentence(句子)、read_chapter(篇章)
text_encoding上传的试题编码格式,可选值:gb2312、utf-8。当进行汉语评测时,必须设置成utf-8,建议所有试题都使用utf-8编码
vad_bos前端点超时,默认5000ms
vad_eos后端点超时,默认1800ms
speech_timeout录音超时,当录音达到时限将自动触发vad停止录音,默认-1(无超时)
result_level评测结果等级,可选值:plain、complete,默认为complete

实现协议:

  1. //语音评测实现Delegate
  2. // 音量和数据回调
  3. - (void)onVolumeChanged:(int)volume buffer:(NSData *)buffer{}
  4. // 开始录音回调
  5. - (void)onBeginOfSpeech{}
  6. // 停止录音回调
  7. - (void)onEndOfSpeech{}
  8. // 会话取消回调
  9. - (void)onCancel{}
  10. // 评测错误回调
  11. - (void)onCompleted:(IFlySpeechError *)errorCode{}
  12. // 评测结果回调
  13. - (void)onResults:(NSData *)results isLast:(BOOL)isLast{}

调用startListening即开始评测录音,读完试题内容后可以调用 stopListening停止录音,也可以在一段时间后由SDK自动检测VAD并停止录音。当评测出错时,SDK会回调onError方法抛出IFlySpeechError 错误,通过IFlySpeechError的getErrorCode()方法可获得错误码,常见的错误码详见 附录 错误码列表和下表:

错误码数值含义
MSP_ERROR_ASE_EXCEP_SILENCE11401无语音或音量太小
MSP_ERROR_ASE_EXCEP_SNRATIO11402信噪比低或有效语音过短
MSP_ERROR_ASE_EXCEP_PAPERDATA11403非试卷数据
MSP_ERROR_ASE_EXCEP_PAPERCONTENTS11404试卷内容有误
MSP_ERROR_ASE_EXCEP_NOTMONO11405录音格式有误
MSP_ERROR_ASE_EXCEP_OTHERS11406其他评测数据异常,包括错读、漏读、恶意录入、试卷内容等错误
MSP_ERROR_ASE_EXCEP_PAPERFMT11407试卷格式有误
MSP_ERROR_ASE_EXCEP_ULISTWORD11408存在未登录词,即引擎中没有该词语的信息

解析评测结果:SDK通过onResult回调抛出XML格式的评测结果,结果格式及字段含义详见 语音评测试题格式及结果说明 文档,具体解析过程可参考Demo工程IFlyMscDemo中ISE 目录下Result目录中的源代码。语音评测  - 图2

其它常见问题请参见 科大讯飞语音评测 FAQ 文档。

1.1. 音频流评测

音频流评测功能可以让开发者将已录制好的音频数据写入评测控件,最后得到评测结果。

  1. //设置音频源为音频流(-1)
  2. [self.iFlySpeechEvaluatorr setParameter:@"-1" forKey:@"audio_source"];
  3. //启动评测服务
  4. [self.iFlySpeechEvaluator startListeningbuffer params:nil];
  5. //写入音频数据
  6. NSData *data = [NSData dataWithContentsOfFile:_pcmFilePath]; //从文件中读取音频
  7. [self.iFlySpeechEvaluator writeAudio:data];//写入音频,让SDK评测。建议将音频数据分段写入。
  8. //音频写入结束或出错时,必须调用结束评测接口
  9. [self.iFlySpeechEvaluator stopListening];//音频数据写入完成,进入等待状态