diff options
-rwxr-xr-x | Makefile | 18 | ||||
-rwxr-xr-x | apps/app_agi.c | 27 | ||||
-rwxr-xr-x | asterisk.c | 1 | ||||
-rwxr-xr-x | configs/logger.conf.sample | 5 | ||||
-rwxr-xr-x | include/asterisk/say.h | 4 | ||||
-rwxr-xr-x | pbx.c | 26 | ||||
-rwxr-xr-x | say.c | 314 | ||||
-rwxr-xr-x | sounds.txt | 134 | ||||
-rwxr-xr-x | sounds/letters/a.gsm | bin | 0 -> 825 bytes | |||
-rwxr-xr-x | sounds/letters/at.gsm | bin | 0 -> 858 bytes | |||
-rwxr-xr-x | sounds/letters/b.gsm | bin | 0 -> 990 bytes | |||
-rwxr-xr-x | sounds/letters/c.gsm | bin | 0 -> 1023 bytes | |||
-rwxr-xr-x | sounds/letters/d.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/letters/dash.gsm | bin | 0 -> 1221 bytes | |||
-rwxr-xr-x | sounds/letters/dollar.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/letters/dot.gsm | bin | 0 -> 990 bytes | |||
-rwxr-xr-x | sounds/letters/e.gsm | bin | 0 -> 990 bytes | |||
-rwxr-xr-x | sounds/letters/equals.gsm | bin | 0 -> 1386 bytes | |||
-rwxr-xr-x | sounds/letters/exclaimation-point.gsm | bin | 0 -> 2442 bytes | |||
-rwxr-xr-x | sounds/letters/f.gsm | bin | 0 -> 957 bytes | |||
-rwxr-xr-x | sounds/letters/g.gsm | bin | 0 -> 1155 bytes | |||
-rwxr-xr-x | sounds/letters/h.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/letters/i.gsm | bin | 0 -> 990 bytes | |||
-rwxr-xr-x | sounds/letters/j.gsm | bin | 0 -> 1155 bytes | |||
-rwxr-xr-x | sounds/letters/k.gsm | bin | 0 -> 1056 bytes | |||
-rwxr-xr-x | sounds/letters/l.gsm | bin | 0 -> 924 bytes | |||
-rwxr-xr-x | sounds/letters/m.gsm | bin | 0 -> 825 bytes | |||
-rwxr-xr-x | sounds/letters/n.gsm | bin | 0 -> 792 bytes | |||
-rwxr-xr-x | sounds/letters/o.gsm | bin | 0 -> 891 bytes | |||
-rwxr-xr-x | sounds/letters/p.gsm | bin | 0 -> 891 bytes | |||
-rwxr-xr-x | sounds/letters/plus.gsm | bin | 0 -> 957 bytes | |||
-rwxr-xr-x | sounds/letters/q.gsm | bin | 0 -> 957 bytes | |||
-rwxr-xr-x | sounds/letters/r.gsm | bin | 0 -> 924 bytes | |||
-rwxr-xr-x | sounds/letters/s.gsm | bin | 0 -> 825 bytes | |||
-rwxr-xr-x | sounds/letters/slash.gsm | bin | 0 -> 1353 bytes | |||
-rwxr-xr-x | sounds/letters/space.gsm | bin | 0 -> 1320 bytes | |||
-rwxr-xr-x | sounds/letters/t.gsm | bin | 0 -> 792 bytes | |||
-rwxr-xr-x | sounds/letters/u.gsm | bin | 0 -> 1023 bytes | |||
-rwxr-xr-x | sounds/letters/v.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/letters/w.gsm | bin | 0 -> 1419 bytes | |||
-rwxr-xr-x | sounds/letters/x.gsm | bin | 0 -> 924 bytes | |||
-rwxr-xr-x | sounds/letters/y.gsm | bin | 0 -> 1155 bytes | |||
-rwxr-xr-x | sounds/letters/z.gsm | bin | 0 -> 1023 bytes | |||
-rwxr-xr-x | sounds/letters/zed.gsm | bin | 0 -> 1056 bytes | |||
-rwxr-xr-x | sounds/phonetic/9_p.gsm | bin | 0 -> 1155 bytes | |||
-rwxr-xr-x | sounds/phonetic/a_p.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/phonetic/b_p.gsm | bin | 0 -> 1188 bytes | |||
-rwxr-xr-x | sounds/phonetic/c_p.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/phonetic/d_p.gsm | bin | 0 -> 1254 bytes | |||
-rwxr-xr-x | sounds/phonetic/e_p.gsm | bin | 0 -> 1056 bytes | |||
-rwxr-xr-x | sounds/phonetic/f_p.gsm | bin | 0 -> 1320 bytes | |||
-rwxr-xr-x | sounds/phonetic/g_p.gsm | bin | 0 -> 990 bytes | |||
-rwxr-xr-x | sounds/phonetic/h_p.gsm | bin | 0 -> 1287 bytes | |||
-rwxr-xr-x | sounds/phonetic/i_p.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/phonetic/j_p.gsm | bin | 0 -> 1353 bytes | |||
-rwxr-xr-x | sounds/phonetic/k_p.gsm | bin | 0 -> 1056 bytes | |||
-rwxr-xr-x | sounds/phonetic/l_p.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/phonetic/m_p.gsm | bin | 0 -> 858 bytes | |||
-rwxr-xr-x | sounds/phonetic/n_p.gsm | bin | 0 -> 1254 bytes | |||
-rwxr-xr-x | sounds/phonetic/o_p.gsm | 2 | ||||
-rwxr-xr-x | sounds/phonetic/p_p.gsm | bin | 0 -> 924 bytes | |||
-rwxr-xr-x | sounds/phonetic/q_p.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/phonetic/r_p.gsm | bin | 0 -> 1188 bytes | |||
-rwxr-xr-x | sounds/phonetic/s_p.gsm | bin | 0 -> 1221 bytes | |||
-rwxr-xr-x | sounds/phonetic/t_p.gsm | bin | 0 -> 1155 bytes | |||
-rwxr-xr-x | sounds/phonetic/u_p.gsm | bin | 0 -> 1452 bytes | |||
-rwxr-xr-x | sounds/phonetic/v_p.gsm | bin | 0 -> 1122 bytes | |||
-rwxr-xr-x | sounds/phonetic/w_p.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/phonetic/x_p.gsm | bin | 0 -> 1089 bytes | |||
-rwxr-xr-x | sounds/phonetic/y_p.gsm | bin | 0 -> 1188 bytes | |||
-rwxr-xr-x | sounds/phonetic/z_p.gsm | bin | 0 -> 1188 bytes |
71 files changed, 527 insertions, 4 deletions
@@ -273,6 +273,24 @@ datafiles: all exit 1; \ fi; \ done + mkdir -p $(DESTDIR)$(ASTVARLIBDIR)/sounds/letters + for x in sounds/letters/*.gsm; do \ + if grep -q "^%`basename $$x`%" sounds.txt; then \ + install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds/letters ; \ + else \ + echo "No description for $$x"; \ + exit 1; \ + fi; \ + done + mkdir -p $(DESTDIR)$(ASTVARLIBDIR)/sounds/phonetic + for x in sounds/phonetic/*.gsm; do \ + if grep -q "^%`basename $$x`%" sounds.txt; then \ + install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds/phonetic ; \ + else \ + echo "No description for $$x"; \ + exit 1; \ + fi; \ + done for x in sounds/vm-* sounds/transfer* sounds/pbx-* sounds/ss-* sounds/beep* sounds/dir-* sounds/conf-* sounds/agent-* sounds/invalid* sounds/tt-* sounds/auth-* sounds/privacy-* sounds/queue-*; do \ if grep -q "^%`basename $$x`%" sounds.txt; then \ install -m 644 $$x $(DESTDIR)$(ASTVARLIBDIR)/sounds ; \ diff --git a/apps/app_agi.c b/apps/app_agi.c index 98021fecf..14fa27e49 100755 --- a/apps/app_agi.c +++ b/apps/app_agi.c @@ -385,10 +385,12 @@ static int handle_saydigits(struct ast_channel *chan, AGI *agi, int argc, char * { int res; int num; + if (argc != 4) return RESULT_SHOWUSAGE; if (sscanf(argv[2], "%i", &num) != 1) return RESULT_SHOWUSAGE; + res = ast_say_digit_str_full(chan, argv[2], argv[3], chan->language, agi->audio, agi->ctrl); if (res == 1) /* New command */ return RESULT_SUCCESS; @@ -417,6 +419,23 @@ static int handle_saytime(struct ast_channel *chan, AGI *agi, int argc, char *ar return RESULT_FAILURE; } +static int handle_sayphonetic(struct ast_channel *chan, AGI *agi, int argc, char *argv[]) +{ + int res; + + if (argc != 4) + return RESULT_SHOWUSAGE; + + res = ast_say_phonetic_str_full(chan, argv[2], argv[3], chan->language, agi->audio, agi->ctrl); + if (res == 1) /* New command */ + return RESULT_SUCCESS; + fdprintf(agi->fd, "200 result=%d\n", res); + if (res >= 0) + return RESULT_SUCCESS; + else + return RESULT_FAILURE; +} + static int handle_getdata(struct ast_channel *chan, AGI *agi, int argc, char *argv[]) { int res; @@ -1031,6 +1050,13 @@ static char usage_saytime[] = " completes without a digit being pressed, or the ASCII numerical value of the\n" " digit if one was pressed or -1 on error/hangup.\n"; +static char usage_sayphonetic[] = +" Usage: SAY PHONETIC <string> <escape digits>\n" +" Say a given character string with phonetics, returning early if any of the given DTMF digits\n" +" are received on the channel. Returns 0 if playback completes without a digit\n" +" being pressed, or the ASCII numerical value of the digit if one was pressed or\n" +" -1 on error/hangup.\n"; + static char usage_getdata[] = " Usage: GET DATA <file to be streamed> [timeout] [max digits]\n" " Stream the given file, and recieve DTMF data. Returns the digits recieved\n" @@ -1080,6 +1106,7 @@ static agi_command commands[] = { { { "send", "image", NULL }, handle_sendimage, "Sends images to channels supporting it", usage_sendimage }, { { "say", "digits", NULL }, handle_saydigits, "Says a given digit string", usage_saydigits }, { { "say", "number", NULL }, handle_saynumber, "Says a given number", usage_saynumber }, + { { "say", "phonetic", NULL }, handle_sayphonetic, "Says a given character string with phonetics", usage_sayphonetic }, { { "say", "time", NULL }, handle_saytime, "Says a given time", usage_saytime }, { { "get", "data", NULL }, handle_getdata, "Gets data on a channel", usage_getdata }, { { "set", "context", NULL }, handle_setcontext, "Sets channel context", usage_setcontext }, diff --git a/asterisk.c b/asterisk.c index f7abea070..d1b0dad3c 100755 --- a/asterisk.c +++ b/asterisk.c @@ -896,7 +896,6 @@ static char *cli_prompt(EditLine *el) int i; struct timeval tv; struct tm tm; - time_t curtime; FILE *LOADAVG; int fgcolor = COLOR_WHITE, bgcolor = COLOR_BLACK; diff --git a/configs/logger.conf.sample b/configs/logger.conf.sample index dd3a5bd9e..66f0613ac 100755 --- a/configs/logger.conf.sample +++ b/configs/logger.conf.sample @@ -29,6 +29,11 @@ console => notice,warning,error ;console => notice,warning,error,debug messages => notice,warning,error ;full => notice,warning,error,debug,verbose +; +; Uncomment the following line (with *no* events) if you want the +; queue log to automatically rotate. +; +;queue_log => ;syslog keyword : This special keyword logs to syslog facility ; diff --git a/include/asterisk/say.h b/include/asterisk/say.h index 019d7cc76..cc691bd5e 100755 --- a/include/asterisk/say.h +++ b/include/asterisk/say.h @@ -61,6 +61,10 @@ int ast_say_digits_full(struct ast_channel *chan, int num, char *ints, char *lan */ int ast_say_digit_str(struct ast_channel *chan, char *num, char *ints, char *lang); int ast_say_digit_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd); +int ast_say_character_str(struct ast_channel *chan, char *num, char *ints, char *lang); +int ast_say_character_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd); +int ast_say_phonetic_str(struct ast_channel *chan, char *num, char *ints, char *lang); +int ast_say_phonetic_str_full(struct ast_channel *chan, char *num, char *ints, char *lang, int audiofd, int ctrlfd); int ast_say_datetime(struct ast_channel *chan, time_t t, char *ints, char *lang); @@ -169,6 +169,8 @@ static int pbx_builtin_gotoif(struct ast_channel *, void *); static int pbx_builtin_gotoiftime(struct ast_channel *, void *); static int pbx_builtin_saynumber(struct ast_channel *, void *); static int pbx_builtin_saydigits(struct ast_channel *, void *); +static int pbx_builtin_saycharacters(struct ast_channel *, void *); +static int pbx_builtin_sayphonetic(struct ast_channel *, void *); int pbx_builtin_setvar(struct ast_channel *, void *); void pbx_builtin_setvar_helper(struct ast_channel *chan, char *name, char *value); char *pbx_builtin_getvar_helper(struct ast_channel *chan, char *name); @@ -293,6 +295,14 @@ static struct pbx_builtin { "Say Digits", " SayDigits(digits): Says the passed digits\n" }, + { "SayAlpha", pbx_builtin_saycharacters, +"Say Alpha", +" SayAlpha(string): Spells the passed string\n" }, + + { "SayPhonetic", pbx_builtin_sayphonetic, +"Say Phonetic", +" SayPhonetic(string): Spells the passed string with phonetic alphabet\n" }, + { "SetAccount", pbx_builtin_setaccount, "Sets account code", " SetAccount([account]): Set the channel account code for billing\n" @@ -4601,6 +4611,22 @@ static int pbx_builtin_saydigits(struct ast_channel *chan, void *data) return res; } +static int pbx_builtin_saycharacters(struct ast_channel *chan, void *data) +{ + int res = 0; + if (data) + res = ast_say_character_str(chan, (char *)data, "", chan->language); + return res; +} + +static int pbx_builtin_sayphonetic(struct ast_channel *chan, void *data) +{ + int res = 0; + if (data) + res = ast_say_phonetic_str(chan, (char *)data, "", chan->language); + return res; +} + int load_pbx(void) { int x; @@ -16,6 +16,7 @@ #include <stdlib.h> #include <netinet/in.h> #include <time.h> +#include <ctype.h> #include <asterisk/file.h> #include <asterisk/channel.h> #include <asterisk/logger.h> @@ -45,13 +46,13 @@ int ast_say_digit_str(struct ast_channel *chan, char *fn2, char *ints, char *lan snprintf(fn, sizeof(fn), "digits/pound"); break; default: - if((fn2[num] >= '0') && (fn2[num] <= '9')){ /* Must be in {0-9} */ + if((fn2[num] >= '0') && (fn2[num] <= '9')){ /* Must be in {0-9} */ snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); } - } + } if(strlen(fn)){ /* if length == 0, then skip this digit as it is invalid */ res = ast_streamfile(chan, fn, lang); - if (!res) + if (!res) res = ast_waitstream(chan, ints); ast_stopstream(chan); } @@ -60,6 +61,178 @@ int ast_say_digit_str(struct ast_channel *chan, char *fn2, char *ints, char *lan return res; } +int ast_say_character_str(struct ast_channel *chan, char *fn2, char *ints, char *lang) +{ + /* XXX Merge with full version? XXX */ + char fn[256] = ""; + char ltr; + int num = 0; + int res = 0; + while(fn2[num] && !res) { + fn[0] = '\0'; + switch (fn2[num]) { + case ('*'): + snprintf(fn, sizeof(fn), "digits/star"); + break; + case ('#'): + snprintf(fn, sizeof(fn), "digits/pound"); + break; + case ('0'): + case ('1'): + case ('2'): + case ('3'): + case ('4'): + case ('5'): + case ('6'): + case ('7'): + case ('8'): + case ('9'): + snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); + break; + case ('!'): + strncpy(fn, "letters/exclaimation-point", sizeof(fn)); + break; + case ('@'): + strncpy(fn, "letters/at", sizeof(fn)); + break; + case ('$'): + strncpy(fn, "letters/dollar", sizeof(fn)); + break; + case ('-'): + strncpy(fn, "letters/dash", sizeof(fn)); + break; + case ('.'): + strncpy(fn, "letters/dot", sizeof(fn)); + break; + case ('='): + strncpy(fn, "letters/equals", sizeof(fn)); + break; + case ('+'): + strncpy(fn, "letters/plus", sizeof(fn)); + break; + case ('/'): + strncpy(fn, "letters/slash", sizeof(fn)); + break; + case (' '): + strncpy(fn, "letters/space", sizeof(fn)); + break; + default: + ltr = fn2[num]; + if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A'; /* file names are all lower-case */ + snprintf(fn, sizeof(fn), "letters/%c", ltr); + } + if(strlen(fn)){ /* if length == 0, then skip this digit as it is invalid */ + res = ast_streamfile(chan, fn, lang); + if (!res) + res = ast_waitstream(chan, ints); + } ast_stopstream(chan); + num++; + } + return res; +} + +int ast_say_phonetic_str(struct ast_channel *chan, char *fn2, char *ints, char *lang) +{ + /* XXX Merge with full version? XXX */ + char fn[256] = ""; + char ltr; + int num = 0; + int res = 0; + int temp; + int play; + char hex[3]; +/* while(fn2[num] && !res) { */ + while(fn2[num]) { + play=1; + switch (fn2[num]) { + case ('*'): + snprintf(fn, sizeof(fn), "digits/star"); + break; + case ('#'): + snprintf(fn, sizeof(fn), "digits/pound"); + break; + case ('0'): + case ('1'): + case ('2'): + case ('3'): + case ('4'): + case ('5'): + case ('6'): + case ('7'): + case ('8'): + snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); + break; + case ('!'): + strncpy(fn, "exclaimation-point", sizeof(fn)); + break; + case ('@'): + strncpy(fn, "at", sizeof(fn)); + break; + case ('$'): + strncpy(fn, "dollar", sizeof(fn)); + break; + case ('-'): + strncpy(fn, "dash", sizeof(fn)); + break; + case ('.'): + strncpy(fn, "dot", sizeof(fn)); + break; + case ('='): + strncpy(fn, "equals", sizeof(fn)); + break; + case ('+'): + strncpy(fn, "plus", sizeof(fn)); + break; + case ('/'): + strncpy(fn, "slash", sizeof(fn)); + break; + case (' '): + strncpy(fn, "space", sizeof(fn)); + break; + case ('%'): + play=0; + /* check if we have 2 chars after the % */ + if (strlen(fn2)>num+2) + { + hex[0]=fn2[num+1]; + hex[1]=fn2[num+2]; + hex[2]='\0'; + if (sscanf(hex,"%x", &temp)) + { /* Hex to char convertion successfull */ + fn2[num+2]=temp; + num++; + if (temp==37) + { /* If it is a percent, play it now */ + strncpy(fn, "percent", sizeof(fn)); + num++; + play=1; + } + /* check for invalid characters */ + if ((temp<32) || (temp>126)) + { + num++; + } + } + } + else + num++; + break; + default: /* '9' falls through to here, too */ + ltr = tolower(fn2[num]); + snprintf(fn, sizeof(fn), "phonetic/%c_p", ltr); + } + if (play) + { + res = ast_streamfile(chan, fn, lang); + if (!res) + res = ast_waitstream(chan, ints); + ast_stopstream(chan); + } + num++; + } + return res; +} + int ast_say_digit_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd) { char fn[256] = ""; @@ -76,6 +249,141 @@ int ast_say_digit_str_full(struct ast_channel *chan, char *fn2, char *ints, char return res; } +int ast_say_character_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd) +{ + char fn[256] = ""; + char ltr; + int num = 0; + int res = 0; + while(fn2[num] && !res) { + switch (fn2[num]) { + case ('*'): + snprintf(fn, sizeof(fn), "digits/star"); + break; + case ('#'): + snprintf(fn, sizeof(fn), "digits/pound"); + break; + case ('0'): + case ('1'): + case ('2'): + case ('3'): + case ('4'): + case ('5'): + case ('6'): + case ('7'): + case ('8'): + case ('9'): + snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); + break; + case ('!'): + strncpy(fn, "exclaimation-point", sizeof(fn)); + break; + case ('@'): + strncpy(fn, "at", sizeof(fn)); + break; + case ('$'): + strncpy(fn, "dollar", sizeof(fn)); + break; + case ('-'): + strncpy(fn, "dash", sizeof(fn)); + break; + case ('.'): + strncpy(fn, "dot", sizeof(fn)); + break; + case ('='): + strncpy(fn, "equals", sizeof(fn)); + break; + case ('+'): + strncpy(fn, "plus", sizeof(fn)); + break; + case ('/'): + strncpy(fn, "slash", sizeof(fn)); + break; + case (' '): + strncpy(fn, "space", sizeof(fn)); + break; + default: + ltr = fn2[num]; + if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A'; /* file names are all lower-case */ + snprintf(fn, sizeof(fn), "letters/%c", ltr); + } + /* snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); */ + res = ast_streamfile(chan, fn, lang); + if (!res) + res = ast_waitstream_full(chan, ints, audiofd, ctrlfd); + ast_stopstream(chan); + num++; + } + return res; +} + +int ast_say_phonetic_str_full(struct ast_channel *chan, char *fn2, char *ints, char *lang, int audiofd, int ctrlfd) +{ + char fn[256] = ""; + char ltr; + int num = 0; + int res = 0; + while(fn2[num] && !res) { + switch (fn2[num]) { + case ('*'): + snprintf(fn, sizeof(fn), "digits/star"); + break; + case ('#'): + snprintf(fn, sizeof(fn), "digits/pound"); + break; + case ('0'): + case ('1'): + case ('2'): + case ('3'): + case ('4'): + case ('5'): + case ('6'): + case ('7'): + case ('8'): + snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); + break; + case ('!'): + strncpy(fn, "exclaimation-point", sizeof(fn)); + break; + case ('@'): + strncpy(fn, "at", sizeof(fn)); + break; + case ('$'): + strncpy(fn, "dollar", sizeof(fn)); + break; + case ('-'): + strncpy(fn, "dash", sizeof(fn)); + break; + case ('.'): + strncpy(fn, "dot", sizeof(fn)); + break; + case ('='): + strncpy(fn, "equals", sizeof(fn)); + break; + case ('+'): + strncpy(fn, "plus", sizeof(fn)); + break; + case ('/'): + strncpy(fn, "slash", sizeof(fn)); + break; + case (' '): + strncpy(fn, "space", sizeof(fn)); + break; + default: /* '9' falls here... */ + ltr = fn2[num]; + if ('A' <= ltr && ltr <= 'Z') ltr += 'a' - 'A'; /* file names are all lower-case */ + snprintf(fn, sizeof(fn), "phonetic/%c", ltr); + } + /* snprintf(fn, sizeof(fn), "digits/%c", fn2[num]); */ + res = ast_streamfile(chan, fn, lang); + if (!res) + res = ast_waitstream_full(chan, ints, audiofd, ctrlfd); + ast_stopstream(chan); + num++; + } + return res; +} + int ast_say_digits(struct ast_channel *chan, int num, char *ints, char *lang) { /* XXX Should I be merged with say_digits_full XXX */ diff --git a/sounds.txt b/sounds.txt index cd7b0f7bc..419497c71 100755 --- a/sounds.txt +++ b/sounds.txt @@ -478,3 +478,137 @@ %vm-reachoper.gsm%press 0 to reach an operator %vm-tooshort.gsm%your message is too short + +%9_p.gsm%niner + +%a.gsm%a + +%b.gsm%b + +%c.gsm%c + +%d.gsm%d + +%e.gsm%e + +%f.gsm%f + +%g.gsm%g + +%h.gsm%h + +%i.gsm%i + +%j.gsm%j + +%k.gsm%k + +%l.gsm%l + +%m.gsm%m + +%n.gsm%n + +%o.gsm%o + +%p.gsm%p + +%q.gsm%q + +%r.gsm%r + +%s.gsm%s + +%t.gsm%t + +%u.gsm%u + +%v.gsm%v + +%w.gsm%w + +%x.gsm%x + +%y.gsm%y + +%z.gsm%z + +%zed.gsm%zed + +%a_p.gsm%alpha + +%b_p.gsm%bravo + +%c_p.gsm%charlie + +%d_p.gsm%delta + +%e_p.gsm%echo + +%f_p.gsm%foxtrot + +%g_p.gsm%golf + +%h_p.gsm%hotel + +%i_p.gsm%india + +%j_p.gsm%juliet + +%k_p.gsm%kilo + +%l_p.gsm%lima + +%m_p.gsm%mike + +%n_p.gsm%november + +%o_p.gsm%oscar + +%p_p.gsm%papa + +%q_p.gsm%quebec + +%r_p.gsm%romeo + +%s_p.gsm%sierra + +%t_p.gsm%tango + +%u_p.gsm%uniform + +%v_p.gsm%victor + +%w_p.gsm%wiskey + +%x_p.gsm%xray + +%y_p.gsm%yankee + +%z_p.gsm%zulu + +%niner.gsm%niner + +; Misc + +%percent.gsm%percent [%] + +%plus.gsm%plus [+] + +%exclaimation-point.gsm%exclaimation-point [!] + +%at.gsm%at [@] + +%dollar.gsm%dollar [$] + +%dash.gsm%dash [-] + +%dot.gsm%dot [.] + +%slash.gsm%slash [/] + +%space.gsm%space [ ] + +%plus.gsm%plus [+] + +%equals.gsm%equals [=] diff --git a/sounds/letters/a.gsm b/sounds/letters/a.gsm Binary files differnew file mode 100755 index 000000000..88171a2d8 --- /dev/null +++ b/sounds/letters/a.gsm diff --git a/sounds/letters/at.gsm b/sounds/letters/at.gsm Binary files differnew file mode 100755 index 000000000..76227229b --- /dev/null +++ b/sounds/letters/at.gsm diff --git a/sounds/letters/b.gsm b/sounds/letters/b.gsm Binary files differnew file mode 100755 index 000000000..d97f14fd7 --- /dev/null +++ b/sounds/letters/b.gsm diff --git a/sounds/letters/c.gsm b/sounds/letters/c.gsm Binary files differnew file mode 100755 index 000000000..e631c3e8c --- /dev/null +++ b/sounds/letters/c.gsm diff --git a/sounds/letters/d.gsm b/sounds/letters/d.gsm Binary files differnew file mode 100755 index 000000000..9d26a00ee --- /dev/null +++ b/sounds/letters/d.gsm diff --git a/sounds/letters/dash.gsm b/sounds/letters/dash.gsm Binary files differnew file mode 100755 index 000000000..b3649e38d --- /dev/null +++ b/sounds/letters/dash.gsm diff --git a/sounds/letters/dollar.gsm b/sounds/letters/dollar.gsm Binary files differnew file mode 100755 index 000000000..1d515d166 --- /dev/null +++ b/sounds/letters/dollar.gsm diff --git a/sounds/letters/dot.gsm b/sounds/letters/dot.gsm Binary files differnew file mode 100755 index 000000000..0fca6d9cb --- /dev/null +++ b/sounds/letters/dot.gsm diff --git a/sounds/letters/e.gsm b/sounds/letters/e.gsm Binary files differnew file mode 100755 index 000000000..bedfb456e --- /dev/null +++ b/sounds/letters/e.gsm diff --git a/sounds/letters/equals.gsm b/sounds/letters/equals.gsm Binary files differnew file mode 100755 index 000000000..4822469ce --- /dev/null +++ b/sounds/letters/equals.gsm diff --git a/sounds/letters/exclaimation-point.gsm b/sounds/letters/exclaimation-point.gsm Binary files differnew file mode 100755 index 000000000..87e49f2ed --- /dev/null +++ b/sounds/letters/exclaimation-point.gsm diff --git a/sounds/letters/f.gsm b/sounds/letters/f.gsm Binary files differnew file mode 100755 index 000000000..27fba4507 --- /dev/null +++ b/sounds/letters/f.gsm diff --git a/sounds/letters/g.gsm b/sounds/letters/g.gsm Binary files differnew file mode 100755 index 000000000..42b9e60b9 --- /dev/null +++ b/sounds/letters/g.gsm diff --git a/sounds/letters/h.gsm b/sounds/letters/h.gsm Binary files differnew file mode 100755 index 000000000..c64b2f9c9 --- /dev/null +++ b/sounds/letters/h.gsm diff --git a/sounds/letters/i.gsm b/sounds/letters/i.gsm Binary files differnew file mode 100755 index 000000000..7f80d8ca7 --- /dev/null +++ b/sounds/letters/i.gsm diff --git a/sounds/letters/j.gsm b/sounds/letters/j.gsm Binary files differnew file mode 100755 index 000000000..45057ea96 --- /dev/null +++ b/sounds/letters/j.gsm diff --git a/sounds/letters/k.gsm b/sounds/letters/k.gsm Binary files differnew file mode 100755 index 000000000..104dae10e --- /dev/null +++ b/sounds/letters/k.gsm diff --git a/sounds/letters/l.gsm b/sounds/letters/l.gsm Binary files differnew file mode 100755 index 000000000..df4957f16 --- /dev/null +++ b/sounds/letters/l.gsm diff --git a/sounds/letters/m.gsm b/sounds/letters/m.gsm Binary files differnew file mode 100755 index 000000000..97643d131 --- /dev/null +++ b/sounds/letters/m.gsm diff --git a/sounds/letters/n.gsm b/sounds/letters/n.gsm Binary files differnew file mode 100755 index 000000000..92d853406 --- /dev/null +++ b/sounds/letters/n.gsm diff --git a/sounds/letters/o.gsm b/sounds/letters/o.gsm Binary files differnew file mode 100755 index 000000000..4d1235051 --- /dev/null +++ b/sounds/letters/o.gsm diff --git a/sounds/letters/p.gsm b/sounds/letters/p.gsm Binary files differnew file mode 100755 index 000000000..d0851e768 --- /dev/null +++ b/sounds/letters/p.gsm diff --git a/sounds/letters/plus.gsm b/sounds/letters/plus.gsm Binary files differnew file mode 100755 index 000000000..f4d72d637 --- /dev/null +++ b/sounds/letters/plus.gsm diff --git a/sounds/letters/q.gsm b/sounds/letters/q.gsm Binary files differnew file mode 100755 index 000000000..a86ed189c --- /dev/null +++ b/sounds/letters/q.gsm diff --git a/sounds/letters/r.gsm b/sounds/letters/r.gsm Binary files differnew file mode 100755 index 000000000..6ac4db989 --- /dev/null +++ b/sounds/letters/r.gsm diff --git a/sounds/letters/s.gsm b/sounds/letters/s.gsm Binary files differnew file mode 100755 index 000000000..6f9cdc367 --- /dev/null +++ b/sounds/letters/s.gsm diff --git a/sounds/letters/slash.gsm b/sounds/letters/slash.gsm Binary files differnew file mode 100755 index 000000000..51138a4a6 --- /dev/null +++ b/sounds/letters/slash.gsm diff --git a/sounds/letters/space.gsm b/sounds/letters/space.gsm Binary files differnew file mode 100755 index 000000000..46b281d91 --- /dev/null +++ b/sounds/letters/space.gsm diff --git a/sounds/letters/t.gsm b/sounds/letters/t.gsm Binary files differnew file mode 100755 index 000000000..3f8904d28 --- /dev/null +++ b/sounds/letters/t.gsm diff --git a/sounds/letters/u.gsm b/sounds/letters/u.gsm Binary files differnew file mode 100755 index 000000000..9fdc9a851 --- /dev/null +++ b/sounds/letters/u.gsm diff --git a/sounds/letters/v.gsm b/sounds/letters/v.gsm Binary files differnew file mode 100755 index 000000000..e7ded5bd0 --- /dev/null +++ b/sounds/letters/v.gsm diff --git a/sounds/letters/w.gsm b/sounds/letters/w.gsm Binary files differnew file mode 100755 index 000000000..6b0df9169 --- /dev/null +++ b/sounds/letters/w.gsm diff --git a/sounds/letters/x.gsm b/sounds/letters/x.gsm Binary files differnew file mode 100755 index 000000000..70c47e521 --- /dev/null +++ b/sounds/letters/x.gsm diff --git a/sounds/letters/y.gsm b/sounds/letters/y.gsm Binary files differnew file mode 100755 index 000000000..19ffa007e --- /dev/null +++ b/sounds/letters/y.gsm diff --git a/sounds/letters/z.gsm b/sounds/letters/z.gsm Binary files differnew file mode 100755 index 000000000..919382337 --- /dev/null +++ b/sounds/letters/z.gsm diff --git a/sounds/letters/zed.gsm b/sounds/letters/zed.gsm Binary files differnew file mode 100755 index 000000000..39782f734 --- /dev/null +++ b/sounds/letters/zed.gsm diff --git a/sounds/phonetic/9_p.gsm b/sounds/phonetic/9_p.gsm Binary files differnew file mode 100755 index 000000000..d42bec688 --- /dev/null +++ b/sounds/phonetic/9_p.gsm diff --git a/sounds/phonetic/a_p.gsm b/sounds/phonetic/a_p.gsm Binary files differnew file mode 100755 index 000000000..fa6edfe8f --- /dev/null +++ b/sounds/phonetic/a_p.gsm diff --git a/sounds/phonetic/b_p.gsm b/sounds/phonetic/b_p.gsm Binary files differnew file mode 100755 index 000000000..187f0dd1b --- /dev/null +++ b/sounds/phonetic/b_p.gsm diff --git a/sounds/phonetic/c_p.gsm b/sounds/phonetic/c_p.gsm Binary files differnew file mode 100755 index 000000000..2c168ec55 --- /dev/null +++ b/sounds/phonetic/c_p.gsm diff --git a/sounds/phonetic/d_p.gsm b/sounds/phonetic/d_p.gsm Binary files differnew file mode 100755 index 000000000..5550bfc1b --- /dev/null +++ b/sounds/phonetic/d_p.gsm diff --git a/sounds/phonetic/e_p.gsm b/sounds/phonetic/e_p.gsm Binary files differnew file mode 100755 index 000000000..46ae8b6f5 --- /dev/null +++ b/sounds/phonetic/e_p.gsm diff --git a/sounds/phonetic/f_p.gsm b/sounds/phonetic/f_p.gsm Binary files differnew file mode 100755 index 000000000..6b4f30dca --- /dev/null +++ b/sounds/phonetic/f_p.gsm diff --git a/sounds/phonetic/g_p.gsm b/sounds/phonetic/g_p.gsm Binary files differnew file mode 100755 index 000000000..38aae4fdb --- /dev/null +++ b/sounds/phonetic/g_p.gsm diff --git a/sounds/phonetic/h_p.gsm b/sounds/phonetic/h_p.gsm Binary files differnew file mode 100755 index 000000000..fea0828b4 --- /dev/null +++ b/sounds/phonetic/h_p.gsm diff --git a/sounds/phonetic/i_p.gsm b/sounds/phonetic/i_p.gsm Binary files differnew file mode 100755 index 000000000..24abc33f9 --- /dev/null +++ b/sounds/phonetic/i_p.gsm diff --git a/sounds/phonetic/j_p.gsm b/sounds/phonetic/j_p.gsm Binary files differnew file mode 100755 index 000000000..32c1311ee --- /dev/null +++ b/sounds/phonetic/j_p.gsm diff --git a/sounds/phonetic/k_p.gsm b/sounds/phonetic/k_p.gsm Binary files differnew file mode 100755 index 000000000..c26d96685 --- /dev/null +++ b/sounds/phonetic/k_p.gsm diff --git a/sounds/phonetic/l_p.gsm b/sounds/phonetic/l_p.gsm Binary files differnew file mode 100755 index 000000000..0775e96e3 --- /dev/null +++ b/sounds/phonetic/l_p.gsm diff --git a/sounds/phonetic/m_p.gsm b/sounds/phonetic/m_p.gsm Binary files differnew file mode 100755 index 000000000..7d3c66f03 --- /dev/null +++ b/sounds/phonetic/m_p.gsm diff --git a/sounds/phonetic/n_p.gsm b/sounds/phonetic/n_p.gsm Binary files differnew file mode 100755 index 000000000..f399f3702 --- /dev/null +++ b/sounds/phonetic/n_p.gsm diff --git a/sounds/phonetic/o_p.gsm b/sounds/phonetic/o_p.gsm new file mode 100755 index 000000000..d9de39c73 --- /dev/null +++ b/sounds/phonetic/o_p.gsm @@ -0,0 +1,2 @@ +sP VeU$dyeVѹ[#[#PJB#x\zIܘFVT 6rԷjI"v.՛*{uL3:Ij1]7ZIdkQFEz:#Զ<,H1Q=ܡ#!]i^[TC +CfϑQDZ-=ӱKeCdY#DLQ3YISD0;K%ӭRiSe5S2pSd\fй*j^U(8]JSF[Ԩ
Vt&Oj֙ǏKXձQW^NufF)ûֵdIڏ'SV.DqyS0 BS"snzٯJ(MNZ´i>*dIS`qD1]řh㎣V[}/q&_iG24bqJײ͒ae6">1A 2A6ao,@|=.l@m@HfBբQٸ J܉bZQ% I3<@7cn&سmqƒ}4hIr#$𤌢שbE'Br.dykzĴ ]Yj")$P62H[E! hsԢUYIxc-d]dmB]'qT.9+Ea(8ucHFL&
)ƨ[EȇbNgzǦomh)"(KkdFSkńlG"o'Mfmo2ժ:elLmG52IDpcs\Į۩4P4axq"#hrcm*5bnS,D+yCXJwB6vx3zHk:vؒM
cTQ$D:vί֫B!ª۾Ckz(4bw2N&-x؈Y k6q3MFӉD~T|%7m4״Ki'^5%rWn(Q:ؠZԸBRsP@r#`ePl
@$+v@'
\ No newline at end of file diff --git a/sounds/phonetic/p_p.gsm b/sounds/phonetic/p_p.gsm Binary files differnew file mode 100755 index 000000000..bb5ce8631 --- /dev/null +++ b/sounds/phonetic/p_p.gsm diff --git a/sounds/phonetic/q_p.gsm b/sounds/phonetic/q_p.gsm Binary files differnew file mode 100755 index 000000000..8dfdb5e05 --- /dev/null +++ b/sounds/phonetic/q_p.gsm diff --git a/sounds/phonetic/r_p.gsm b/sounds/phonetic/r_p.gsm Binary files differnew file mode 100755 index 000000000..47d554651 --- /dev/null +++ b/sounds/phonetic/r_p.gsm diff --git a/sounds/phonetic/s_p.gsm b/sounds/phonetic/s_p.gsm Binary files differnew file mode 100755 index 000000000..8a85860a5 --- /dev/null +++ b/sounds/phonetic/s_p.gsm diff --git a/sounds/phonetic/t_p.gsm b/sounds/phonetic/t_p.gsm Binary files differnew file mode 100755 index 000000000..3701e08c6 --- /dev/null +++ b/sounds/phonetic/t_p.gsm diff --git a/sounds/phonetic/u_p.gsm b/sounds/phonetic/u_p.gsm Binary files differnew file mode 100755 index 000000000..39b388834 --- /dev/null +++ b/sounds/phonetic/u_p.gsm diff --git a/sounds/phonetic/v_p.gsm b/sounds/phonetic/v_p.gsm Binary files differnew file mode 100755 index 000000000..ad9073501 --- /dev/null +++ b/sounds/phonetic/v_p.gsm diff --git a/sounds/phonetic/w_p.gsm b/sounds/phonetic/w_p.gsm Binary files differnew file mode 100755 index 000000000..9d2199c10 --- /dev/null +++ b/sounds/phonetic/w_p.gsm diff --git a/sounds/phonetic/x_p.gsm b/sounds/phonetic/x_p.gsm Binary files differnew file mode 100755 index 000000000..86269a9be --- /dev/null +++ b/sounds/phonetic/x_p.gsm diff --git a/sounds/phonetic/y_p.gsm b/sounds/phonetic/y_p.gsm Binary files differnew file mode 100755 index 000000000..ce70b0609 --- /dev/null +++ b/sounds/phonetic/y_p.gsm diff --git a/sounds/phonetic/z_p.gsm b/sounds/phonetic/z_p.gsm Binary files differnew file mode 100755 index 000000000..e7165c1e9 --- /dev/null +++ b/sounds/phonetic/z_p.gsm |