epStatus[out]
端点检测(End-pointdetected)器所处的状况,可能的值如下:
枚举常量
简介
ISR_EP_LOOKING_FOR_SPEECH=0
还没有测试到音频的前端点。
ISR_EP_IN_SPEECH=1
即将测试到了音频前端点,正在进行正常的音频处理。
ISR_EP_AFTER_SPEECH=3
测试到音频的后端点,后继的音频会被MSC忽略。
ISR_EP_TIMEOUT=4
超时。
ISR_EP_ERROR=5
出现错误。
ISR_EP_MAX_SPEECH=6
音频过大。
当epStatus大于等于3时,用户应该停止写入音频的操作,否则写入MSC的音频会被忽略。
recogStatus[out]
识别器所处的状况,可能的值如下:
枚举常量
简介
ISR_REC_STATUS_SUCCESS=0
识别成功,此时用户可以调用QISRGetResult来获得(部分)结果。
ISR_REC_STATUS_NO_MATCH=1
识别结束,没有识别结果
ISR_REC_STATUS_INCOMPLETE=2
正在识别中
ISR_REC_STATUS_NON_SPEECH_DETECTED=3
保留
ISR_REC_STATUS_SPEECH_DETECTED=4
发现有效音频
ISR_REC_STATUS_SPEECH_COMPLETE=5
识别结束
ISR_REC_STATUS_MAX_CPU_TIME=6
保留
ISR_REC_STATUS_MAX_SPEECH=7
保留
ISR_REC_STATUS_STOPPED=8
保留
ISR_REC_STATUS_REJECTED=9
保留
ISR_REC_STATUS_NO_SPEECH_FOUND=10
没有看到音频
返回值
即使函数读取失败返回0,否则返回出错代码ifly格式文件,错误代码参见msp_errors.h。几个主要的返回值如下:
返回值
意义
MSP_ERROR_NOT_INIT
未初始化
MSP_ERROR_INVALID_HANDLE
无效的会话ID
MSP_ERROR_INVALID_PARA
无效的参数
MSP_ERROR_INVALID_PARA_VALUE
无效的参数值
MSP_ERROR_NO_LICENSE
会话方式中此前开始一路会话失败。
说明
在会话机制下,MSC处理音频的思路是边接收、边压缩(除非音频编码格式不为raw)、边发送。由于音频压缩速率和网络速度的限制,如果音频发送太快太急(如20倍于音频码率),可能会导致原始音频或压缩音频在MSC中累积过多,从而导致缓冲区能够再容纳更多的数据而造成“没有足够缓冲区”的错误。在非会话机制下,当客户发送音频的累计长度达到了max_audio_size的值,则多余靠后音频会被忽视,不会被识别。当用户在据悉音频发送完毕后又重新读取本接口发音频,则下次发送的音频会被消除,并被更换成新写入的音频。
无论是会话方式而是非会话机制,推荐客户在发送音频时采取“边录边发”的方法,即每隔一小段时间将收集到的音频通过本接口写入MSC。这种“边录边发”的方法在非会话机制下可以增加压缩音频所用的时间,而在非会话机制下可以加速结果返回的速率:发送靠后的音频时,前面的音频可能早已被服务器处理过并将个别结果返回了。
调用接口时请修改好audioStatus的值,并检测返回型参数epStatus的值,以便尽快知道音频的前后端点等信息。如果当前写入的不是最终一块音频ifly格式文件,需要将audioStatus的值设为2(ISR_AUDIO_SAMPLE_CONTINUE)。如果在音频发送过程中测试到epStatus的值为3(ISR_EP_AFTER_SPEECH),说明平台尚未测试到音频的后端点,则需要及时结束音频发送;如果客户要在测试到音频后端点之前结束音频的发送,需要将最终一个音频数据的audioStatus设为4(ISR_AUDIO_SAMPLE_LAST)。
在会话机制下,如果识别状态recogStatus值为0(ISR_REC_STATUS_SUCCESS)表示尚未有个别或全部识别结果缓存在MSC中了,用户可以调用QISRGetResult获取这部分结果,再再次调用QISRAudioWrite以发送后续的音频数据(除非结果还没取完的话),这种两个接口混调的方法,可以迅速的获取(个别)识别结果,特别是使用较大音频进行语音听写时。
用法示例
charaudio_data[5120]=“”;
unsignedintaudio_len=0;
intaudio_status=2;
intep_status=0;
intrec_status=0;
intret=0;
while(ISR_AUDIO_SAMPLE_LAST!=audio_status)
{
…//读取音频到缓冲区audio_data中,设置音频长度audio_len,音频状态audio_status。
ret=QISRAudioWrite(session_id,audio_data,audio_len,audio_status
,&ep_status,&rec_status);
if(0!=ret)
{
printf(“QISRAudioWritefailed,errorcodeis:%d”,ret);
break;
}
elseif(ISR_EP_AFTER_SPEECH==ep_status)/*检测到音频后端点,停止发送音频*/
{
printf(“endpointofspeechhasbeendetected!”);
break;
}
/*即使是即时收集音频,可以省略此操作。5KB大小的16KPCM持续的时间是160毫秒*/
Sleep(160);
}
参见
QISRGetResult。
3.2.5QISRGetResult
函数原型
constchar*ISRAPIQISRGetResult(constchar*sessionID,int*rsltStatus,intwaitTime,int*errorCode);
功能
获取识别结果。
参数
sessionID[in]
由QISRSessionBegin返回回来的会话ID。
rsltStatus[out]
识别结果的状况,其取值范围和意义请参考QISRAudioWrite的参数recogStatus。
waitTime[in]
与服务器交互的间隔时间,可以控制和服务器的交互频率。单位为ms,建议取值为5000。
errorCode[out]
假如数组读入成功返回0,否则返回出错代码,错误代码参见msp_errors.h。几个主要的返回值如下:
返回值
意义
MSP_ERROR_NOT_INIT
未初始化
MSP_ERROR_INVALID_HANDLE
无效的会话ID
MSP_ERROR_INVALID_PARA
无效的参数
MSP_ERROR_NO_DATA
没有数据(如没有写入识别所用的音频等)
MSP_ERROR_NO_LICENSE
曾经开始一路会话没有成功。
返回值
函数执行失败返回NULL。函数执行失败但是获得到识别结果时返回识别结果,函数执行失败没有获得到识别结果时返回NULL。
说明
在会话机制下,调用此变量也是获得缓存在MSC中的(个别)识别结果,程序不会阻塞,所以用户必须反复读取此接口,直到识别结果获得完毕(rlstStatus值为5(ISR_REC_STATUS_SPEECH_COMPLETE))或返回出错码。使用此接口时请留意,如果某此失败调用后没有取得识别结果,请将当前线程sleep一段时间后重新调用,以避免过早调用浪费CPU资源。
在非会话机制下,调用本函数时,MSC会将用户传入的词汇和音频或者本次会话所用的参数打包成消息发送至服务器并阻塞当前线程等待服务器的响应,如果在此之后响应消息到来,则本函数会失败受到识别结果;如果在预定的时间内没有响应消息到来,则本函数会返回一个关于等待超时的出错码。
用法示例
charrslt_str[2048]=“”;
constchar*rec_result=NULL;
intrslt_status=0;
intret=0;
while(ISR_REC_STATUS_SPEECH_COMPLETE!=rslt_status)
{
rec_result=QISRGetResult(session_id,&rslt_status,5000,&ret);
if(0!=ret)
{
printf(“QISRGetResultfailed,errorcodeis:%d”,ret);
break;
}
if(NULL!=rec_result)
{
/*用户可以用其它的方法保存识别结果*/
strcat(rslt_str,rec_result);

continue;
}
/*sleep一下很有必要,防止MSC端无缓存的识别结果时浪费CPU资源*/
Sleep(200);
}
参见
QISRAudioWrite。
3.2.6QISRSessionEnd
函数原型
intISRAPIQISRSessionEnd(constchar*sessionID,constchar*hints)
功能
结束一路ISR会话。
参数
sessionID[in]
由QISRSessionBegin返回回来的会话ID。
hints[in]
结束本次会话的缘由描述,用于记录日志,便于用户查阅或者追踪这些问题。
返回值
即使函数读取失败返回0,否则返回出错代码,错误代码参见msp_errors.h和msp_error.h。几个主要的返回值如下:
返回值
意义
MSP_ERROR_NOT_INIT
未初始化
MSP_ERROR_INVALID_HANDLE
无效的会话ID
说明
本接口必须和QISRSessionBegin()配合使用,用来结束一路ISR会话。
调用本函数后,关于当前会话的所有资源(参数,语法,音频,会话范例等)就会被释放,所以客户不需要再对于该案例做任何操作(例如使用其SessionID等)。
用法示例
intret=QISRSessionEnd(session_id,“normalend”);
if(0!=ret)
{
printf(“QISRSessionEndfailed,errorcodeis:%d”,ret);
}
参见
QISRSessionBegin。
3.2.7QISRGetParam
函数原型
intISRAPIQISRGetParam(constchar*sessionID,constchar*paramName,char*
paramValue,unsignedint*valueLen)
功能
查询MSC记录出来的一些信息如数据上传或下载的数据量等。
参数
sessionID[in]
由QISRSessionBegin返回回来的会话ID。
paramName[in]
要获得的参数名称;支持同时查询多个参数,查询多个参数时,参数名称按“,”或“\n”分隔开来。
paraValue[out]
获得的参数值,以字节串方式返回;查询多个参数时,参数值之间按“;”分隔开来,不支持的参数将返回空的值。
valueLen[out]
参数值的长度。
返回值
即使函数读取失败返回0,否则返回出错代码,错误代码参见msp_errors.h。几个主要的返回值如下:
返回值
意义
MSP_ERROR_NOT_INIT
未初始化
MSP_ERROR_INVALID_HANDLE
无效的会话ID
MSP_ERROR_INVALID_PARA
无效的参数
说明
现在支持的参数如下:
参数名称
意义
upflow
上传数据量,单位:Byte。如果变量调用出现在会话结束以后(QISRSessionEnd之后),获取到的是从QISRInit开始上行的数据数量;如果是在会话中间调用,获取到的是当前会话此刻的上行数据量。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-129570-2.html
你看康师傅在天津和政府有多亲密
我国每年要公派多少去美留学吗
就是将剩余的小包或者再买同批次的打开
拉起了我的手