动打断(就是检测到声音,就自动停止放音)
start_asr 有一个参数 pause_play_ms,demo是200, 就是检测到说话声音持续时间时间超过pause_play_ms,就自动暂停放音。如果你不需要这个功能设置为0, 如果你启用了这个功能,asrmessage_notify通知每播放一个新的声音就必须要恢复放音console_playback(resume)。否则机器人放音一直暂停着(收不到playback_result通知)。
业务打断(就是流程停止放音,或者播放一个新的声音实现打断。)
asrprogress_notify返回 console_playback(pause),或者asrmessage_notify返回播放新的声音,就会停止播放当前的声音。
怎么禁用打断功能
机器人放音的时候可以识别用户说话,但是不打断机器人放音:playback的allow_interrupt设置-1,关闭自动打断。asrprogress_notify返回 noop。 asrmessage_notif
如果playstate等于false(当前没放音),执行业务逻辑播放新的声音。asrmessage_notif如果playstate等于true(当前在放音,不处理),返回noop,并且把识别结果记录到flowdata,等paly_result的时候再处理识别结果。如果paly_result的时候检测放音过程是否有识别结果,如果有执行业务逻辑处理流程,如果没有返回wait.
放音的时候直接暂停asr, 自然也就不会打断了。playback的block_asr设置为-1.本次放音,禁用了asr,就可以了。有关系统方面问题请找博主一起交流学习吧。
噪音打断怎么解决
如果要完全避免噪音打断可以把自动打断关闭,使用关键词打断。如果要求不高可以把pause_play_ms设置大些,比如1000。playback新加了一个自动打断控制参数,可以设置本次机器人放音多久才启用自动打断。
怎么实现关键词打断
start_asr的pause_play_ms 设置 0 ,关闭自动打断
asrprogress_notify 的识别结果如果是关键词 返回 console_playback(pause),如果不是关键词 返回 noop
asrmessage_notify 的整句话识别结果如果匹配,直接播放新的声音文件,执行新的业务流程,如果不匹配, 判断playstate(户说话结束的时候,机器人是否也放音完成),playstate为true返回console_playback(resume),playstate为false,执行playback_result通知一样的流程。
playback_result 收到这个通知,说明声音播放完成,等待用户说话超时,asrstate为true是表示用户当前已经在说话, 可以返回noop,否则必须播放一个声音,提示用户说话。
多种打断方案集合使用流程
start_asr 开始asr,设置 pause_play_ms 为 200-1000之间 (设置自动打断时间)
playback wait设置 3000-5000,并且设置allow_interrupt动态修改自动打断时间,
asrprogress_notify 检查是否有关键词有关键词返回console_playback(pause),没关键词返回 noop
asrmessage_notify 根据识别结果,playms(用来判断 是否 机器人刚说话,用户也开始说话) ,playstate(用来判断 用户说话结束的时候,机器人是否也放音完成),等条件返回console_playback(resume)继续放音,或者返回playback播放一个新的声音。
playback_result asrstate为true是表示用户当前已经在说话, 可以返回noop,否则必须播放一个声音,提示用户说话。