Inband DTMF detectors in mod_spandsp can detect duration in addition to frequency. The mod_spandsp detector is more robust than the legacy teletone detector in the FreeSWITCH core.
Detect inband dtmf on the session
<action application="spandsp_start_dtmf"/>
Stop detecting inband dtmf
<action application="spandsp_stop_dtmf"/>
mod_spandsp provides the tools to create a call progress tone detector. By accounting for cadence in addition to frequency, this call progress detector can distinguish between North American BUSY and REORDER, which only differ in cadence.
conf/autoload_configs/spandsp.conf.xml defines the tone detector descriptors. Each descriptor defines a named grouping of tones to detect. When starting the tone detector, you specify the group of tones you wish to detect.
This is a sample configuration for detecting some call progress tones in North America:
<configuration name="spandsp.conf" description="Tone detector descriptors"> <descriptors> <!-- These tones are defined in Annex to ITU Operational Bulletin No. 781 - 1.II.2003 --> <!-- Various Tones Used in National Networks (According to ITU-T Recommendation E.180)(03/1998) --> <!-- North America --> <descriptor name="1"> <tone name="CED_TONE"> <element freq1="2100" freq2="0" min="500" max="0"/> </tone> <tone name="SIT"> <element freq1="950" freq2="0" min="256" max="400"/> <element freq1="1400" freq2="0" min="256" max="400"/> <element freq1="1800" freq2="0" min="256" max="400"/> </tone> <tone name="REORDER_TONE"> <element freq1="480" freq2="620" min="224" max="272"/> <element freq1="0" freq2="0" min="224" max="272"/> </tone> <tone name="BUSY_TONE"> <element freq1="480" freq2="620" min="464" max="516"/> <element freq1="0" freq2="0" min="464" max="516"/> </tone> </descriptor> </descriptors> </configuration>
Each descriptor defines the tones to detect. Each tone is composed of elements defining the frequencies and cadence of the tone. The tone name will be reported in the DETECTED_TONE event. Each element can be composed of 0 (silence), 1, or 2 frequencies. min and max define the minimum and maximum element durations in milliseconds.
It takes much trial and error to figure out the tone configuration that works well without introducing talk-off. mod_spandsp_dsp.c can be edited to increase the logging level to report additional detection information to assist in this process. To get this additional information, change the globals.debug value in do_config() to 2. Recompile the module and re-install it.
The "Tone report" log will tell you when a tone was detected. The "Tone segment" log will tell you each segment that is detected. The f1 and f2 values identify which frequencies were matched in that segment.
Start background tone detection with cadence
<!-- start detection for North American call progress tones --> <action application="start_tone_detect" data="1"/>
Stop background tone detection with cadence
<action application="stop_tone_detect"/>
This event is fired when the tone detector detects a tone.
The following headers are set:
Detected-Tone Unique-ID
The Detected-Tone header will contain the name of the tone, as specified in the configuration file. The Unique-ID will contain the session UUID.
http://wiki.freeswitch.org/wiki/Mod_spandsp#min_dup_digit_spacing_ms
============================================
mod_spandsp offers better tone detection than what is provided by default in the FreeSWITCH core.
Inband DTMF detectors in mod_spandsp can detect duration in addition to frequency. The mod_spandsp detector is more robust than the legacy teletone detector in the FreeSWITCH core.
Duplicate inband DTMF that starts sooner than this time will be ignored. That is, this is the minimum gap from the end of the first digit and the start of the repeated digit required for two digits to be detected. This value is 0 by default. Set this variable prior to executing spandsp_start_dtmf.
Usage:
<action application="set" data="min_dup_digit_spacing_ms=40"/> <action application="spandsp_start_dtmf" />
Sets the threshold parameter in the spandsp DTMF detector. Threshold is set to -42 dBm0 by default. Set this variable prior to executing spandsp_start_dtmf.
Usage:
<action application="set" data="spandsp_dtmf_rx_threshold=-42"/> <action application="spandsp_start_dtmf" />
Sets the twist parameter in the spandsp DTMF detector. Twist is set to 8 dB by default. Set this variable prior to executing spandsp_start_dtmf.
Usage:
<action application="set" data="spandsp_dtmf_rx_twist=8"/> <action application="spandsp_start_dtmf" />
Sets the reverse twist setting in the spandsp DTMF detector. Reverse twist is set to 4 dB by default. This value can be safely increased up to 6 or 7 without a significant increase in talk-off to allow DTMFs that exceed this threshold to be detected. Set this variable prior to executing spandsp_start_dtmf.
Usage:
<action application="set" data="spandsp_dtmf_rx_reverse_twist=6"/> <action application="spandsp_start_dtmf" />
Sets the filter dialtone parameter in the spandsp DTMF detector. Dialtone filtering is disabled by default. Set this variable prior to executing spandsp_start_dtmf.
Usage:
<action application="set" data="spandsp_dtmf_rx_filter_dialtone=true"/> <action application="spandsp_start_dtmf" />
Detect inband dtmf on the session
<action application="spandsp_start_dtmf"/>
Stop detecting inband dtmf
<action application="spandsp_stop_dtmf"/>