mod_vad使用说明

介绍

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,比如放音的时候暂停ASR
uuid_console_asr <uuid> <cmd>

  • cmd 参数内容
    • pause 暂停asr
    • resume 恢复asr

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/abc@192.168.31.210
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/abc@192.168.31.210
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/abc@192.168.31.210
Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Event-Subclass: asrmessage
Event-Name: CUSTOM
asrtext: 4.第一句话。;5.第二句话。;6.第三句话。;
speakms: 3202
Channel-Name: sofia/external/abc@192.168.31.210
Unique-ID: 34a719ed-2f22-4349-b9ed-a3329ee875e2

说明

  • asrprogress 说话停顿min_speak_ms时间后返回的识别结果。
  • asrtextall 包含之前停顿的识别结果的组合。 格式是 录音序号.识别结果;这样组合多个识别结果。
  • asrelapse asr识别服务器消耗的时间,单位毫秒。
  • volumegain 音量标准化放大或者缩小的倍数。
  • recordms 录音时间,单位毫秒。
  • recordfile 录音序号