Asterisk.org: Developer Documentation (28 Oct 2009)

Wed Oct 28 15:47:53 2009

## Asterisk developer's documentation

# dsp.h

Go to the documentation of this file.

    00001 /*
    00002  * Asterisk -- An open source telephony toolkit.
    00003  *
    00004  * Copyright (C) 1999 - 2005, Digium, Inc.
    00005  *
    00006  * Mark Spencer <markster@digium.com>
    00007  *
    00008  * See http://www.asterisk.org for more information about
    00009  * the Asterisk project. Please do not directly contact
    00010  * any of the maintainers of this project for assistance;
    00011  * the project provides a web site, mailing lists and IRC
    00012  * channels for your use.
    00013  *
    00014  * This program is free software, distributed under the terms of
    00015  * the GNU General Public License Version 2. See the LICENSE file
    00016  * at the top of the source tree.
    00017  */
    00018
    00019 /*! \file
    00020  * \brief Convenient Signal Processing routines
    00021  */
    00022
    00023 #ifndef _ASTERISK_DSP_H
    00024 #define _ASTERISK_DSP_H
    00025
    00026 #define DSP_FEATURE_SILENCE_SUPPRESS   (1 << 0)
    00027 #define DSP_FEATURE_BUSY_DETECT     (1 << 1)
    00028 #define DSP_FEATURE_DTMF_DETECT     (1 << 3)
    00029 #define DSP_FEATURE_FAX_DETECT      (1 << 4)
    00030
    00031 #define  DSP_DIGITMODE_DTMF         0           /* Detect DTMF digits */
    00032 #define DSP_DIGITMODE_MF         1           /* Detect MF digits */
    00033
    00034 #define DSP_DIGITMODE_NOQUELCH      (1 << 8)    /* Do not quelch DTMF from in-band */
    00035 #define DSP_DIGITMODE_MUTECONF      (1 << 9)    /* Mute conference */
    00036 #define DSP_DIGITMODE_MUTEMAX    (1 << 10)      /* Delay audio by a frame to try to extra quelch */
    00037 #define DSP_DIGITMODE_RELAXDTMF     (1 << 11)      /* "Radio" mode (relaxed DTMF) */
    00038
    00039 #define DSP_PROGRESS_TALK     (1 << 16)      /* Enable talk detection */
    00040 #define DSP_PROGRESS_RINGING     (1 << 17)      /* Enable calling tone detection */
    00041 #define DSP_PROGRESS_BUSY     (1 << 18)      /* Enable busy tone detection */
    00042 #define DSP_PROGRESS_CONGESTION     (1 << 19)      /* Enable congestion tone detection */
    00043 #define DSP_FEATURE_CALL_PROGRESS   (DSP_PROGRESS_TALK | DSP_PROGRESS_RINGING | DSP_PROGRESS_BUSY | DSP_PROGRESS_CONGESTION)
    00044
    00045 #define DSP_TONE_STATE_SILENCE  0
    00046 #define DSP_TONE_STATE_RINGING  1
    00047 #define DSP_TONE_STATE_DIALTONE 2
    00048 #define DSP_TONE_STATE_TALKING  3
    00049 #define DSP_TONE_STATE_BUSY     4
    00050 #define DSP_TONE_STATE_SPECIAL1  5
    00051 #define DSP_TONE_STATE_SPECIAL2 6
    00052 #define DSP_TONE_STATE_SPECIAL3 7
    00053 #define DSP_TONE_STATE_HUNGUP    8
    00054
    00055 struct ast_dsp;
    00056
    00057 struct ast_dsp *ast_dsp_new(void);
    00058 void ast_dsp_free(struct ast_dsp *dsp);
    00059
    00060 /*! \brief Set threshold value for silence */
    00061 void ast_dsp_set_threshold(struct ast_dsp *dsp, int threshold);
    00062
    00063 /*! \brief Set number of required cadences for busy */
    00064 void ast_dsp_set_busy_count(struct ast_dsp *dsp, int cadences);
    00065
    00066 /*! \brief Set expected lengths of the busy tone */
    00067 void ast_dsp_set_busy_pattern(struct ast_dsp *dsp, int tonelength, int quietlength);
    00068
    00069 /*! \brief Scans for progress indication in audio */
    00070 int ast_dsp_call_progress(struct ast_dsp *dsp, struct ast_frame *inf);
    00071
    00072 /*! \brief Set zone for doing progress detection */
    00073 int ast_dsp_set_call_progress_zone(struct ast_dsp *dsp, char *zone);
    00074
    00075 /*! \brief Return AST_FRAME_NULL frames when there is silence, AST_FRAME_BUSY on
    00076    busies, and call progress, all dependent upon which features are enabled */
    00077 struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp, struct ast_frame *inf);
    00078
    00079 /*! \brief Return non-zero if this is silence.  Updates "totalsilence" with the total
    00080    number of seconds of silence  */
    00081 int ast_dsp_silence(struct ast_dsp *dsp, struct ast_frame *f, int *totalsilence);
    00082
    00083 /*! \brief Return non-zero if historically this should be a busy, request that
    00084   ast_dsp_silence has already been called */
    00085 int ast_dsp_busydetect(struct ast_dsp *dsp);
    00086
    00087 /*! \brief Return non-zero if DTMF hit was found */
    00088 int ast_dsp_digitdetect(struct ast_dsp *dsp, struct ast_frame *f);
    00089
    00090 /*! \brief Reset total silence count */
    00091 void ast_dsp_reset(struct ast_dsp *dsp);
    00092
    00093 /*! \brief Reset DTMF detector */
    00094 void ast_dsp_digitreset(struct ast_dsp *dsp);
    00095
    00096 /*! \brief Select feature set */
    00097 void ast_dsp_set_features(struct ast_dsp *dsp, int features);
    00098
    00099 /*! \brief Get pending DTMF/MF digits */
    00100 int ast_dsp_getdigits(struct ast_dsp *dsp, char *buf, int max);
    00101
    00102 /*! \brief Set digit mode */
    00103 int ast_dsp_digitmode(struct ast_dsp *dsp, int digitmode);
    00104
    00105 /*! \brief Get tstate (Tone State) */
    00106 int ast_dsp_get_tstate(struct ast_dsp *dsp);
    00107
    00108 /*! \brief Get tcount (Threshold counter) */
    00109 int ast_dsp_get_tcount(struct ast_dsp *dsp);
    00110
    00111 #endif /* _ASTERISK_DSP_H */