介绍
mod_vad是一个freeswitch的模块,实现VAD录音和放音支持打断,vad和asr集成,tts放音支持等。
vad
<min_speak_ms> <min_pause_ms> <recordfile> [<max_waiting_ms>] [max_recording_ms] [zoom] [playfile] [play_retry]
- min_speak_ms 检测到声音多久就认为开始说话
- min_pause_ms 检测到静音多久就认为说话停止
- recordfile 录音文件名
- max_waiting_ms 最大等待时间,就是多久没检测到声音就退出。
- max_recording_ms 最大录音长途
- zoom 录音音量放大或者缩小 百分比, 100就是放大1倍。200就是放大2倍。 -10 就是降低10%。
- playfile 放音文件,不需要放音可以不设置这个参数。
- play_retry 重播次数, 不重播设置0
通道变量
- vad_param_error 参数错误,最少需要
3个参数 - vad_max_recording_time 录音时间超过 max_recording_ms ,说话还没停止。
- vad_timeout 等待超过 max_waiting_ms 还没开始说话
- vad_createrecordfile_error 创建录音文件失败
dialpaln 使用例子
<extension name="public_did">
<condition field="destination_number" expression="^(999)$">
<action application = "answer" />
<action application="vad" data="100 1000 录音1.wav 5000 10000 0 欢迎.wav 3"/>
<action application="playback" data="录音1.wav" />
<action application="vad" data="100 1000 录音2.wav 5000 10000 0 asr处理结果.wav 3"/>
</condition>
</extension>
start_asr 说明
start_asr 是一个异步函数,只需要执行一次,启动后会一直进行VAD和ASR,直到调用sotp_asr
start_asr [<min_speak_ms>] [<max_speak_ms>] [<min_pause_ms>] [<max_pause_ms>] [<pause_play_ms>] [<threshold>] [<recordpath>] [<volume>]
- min_speak_ms 最小说话时间,默认值100,单位毫秒,说话时间小于这个值,会被认为是无效声音。
- max_speak_ms 最大说话时间,默认值10000,单位毫秒,说话时间超过这个值,就停止录音,直接提交ASR服务器识别。
- min_pause_ms 最小停顿时间,默认值300,单位毫秒,默认值用户停顿时间超过这个值,会提交到ASR识别。识别完成后发送asrprogress事件。 完成后的意思是 ASR服务器可能 300-800ms才返回识别接口。
- max_pause_ms 最大停顿时间,默认值600,单位毫秒,用户停顿时间超过这个值,认为一句话说完,所有识别完成后发送asrmessage事件。所有识别完成后的意思是,所有提交到asr服务器的识别结果都返回了。 注意 min_pause_ms 必须大于min_pause_ms。
- pause_play_ms 触发暂停放音时间,默认值0(不开启自动打断),单位毫秒,建议设置200-1000,用户说话时间超过这个值,就暂停放音。 有时候用户一直持续说话,中间没停顿,所以还没提交到ASR服务器识别,不能使用关键词打断,可以先暂停放音。
- threshold VAD阈值,默认0,建议不要设置,如果一定要设置,建议 2000以下的值。
- recordpath 录音文件路径,如果不设置,就不会把录音存到文件,如果设置了会保存录音到文件,文件格式是 recordpath/被叫号码Unique-ID序号.wav
- volume 音量标准化的值。0-100,0不使用音量标准化,其他值 音量把录音音量调整到这个值后,再提交ASR识别。
- filter_level 防止干扰等级。0-1.0之间,建议 0.3。
- asr_configure_filename asr配置文件名。可以不同呼叫使用不同的ASR配置。
custom_playback 说明
custom_playback <file> [<wait>] [<retry>] [<allow_interrupt>]
- file 放音文件,支持URL,和多文件放音。
- wait 单位毫秒,放音结束后等待时间。用于等待用户说话。
- retry 重播次数。就是wait时间内用户不说话,就重新播放声音。
- block_asr -1 放音的时候不识别,放音等待用户说话的时候开启识别,比如 playback(file=”1.wav”,wait=5000) 就是播放 1.wav的时候不识别 等待用户时候的时候开始识别。
block_asr 0 就是现在的模式 ,一直识别
block_asr >0 单位毫秒,放音前面多少秒不识别。 - allow_interrupt 本次放音是否允许自动打断,0允许,-1不允许,大于0 播放多久才允许自动打断。 默认自动打断时间是 start_asr的pause_play_ms参数指定的。
stop_asr
停止ASR。
API uuid_console_playback
用于播放控制,用户说话开始,先暂停播放,如果说的是无效声音,可以恢复播放。uuid_console_playback <uuid> <cmd>
- cmd 参数内容
- pause 暂停播放
- resume 恢复播放
- stop 停止播放
API uuid_console_asr
uuid_console_asr 用于暂停ASR,比如放音的时候暂停ASRuuid_console_asr <uuid> <cmd>
- cmd 参数内容
- pause 暂停asr
- resume 恢复asr
esl 订阅 事件
CUSTOM asrprogress asrmessage
下面的esl消息,为了方便查看我去除了无关字段
|
说明
- asrprogress 说话停顿min_speak_ms时间后返回的识别结果。
- asrtextall 包含之前停顿的识别结果的组合。 格式是 录音序号.识别结果;这样组合多个识别结果。
- asrelapse asr识别服务器消耗的时间,单位毫秒。
- volumegain 音量标准化放大或者缩小的倍数。
- recordms 录音时间,单位毫秒。
- recordfile 录音序号