介绍
mod_vad是一个freeswitch的模块,实现VAD录音和放音支持打断。
下载
安装
- libmyauth.so copy 到 fs/ib 目录 一般是 /usr/local/freeswitch/lib
- mod_vad.so copy 到fs/mod 目录/usr/local/freeswitch/mod
- machinecode chmod +x machinecode 然后执行他,获取机器码
- 发生机器码到 [email protected],申请授权码,授权文件 放到 /etc/vad.license 文件内
使用
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 触发暂停放音时间,默认值1000,单位毫秒,建议设置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>]
- file 放音文件,支持URL,和多文件放音。
- wait 单位毫秒,放音结束后等待时间。用于等待用户说话。
- retry 重播次数。就是wait时间内用户不说话,就重新播放声音。
stop_asr
停止ASR。
API uuid_console_playback
用于播放控制,用户说话开始,先暂停播放,如果说的是无效声音,可以恢复播放。 uuid_console_playback <uuid> <cmd>
- cmd 参数内容
- pause 暂停播放
- resume 恢复播放
- stop 停止播放
esl 订阅 事件
CUSTOM asrprogress asrmessage
下面的esl消息,为了方便查看我去除了无关字段
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Event-Subclass: asrprogress Event-Name: CUSTOM asrtype: aiui asrtext: 第一句话。 asrtextall: 4.第一句话。; asrelapse: 594 asrerror : 0 volumegain: 0.984585 recordms: 1175 recordfile: 4 Channel-Name: sofia/external/[email protected] Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Event-Subclass: asrprogress Event-Name: CUSTOM asrtype: aiui asrtext: 第二句话。 asrtextall: 4.第一句话。;5.第二句话。; asrerror : 0 asrelapse: 360 volumegain: 1.396321 recordms: 1169 recordfile: 5 Channel-Name: sofia/external/[email protected] Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Event-Subclass: asrprogress Event-Name: CUSTOM asrtype: aiui asrtext: 第三句话。 asrtextall: 4.第一句话。;5.第二句话。;6.第三句话。; asrelapse: 359 asrerror : 0 volumegain: 1.567299 recordms: 1208 recordfile: 6 Channel-Name: sofia/external/[email protected] Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Event-Subclass: asrmessage Event-Name: CUSTOM asrtext: 4.第一句话。;5.第二句话。;6.第三句话。; speakms: 3202 Channel-Name: sofia/external/[email protected] Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2
说明
- asrprogress 说话停顿min_speak_ms时间后返回的识别结果。
- asrtextall 包含之前停顿的识别结果的组合。 格式是 录音序号.识别结果;这样组合多个识别结果。
- asrelapse asr识别服务器消耗的时间,单位毫秒。
- volumegain 音量标准化放大或者缩小的倍数。
- recordms 录音时间,单位毫秒。
- recordfile 录音序号