当用户说话才开始录音,当用户停止说话停止录音.
uuid_record和record_session
1.使用条件:
设置录音时间长度在1-50s之间
就启动支持asr:当用户说话才开始录音,当用户停止说话停止录音.
假如没设置录音时间长度,或者时间长度超过50s,支持asr功能不起效.
uuid_record和record_session 行为跟修改之前一样.
2.设置参数:
2.1 可以设置 RECORD_SILENCE_THRESHOLD 通道变量
参数是判断用户说话开始的能量,可以设置<3000,比如设置RECORD_SILENCE_THRESHOLD=1000
没设置就是使用系统里面默认的能量=3000.一般情况下设置=1000
可以设置 EOS_SILENCE_THRESHOLD 通道变量
参数是判断用户没说话的能量,可以设置>200,EOS_SILENCE_THRESHOLD=5000
没设置就是使用系统里面默认的能量=200.一般情况下设置=500
2.2 可以设置 RECORD_FINAL_TIMEOUT_MS 通道变量
参数是设置用户说话之后没说话多久认为用户真的停止说话了
可以设置<2000,比如设置RECORD_FINAL_TIMEOUT_MS=1000
没设置就是使用系统里面默认的是2000ms,
假如 拨入可以设置 default 拨号计划里面
假如拨出的 需要vars.xml 里面设置
说话间隔超时时间:
说话开始能量:
说话结束的能量:
3.事件处理
设置录音时间长度在1-20s之间,这个时候支持asr功能生效,
用户假如一直没说话,时间到了会产生RECORD_STOP事件.
假如用户开始说话,马上产生:RECORD_START事件,
用户说话结束产生: RECORD_STOP
假如系统有播音(对话方式),那么收到RECORD_START事件
需要马上停止播音,收到RECORD_STOP事件可以把录音文件打开
读出里面的语音拿去进行识别
4.esl 修改:
4.1 增加 RECORD_START RECORD_STOP 事件监听 4.2 if (strcmp(event, "RECORD_START") == 0)//yhy2018-01-13 需要判断自己的record filename才能stop play {if (xxx)//有播音要停止播音 {char*p = strstr(eventbody, "Record-File-Path: "); if (p) {p = p + strlen("Record-File-Path: "); strncpy(tmp, p, 64); tmp[64] = 0; if (strlen(Lineinfo.filename)>1 && strstr(tmp, Lineinfo.filename + 4))//d:/xx Record-File-Path: d%3A/data/2018/01/13/150614_13606060253_001.wav {sprintf(cmd_tmp, "api uuid_break %s all", uuid); esl_send_recv_timed(handle, cmd_tmp, 1000); cti_log(5, "RECORD_START,%s,stop play,pause on", cmd_tmp); return 0; 4.3 if (strcmp(event, "RECORD_STOP") == 0)//yhy2017-12-19 支持op_record 50秒内的录音改进. sos 才录音,eos 录音结束. { get_lineinfo(index, Lineinfo); if (Lineinfo.record == 1 && time(NULL)>Lineinfo.time)//yhy2018-01-31 之前的record 不是当前的record 才停止 { char*p = strstr(eventbody, "Record-File-Path: ");//yhy2018-03-17停止也要判断文件名 if (p) { p = p + strlen("Record-File-Path: "); strncpy(tmp, p, 64); tmp[64] = 0; if (strlen(Lineinfo.filename) > 1 && strstr(tmp, Lineinfo.filename + 4))//d:/xx Record-File-Path: d%3A/data/2018/01/13/150614_13606060253_001.wav {if (xxx)//有播音要停止播音 {sprintf(cmd_tmp, "api uuid_break %s all", uuid); esl_send_recv_timed(handle, cmd_tmp, 1000); cti_log(5, "index=%04d,RECORD_STOP,filename=%s", index, Lineinfo.filename); return 0;