![]() |
Home page |
Mailing list |
Docs
Asterisk developer's documentation :: Codename Pineapple
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 */