PBXs and the public telephone network use audible call progress tones to indicate the progress of a call. Typical call progress tones include dial, busy, and ringback tones.
By listening to these tones, a caller can determine the state of an outbound call. For example, when the caller hears a ringback tone, he/she waits for the remote number to be answered. If the call is not answered within a reasonable time period, the caller abandons the call and tries again later.
Like humans, when a voice card hears a busy tone, it returns a code to the Dial control to indicate that a tone was detected. The program then performs the appropriate action.
Voice cards usually recognize call progress tones in two ways:
Cadence
Each tone has a pattern of alternating sound and silence, called cadence. Because call progress tones are fairly uniform, it is generally possible to distinguish between different types of call progress tones on the basis of cadence alone. For example, most busy tones alternate 500 milliseconds of sound with 500 milliseconds of silence.
Pitch
Each tone also has a specific pitch, which is composed of one or more frequencies. A tone with one frequency is called a single-frequency tone. A tone with two frequencies is called a double-frequency tone.
By detecting both cadence and frequency, two tones can be distinguished (for example, the busy tone from a PBX and the busy tone from the public telephone network).
The following table lists three tones commonly heard over the North American public phone network:
Tone |
Frequencies |
Sound |
Silence |
Fast busy |
480 Hz, 620 Hz |
250 msec |
250 msec |
Busy |
480 Hz, 620 Hz |
500 msec |
500 msec |
Ringback |
440 Hz, 480 Hz |
2 sec |
4 sec |
Voice cards can listen to call progress tones and recognize the state of a call. To do this, the voice card must know in advance which tones to expect and what these tones mean. When connected to a North American telephone system, most cards do not need any special training. However when connected to a PBX or to a telephone system in another country, the card needs to be trained to recognize the tones correctly.
During call progress analysis, the voice card attempts to detect the frequencies and establish the cadence of a call progress tone. Generally, when sound is present, the card first attempts to detect the frequencies defined in the defined tone tables. After recognizing a tone's frequencies, the voice card tries to establish the tone's cadence. If the voice card can establish a tone's cadence, the driver compares the detected tone to the tones defined in the table. The driver recognizes the detected tone if the tone's characteristics match the parameters for a tone in the table.
If the detected tone is not a ringback tone, the voice card notifies VBVoicethat the tone has been detected. This notification normally results in the call being moved from a Dial control to the control that handles this event.
If the detected tone is a ringback tone, the voice card continues to monitor the call for a defined number of cadences (ringbacks). If the tone is interrupted, the voice card assumes that the call has been answered and notifies the application program. If the voice card does not detect an answer within the defined number of cadences, the driver notifies the application program of a No Answer condition.
Dialogic provides a utility PBXpert/32 which is used to customize call progress analysis with their 32-bit drivers. Tones can also be defined using INI file settings. The drivers default to performing call progress analysis over the (North American) telephone company lines, but can be reset for other types of calls using INI file settings.
The number of rings before a No Answer condition is returned is controlled by the call progress parameters for your card. Refer to your card's documentation for this information.
When a caller hangs up, loop current on the line is normally dropped momentarily to signal this event. If the voice board is connected directly to the phone line, it will detect the loop drop and follow its Disconnect procedures.
When the phone line is hooked to a PBX, the PBX may not provide a loop current drop to the card. This can present problems in determining when a caller has hung up. However, most PBXs do provide an audible tone when a call is disconnected. Global Tone detection can be used to learn this tone ("fastbusy") and report it as a loop current drop.
A fastbusy tone is interpreted by VBVoice as a disconnect. In order to set one of the tones to fastbusy, there is a setting called "fastbusy".
Setting fastbusy = ToneID - 1 would make VBVoice report a disconnect whenever this ToneID is detected.
Note: Even though the tone numbering is 1 based, fastbusy uses 0 based tones. So, fastbusy=2 means Tone_3 is detected as fastbusy and is treated as a disconnect. The default for fastbusy is -1, meaning none of the global tones is treated as fast busy.
Global tone detection is normally used to aid in detecting a far-end disconnect when your voice card is positioned behind a PBX. The tones are specified using entries in the [Dialogic] section of VBVoice.INI. There are four different types of tones that can be created. These are:
Single tone
Dual tone
Single tone with cadence
Dual tone with cadence
The tones would appear in the VBVoice.INI file as:
Tone_# = <tone>, <deviation>, <leading or trailing>
Tone_# = <tone 1>, <deviation for tone 1>, <tone 2>, <deviation for tone 2>, <leading or trailing>
Tone_# = <tone>, <deviation>, <ontime>, <on deviation>, <offtime>, <off deviation>, <repeat>
Rather than detecting a signal immediately, an application may want to wait for a period of time (debounce time) before detecting the signal. A tone must be present at a given frequency and for a period of time (debounce time) before it is detected. The debounce time is specified using the 'ontime' and 'on deviation' parameters, and by setting the 'off time', 'off deviation' and 'repeat' parameters to 0.
For 'ontime', specify 1/2 of the desired debounce time in tens of milliseconds (i.e. a value of 10 represents 100 ms) ; for 'on deviation', specify (-1/2) of the desired debounce time ; for 'offtime' specify 0, for 'off deviation' specify 0 and for repeat specify 0.
Single Tone:
Tone_# = <tone 1>, <deviation 1>, <on time>, <on time deviation>, <off time>, <off time deviation>, <repeat>
e.g.: 900Hz with 4000ms of debounce detection
Tone_# = 900,100,200,-200,0,0,0
Dual Tone:
Tone_# = <tone 1>, <deviation 1>, <tone 2>, <deviation 2>, <on time>, <on time deviation>, <off time>, <off time deviation>, <repeat>
eg: 900/1700Hz with 8000ms of debounce detection
Tone_#= 900,100,1700,100,400,-400,0,0,0
In the tone definition above, the # should be replaced with a number. The first tone listed should be number 1, and each tone in sequence should be incremented by 1. A fax tone would be defined as: Tone_1=1100,50,leading. This would be a an 1100hz frequency, with a 50hz deviation (meaning 1050hz to 1150hz is considered acceptable), detected on the leading edge (or as it starts).
A fastbusy tone could be set as:
Tone_2=500,200,525,175,55,40,55,40,4
This would be a 500hz first frequency, with a deviation of 200hz. The second frequency is 525hz, with a deviation of 175hz. The cadence is 550ms on, 550 off, each with a 400ms deviation, and it must repeat four times to be considered valid.
Setting fastbusy=number of tone would make VBVoice automatically interpret this tone as a disconnect.
Dialogic manufactures cards that are country specific. Call progress analysis defaults to the tones used by the country for which the board was manufactured. When a card is used in a country other than that for which it was manufactured, or used behind a PBX, the call progress tones must be specified so that the Dialogic card can detect them.
Typically, hardware vendors provide their own utility programs for training their cards. Dialogic provides a utility called PBXpert; for more information, please review the PBExpert documentation, which may be found in the Dialogic Book Online, optionally installed with Dialogic System Release software.
If not using PBXpert, both Call Progress Analysis and Global Tone Detection can be specified using settings in the VBVoice.INI file, [Dialogic] section. To do this you will need to know the Frequency (or frequencies) of the tone, as well as its cadence (silence and non-silence times).