From cf67dbefd4b48ede903e04ee549e9357275b742f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Sun, 19 Feb 2006 21:01:55 +0000 Subject: [PATCH] make teletone use all doubles git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@631 d0543943-73ff-0310-b7d9-9358b9ac24b2 --- libs/libteletone/Makefile.am | 4 +-- libs/libteletone/Makefile.in | 3 ++ libs/libteletone/src/libteletone.h | 4 ++- libs/libteletone/src/libteletone_detect.c | 34 ++++++++++----------- libs/libteletone/src/libteletone_detect.h | 15 ++++----- libs/libteletone/src/libteletone_generate.h | 2 +- 6 files changed, 34 insertions(+), 28 deletions(-) diff --git a/libs/libteletone/Makefile.am b/libs/libteletone/Makefile.am index 06abcf0fb4..8b1212473b 100644 --- a/libs/libteletone/Makefile.am +++ b/libs/libteletone/Makefile.am @@ -19,6 +19,6 @@ library_include_HEADERS = src/libteletone.h src/libteletone_detect.h src/libtele - - +dox: + cd docs && doxygen $(PWD)/docs/Doxygen.conf diff --git a/libs/libteletone/Makefile.in b/libs/libteletone/Makefile.in index dad70598e2..22beade073 100644 --- a/libs/libteletone/Makefile.in +++ b/libs/libteletone/Makefile.in @@ -731,6 +731,9 @@ uninstall-info: uninstall-info-recursive uninstall-info-am uninstall-libLTLIBRARIES \ uninstall-library_includeHEADERS + +dox: + cd docs && doxygen $(PWD)/docs/Doxygen.conf # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: diff --git a/libs/libteletone/src/libteletone.h b/libs/libteletone/src/libteletone.h index 5bd0e0e6d6..d206ae6047 100644 --- a/libs/libteletone/src/libteletone.h +++ b/libs/libteletone/src/libteletone.h @@ -39,6 +39,8 @@ extern "C" { #define TELETONE_MAX_TONES 6 #define TELETONE_TONE_RANGE 127 +typedef double teletone_process_t; + /*! \file libteletone.h \brief Top level include file @@ -48,7 +50,7 @@ extern "C" { /*! \brief An abstraction to store a tone mapping */ typedef struct { /*! An array of tone frequencies */ - double freqs[TELETONE_MAX_TONES]; + teletone_process_t freqs[TELETONE_MAX_TONES]; } teletone_tone_map_t; diff --git a/libs/libteletone/src/libteletone_detect.c b/libs/libteletone/src/libteletone_detect.c index 2b8cb0396b..148c7aa70f 100644 --- a/libs/libteletone/src/libteletone_detect.c +++ b/libs/libteletone/src/libteletone_detect.c @@ -63,8 +63,8 @@ static teletone_detection_descriptor_t dtmf_detect_col[GRID_FACTOR]; static teletone_detection_descriptor_t dtmf_detect_row_2nd[GRID_FACTOR]; static teletone_detection_descriptor_t dtmf_detect_col_2nd[GRID_FACTOR]; -static float dtmf_row[] = {697.0, 770.0, 852.0, 941.0}; -static float dtmf_col[] = {1209.0, 1336.0, 1477.0, 1633.0}; +static teletone_process_t dtmf_row[] = {697.0, 770.0, 852.0, 941.0}; +static teletone_process_t dtmf_col[] = {1209.0, 1336.0, 1477.0, 1633.0}; static char dtmf_positions[] = "123A" "456B" "789C" "*0#D"; @@ -79,7 +79,7 @@ void teletone_goertzel_update(teletone_goertzel_state_t *goertzel_state, int samples) { int i; - float v1; + teletone_process_t v1; for (i = 0; i < samples; i++) { v1 = goertzel_state->v2; @@ -88,7 +88,7 @@ void teletone_goertzel_update(teletone_goertzel_state_t *goertzel_state, } } -float teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state) +teletone_process_t teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state) { return goertzel_state->v3 * goertzel_state->v3 + goertzel_state->v2 * goertzel_state->v2 - goertzel_state->v2 * goertzel_state->v3 * goertzel_state->fac; } @@ -96,21 +96,21 @@ float teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state) void teletone_dtmf_detect_init (teletone_dtmf_detect_state_t *dtmf_detect_state, int sample_rate) { int i; - float theta; + teletone_process_t theta; dtmf_detect_state->hit1 = dtmf_detect_state->hit2 = 0; for (i = 0; i < GRID_FACTOR; i++) { - theta = M_TWO_PI*(dtmf_row[i]/(float)sample_rate); + theta = M_TWO_PI*(dtmf_row[i]/(teletone_process_t)sample_rate); dtmf_detect_row[i].fac = 2.0*cos(theta); - theta = M_TWO_PI*(dtmf_col[i]/(float)sample_rate); + theta = M_TWO_PI*(dtmf_col[i]/(teletone_process_t)sample_rate); dtmf_detect_col[i].fac = 2.0*cos(theta); - theta = M_TWO_PI*(dtmf_row[i]*2.0/(float)sample_rate); + theta = M_TWO_PI*(dtmf_row[i]*2.0/(teletone_process_t)sample_rate); dtmf_detect_row_2nd[i].fac = 2.0*cos(theta); - theta = M_TWO_PI*(dtmf_col[i]*2.0/(float)sample_rate); + theta = M_TWO_PI*(dtmf_col[i]*2.0/(teletone_process_t)sample_rate); dtmf_detect_col_2nd[i].fac = 2.0*cos(theta); goertzel_init (&dtmf_detect_state->row_out[i], &dtmf_detect_row[i]); @@ -129,7 +129,7 @@ void teletone_dtmf_detect_init (teletone_dtmf_detect_state_t *dtmf_detect_state, void teletone_multi_tone_init(teletone_multi_tone_t *mt, teletone_tone_map_t *map) { - float theta = 0; + teletone_process_t theta = 0; int x = 0; if(!mt->min_samples) { @@ -157,7 +157,7 @@ void teletone_multi_tone_init(teletone_multi_tone_t *mt, teletone_tone_map_t *ma break; } mt->tone_count++; - theta = M_TWO_PI*(map->freqs[x]/(float)mt->sample_rate); + theta = M_TWO_PI*(map->freqs[x]/(teletone_process_t)mt->sample_rate); mt->tdd[x].fac = 2.0 * cos(theta); goertzel_init (&mt->gs[x], &mt->tdd[x]); goertzel_init (&mt->gs2[x], &mt->tdd[x]); @@ -170,8 +170,8 @@ int teletone_multi_tone_detect (teletone_multi_tone_t *mt, int samples) { int sample, limit, j, x = 0; - float v1, famp; - float eng_sum = 0, eng_all[TELETONE_MAX_TONES]; + teletone_process_t v1, famp; + teletone_process_t eng_sum = 0, eng_all[TELETONE_MAX_TONES]; int gtest = 0, see_hit = 0; for (sample = 0; sample < samples; sample = limit) { @@ -256,10 +256,10 @@ int teletone_dtmf_detect (teletone_dtmf_detect_state_t *dtmf_detect_state, int16_t sample_buffer[], int samples) { - float row_energy[GRID_FACTOR]; - float col_energy[GRID_FACTOR]; - float famp; - float v1; + teletone_process_t row_energy[GRID_FACTOR]; + teletone_process_t col_energy[GRID_FACTOR]; + teletone_process_t famp; + teletone_process_t v1; int i; int j; int sample; diff --git a/libs/libteletone/src/libteletone_detect.h b/libs/libteletone/src/libteletone_detect.h index 2edbd43719..db60b2dd4d 100644 --- a/libs/libteletone/src/libteletone_detect.h +++ b/libs/libteletone/src/libteletone_detect.h @@ -92,9 +92,9 @@ extern "C" { /*! \brief A continer for the elements of a Goertzel Algorithm (The names are from his formula) */ typedef struct { - float v2; - float v3; - float fac; + teletone_process_t v2; + teletone_process_t v3; + teletone_process_t fac; } teletone_goertzel_state_t; /*! \brief A container for a DTMF detection state.*/ @@ -109,7 +109,7 @@ typedef struct { teletone_goertzel_state_t col_out[GRID_FACTOR]; teletone_goertzel_state_t row_out2nd[GRID_FACTOR]; teletone_goertzel_state_t col_out2nd[GRID_FACTOR]; - float energy; + teletone_process_t energy; int current_sample; char digits[TELETONE_MAX_DTMF_DIGITS + 1]; @@ -121,7 +121,7 @@ typedef struct { /*! \brief An abstraction to store the coefficient of a tone frequency */ typedef struct { - float fac; + teletone_process_t fac; } teletone_detection_descriptor_t; /*! \brief A container for a single multi-tone detection @@ -136,7 +136,7 @@ typedef struct { teletone_goertzel_state_t gs2[TELETONE_MAX_TONES]; int tone_count; - float energy; + teletone_process_t energy; int current_sample; int min_samples; @@ -173,6 +173,7 @@ int teletone_multi_tone_detect (teletone_multi_tone_t *mt, /*! \brief Initilize a DTMF detection state object + \param dtmf_detect_state the DTMF detection state to initilize \param sample_rate the desired sample rate */ void teletone_dtmf_detect_init (teletone_dtmf_detect_state_t *dtmf_detect_state, int sample_rate); @@ -213,7 +214,7 @@ void teletone_goertzel_update(teletone_goertzel_state_t *goertzel_state, \param goertzel_state the goertzel state to retrieve from \return the computed value for consideration in furthur audio tests */ -float teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state); +teletone_process_t teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state); diff --git a/libs/libteletone/src/libteletone_generate.h b/libs/libteletone/src/libteletone_generate.h index 6177e01002..3ccab1cb0c 100644 --- a/libs/libteletone/src/libteletone_generate.h +++ b/libs/libteletone/src/libteletone_generate.h @@ -55,7 +55,6 @@ extern "C" { */ typedef short teletone_audio_t; -typedef float teletone_process_t; struct teletone_generation_session; typedef int (*tone_handler)(struct teletone_generation_session *ts, teletone_tone_map_t *map); @@ -128,6 +127,7 @@ int teletone_set_map(teletone_tone_map_t *map, ...); \param ts the tone generation session to initilize \param buflen the size of the buffer(in samples) to dynamically allocate \param handler a callback function to execute when a tone generation instruction is complete + \param user_data optional user data to send \return 0 */ int teletone_init_session(teletone_generation_session_t *ts, int buflen, tone_handler handler, void *user_data);