diff --git a/Makefile b/Makefile index d5003c27eb958255eef049c99e9a75c8755b5341..ba3c1c35560fe4b13b708c6668c4e500392671cd 100755 --- a/Makefile +++ b/Makefile @@ -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 98021fecfe3240587e9a6505a4823634e1af1d2c..14fa27e49fee9ed5d522f7da85ec0e65fb2f43d9 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 f7abea0700448ac310f56ee1ceaea489be807de9..d1b0dad3cc6b481df062d4a18d138d0171b0a30f 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 dd3a5bd9e34b8e4735a16d2c7269bbf9144e2b96..66f0613ac49c142cf5638b0a523abd28778c65d0 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 019d7cc76a38cb19580e966eb2bd4151757001a5..cc691bd5eb58954a8b6acb9e07754a0cf1afb642 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); diff --git a/pbx.c b/pbx.c index 85e5e0103f0eb74b4e9a758faa11421f51ac584c..4a5fd82d6bb2dae6fa8bb11673e2d4d2496d25c5 100755 --- a/pbx.c +++ b/pbx.c @@ -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; diff --git a/say.c b/say.c index 0107346278e6f1ee38b645edb26894ce8831d19a..5a318e8c014b1c124d4aa666116cb1a0bd6aac10 100755 --- a/say.c +++ b/say.c @@ -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 cd7b0f7bcf9985fce46598704aaa05afa712d926..419497c71a6bb08271f9352682c70b66e1b9cf13 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 new file mode 100755 index 0000000000000000000000000000000000000000..88171a2d8fd2fe32f45956d352e3f6181e1b6b95 Binary files /dev/null and b/sounds/letters/a.gsm differ diff --git a/sounds/letters/at.gsm b/sounds/letters/at.gsm new file mode 100755 index 0000000000000000000000000000000000000000..76227229be471340b25fb5a6e0c10809155ae190 Binary files /dev/null and b/sounds/letters/at.gsm differ diff --git a/sounds/letters/b.gsm b/sounds/letters/b.gsm new file mode 100755 index 0000000000000000000000000000000000000000..d97f14fd7c6aec3007664e72d9c05c558dfe57dd Binary files /dev/null and b/sounds/letters/b.gsm differ diff --git a/sounds/letters/c.gsm b/sounds/letters/c.gsm new file mode 100755 index 0000000000000000000000000000000000000000..e631c3e8c713d6b50e0a3d97dd705863f8c21527 Binary files /dev/null and b/sounds/letters/c.gsm differ diff --git a/sounds/letters/d.gsm b/sounds/letters/d.gsm new file mode 100755 index 0000000000000000000000000000000000000000..9d26a00ee5ee507eb3653b4aaad41129e53a9569 Binary files /dev/null and b/sounds/letters/d.gsm differ diff --git a/sounds/letters/dash.gsm b/sounds/letters/dash.gsm new file mode 100755 index 0000000000000000000000000000000000000000..b3649e38dd7f317844e94ef1a8f21eff96635c1a Binary files /dev/null and b/sounds/letters/dash.gsm differ diff --git a/sounds/letters/dollar.gsm b/sounds/letters/dollar.gsm new file mode 100755 index 0000000000000000000000000000000000000000..1d515d16683a664d3babf69d024fdd1c639dffcb Binary files /dev/null and b/sounds/letters/dollar.gsm differ diff --git a/sounds/letters/dot.gsm b/sounds/letters/dot.gsm new file mode 100755 index 0000000000000000000000000000000000000000..0fca6d9cb479c2d9860867e0c75ae5d3e8245268 Binary files /dev/null and b/sounds/letters/dot.gsm differ diff --git a/sounds/letters/e.gsm b/sounds/letters/e.gsm new file mode 100755 index 0000000000000000000000000000000000000000..bedfb456e9126f0fd565c84ba4420a157445cd8a Binary files /dev/null and b/sounds/letters/e.gsm differ diff --git a/sounds/letters/equals.gsm b/sounds/letters/equals.gsm new file mode 100755 index 0000000000000000000000000000000000000000..4822469cef1eb3e6c2b41ec8096c631f5c378bd8 Binary files /dev/null and b/sounds/letters/equals.gsm differ diff --git a/sounds/letters/exclaimation-point.gsm b/sounds/letters/exclaimation-point.gsm new file mode 100755 index 0000000000000000000000000000000000000000..87e49f2edc7117a5b976c00e5c4ee1a175097852 Binary files /dev/null and b/sounds/letters/exclaimation-point.gsm differ diff --git a/sounds/letters/f.gsm b/sounds/letters/f.gsm new file mode 100755 index 0000000000000000000000000000000000000000..27fba45077d895b9998e119dc85dde760f05c22d Binary files /dev/null and b/sounds/letters/f.gsm differ diff --git a/sounds/letters/g.gsm b/sounds/letters/g.gsm new file mode 100755 index 0000000000000000000000000000000000000000..42b9e60b98b05ba3bc577f7b0c0422ecdd2f0d26 Binary files /dev/null and b/sounds/letters/g.gsm differ diff --git a/sounds/letters/h.gsm b/sounds/letters/h.gsm new file mode 100755 index 0000000000000000000000000000000000000000..c64b2f9c958a21f3a615c7f44d047273973c7c62 Binary files /dev/null and b/sounds/letters/h.gsm differ diff --git a/sounds/letters/i.gsm b/sounds/letters/i.gsm new file mode 100755 index 0000000000000000000000000000000000000000..7f80d8ca7c5758f9c6aaeaf73901bac2690446f7 Binary files /dev/null and b/sounds/letters/i.gsm differ diff --git a/sounds/letters/j.gsm b/sounds/letters/j.gsm new file mode 100755 index 0000000000000000000000000000000000000000..45057ea96a696d6889374731d345c3e9d62926a4 Binary files /dev/null and b/sounds/letters/j.gsm differ diff --git a/sounds/letters/k.gsm b/sounds/letters/k.gsm new file mode 100755 index 0000000000000000000000000000000000000000..104dae10ea4cbe29c9ddda9fcda725ba2db58bc7 Binary files /dev/null and b/sounds/letters/k.gsm differ diff --git a/sounds/letters/l.gsm b/sounds/letters/l.gsm new file mode 100755 index 0000000000000000000000000000000000000000..df4957f1662a6cd24bf50eef5ea5b508a43ea0cc Binary files /dev/null and b/sounds/letters/l.gsm differ diff --git a/sounds/letters/m.gsm b/sounds/letters/m.gsm new file mode 100755 index 0000000000000000000000000000000000000000..97643d131ba116dfd9aa24345f5b5b8fe4813d1d Binary files /dev/null and b/sounds/letters/m.gsm differ diff --git a/sounds/letters/n.gsm b/sounds/letters/n.gsm new file mode 100755 index 0000000000000000000000000000000000000000..92d853406f8f576be42f397a340621dde54965f5 Binary files /dev/null and b/sounds/letters/n.gsm differ diff --git a/sounds/letters/o.gsm b/sounds/letters/o.gsm new file mode 100755 index 0000000000000000000000000000000000000000..4d1235051dbbbed8cb72c195c7c0c25e420c5cc6 Binary files /dev/null and b/sounds/letters/o.gsm differ diff --git a/sounds/letters/p.gsm b/sounds/letters/p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..d0851e768c372ac7f7dae4b78be953d2c3734077 Binary files /dev/null and b/sounds/letters/p.gsm differ diff --git a/sounds/letters/plus.gsm b/sounds/letters/plus.gsm new file mode 100755 index 0000000000000000000000000000000000000000..f4d72d637af48807d48f57298a541813e816d638 Binary files /dev/null and b/sounds/letters/plus.gsm differ diff --git a/sounds/letters/q.gsm b/sounds/letters/q.gsm new file mode 100755 index 0000000000000000000000000000000000000000..a86ed189cd571e3c7c5db9657fedfa6f6e2bb605 Binary files /dev/null and b/sounds/letters/q.gsm differ diff --git a/sounds/letters/r.gsm b/sounds/letters/r.gsm new file mode 100755 index 0000000000000000000000000000000000000000..6ac4db989798845d71bbe1afbd02c392e6408ecb Binary files /dev/null and b/sounds/letters/r.gsm differ diff --git a/sounds/letters/s.gsm b/sounds/letters/s.gsm new file mode 100755 index 0000000000000000000000000000000000000000..6f9cdc367a9f95db3a29a04f7d2914dd4145a5a3 Binary files /dev/null and b/sounds/letters/s.gsm differ diff --git a/sounds/letters/slash.gsm b/sounds/letters/slash.gsm new file mode 100755 index 0000000000000000000000000000000000000000..51138a4a6f584db1481601797020c4b8eb726909 Binary files /dev/null and b/sounds/letters/slash.gsm differ diff --git a/sounds/letters/space.gsm b/sounds/letters/space.gsm new file mode 100755 index 0000000000000000000000000000000000000000..46b281d9164bb0941884cba768a8a092fe4fdc76 Binary files /dev/null and b/sounds/letters/space.gsm differ diff --git a/sounds/letters/t.gsm b/sounds/letters/t.gsm new file mode 100755 index 0000000000000000000000000000000000000000..3f8904d28c24e3857e9b6f772a3404ed86f48570 Binary files /dev/null and b/sounds/letters/t.gsm differ diff --git a/sounds/letters/u.gsm b/sounds/letters/u.gsm new file mode 100755 index 0000000000000000000000000000000000000000..9fdc9a851eab0a2dd69b9452aeea6d63cd53e0bf Binary files /dev/null and b/sounds/letters/u.gsm differ diff --git a/sounds/letters/v.gsm b/sounds/letters/v.gsm new file mode 100755 index 0000000000000000000000000000000000000000..e7ded5bd09e9eed61596cb0d371be1b257738875 Binary files /dev/null and b/sounds/letters/v.gsm differ diff --git a/sounds/letters/w.gsm b/sounds/letters/w.gsm new file mode 100755 index 0000000000000000000000000000000000000000..6b0df91697b51ad88ad94af56810283b4060c9df Binary files /dev/null and b/sounds/letters/w.gsm differ diff --git a/sounds/letters/x.gsm b/sounds/letters/x.gsm new file mode 100755 index 0000000000000000000000000000000000000000..70c47e521305de7de424c361f12b458fd0335e60 Binary files /dev/null and b/sounds/letters/x.gsm differ diff --git a/sounds/letters/y.gsm b/sounds/letters/y.gsm new file mode 100755 index 0000000000000000000000000000000000000000..19ffa007e36ce3a74829706568e752af602e0a32 Binary files /dev/null and b/sounds/letters/y.gsm differ diff --git a/sounds/letters/z.gsm b/sounds/letters/z.gsm new file mode 100755 index 0000000000000000000000000000000000000000..91938233761c4145ead593db6a17322da77c2181 Binary files /dev/null and b/sounds/letters/z.gsm differ diff --git a/sounds/letters/zed.gsm b/sounds/letters/zed.gsm new file mode 100755 index 0000000000000000000000000000000000000000..39782f73415c3a1c9be69a57e137fbf454f6a7be Binary files /dev/null and b/sounds/letters/zed.gsm differ diff --git a/sounds/phonetic/9_p.gsm b/sounds/phonetic/9_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..d42bec688411e958ae53d70ab90baf2f79ee7338 Binary files /dev/null and b/sounds/phonetic/9_p.gsm differ diff --git a/sounds/phonetic/a_p.gsm b/sounds/phonetic/a_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..fa6edfe8f5b3c81116c6d93ef84610ed3aad7b41 Binary files /dev/null and b/sounds/phonetic/a_p.gsm differ diff --git a/sounds/phonetic/b_p.gsm b/sounds/phonetic/b_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..187f0dd1bb4f20b48300786bb9eeba1df1a57c88 Binary files /dev/null and b/sounds/phonetic/b_p.gsm differ diff --git a/sounds/phonetic/c_p.gsm b/sounds/phonetic/c_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..2c168ec5586f25c5fab1b019b01f9b4dbe82a2e1 Binary files /dev/null and b/sounds/phonetic/c_p.gsm differ diff --git a/sounds/phonetic/d_p.gsm b/sounds/phonetic/d_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..5550bfc1be347c291f76d2b9a898502623667431 Binary files /dev/null and b/sounds/phonetic/d_p.gsm differ diff --git a/sounds/phonetic/e_p.gsm b/sounds/phonetic/e_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..46ae8b6f5882b5d3cea3e8bd3f316069c167df38 Binary files /dev/null and b/sounds/phonetic/e_p.gsm differ diff --git a/sounds/phonetic/f_p.gsm b/sounds/phonetic/f_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..6b4f30dca99e2444fb3913037907d9babc28d313 Binary files /dev/null and b/sounds/phonetic/f_p.gsm differ diff --git a/sounds/phonetic/g_p.gsm b/sounds/phonetic/g_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..38aae4fdb9213dcb77931be4103a2d33ec150c11 Binary files /dev/null and b/sounds/phonetic/g_p.gsm differ diff --git a/sounds/phonetic/h_p.gsm b/sounds/phonetic/h_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..fea0828b41a801c13d8424bcec06b79075d471e4 Binary files /dev/null and b/sounds/phonetic/h_p.gsm differ diff --git a/sounds/phonetic/i_p.gsm b/sounds/phonetic/i_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..24abc33f9b559ccf31cc4f7e1e5c73e0f1597115 Binary files /dev/null and b/sounds/phonetic/i_p.gsm differ diff --git a/sounds/phonetic/j_p.gsm b/sounds/phonetic/j_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..32c1311eebe0c23e2f3e76d154ff43b3b387e701 Binary files /dev/null and b/sounds/phonetic/j_p.gsm differ diff --git a/sounds/phonetic/k_p.gsm b/sounds/phonetic/k_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..c26d966856eb411dc5a9f557a4854e42dc8084cc Binary files /dev/null and b/sounds/phonetic/k_p.gsm differ diff --git a/sounds/phonetic/l_p.gsm b/sounds/phonetic/l_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..0775e96e33b69770c8efcb71bdfaad3cf91cd68c Binary files /dev/null and b/sounds/phonetic/l_p.gsm differ diff --git a/sounds/phonetic/m_p.gsm b/sounds/phonetic/m_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..7d3c66f03881d129b08bd8fd97cff690ee412e7d Binary files /dev/null and b/sounds/phonetic/m_p.gsm differ diff --git a/sounds/phonetic/n_p.gsm b/sounds/phonetic/n_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..f399f3702b41cbd0cfbe9104a07bad786fa7a21e Binary files /dev/null and b/sounds/phonetic/n_p.gsm differ diff --git a/sounds/phonetic/o_p.gsm b/sounds/phonetic/o_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..d9de39c730fe576e85989d1fa6f8cf0b0cf4f76e --- /dev/null +++ b/sounds/phonetic/o_p.gsm @@ -0,0 +1,2 @@ +Ô÷ƒs’P VìµéeUñÉ$dyeVѹ[#[#P²JäBÉ#Ôx\zIâ®ØãØܘÌFÐËVëäŠTçÖóç 6rÕÛÔ·j©ÐçI"³v.Õ›*¤{u¬£›ÆL3:I“j1]–ÙÔ7Z¥IŸ¦dÛkˆÓQF‡¤¶ºÕñEÖz—ñ:ï»#Ô¶<,ƒ¡§H1Š˜êQ=ÎÜ¡#!]iñ²Ý^[TÓóCá +ñC€ìò¼¡£fÏ‘ÇQD‚ùîZ£¡À-=ÊÛÓ±KeCñd‚±îY#£D”¹ÒL«QæÊ3YISD0;¾K%ÓRiÂSe¦5’¬ÚSÂ2„«²pSd˜ÓÙ\¥f¶Ð¹æäÓ*j^™U(8¢]JÞSFÇ©[¦ÅÔ¨ ó¬Væt›&OÓæjÖ™¨ÇKŒ¥ÜXÅÕ±QW^äNufF)ºÃ»Öµdâ×ç‹I½öÚ»'S馄V‡.Dë¬Âqy©S0Øê¥ ÛÖB‰Sáœâ"sµ¾ÐàÂèãî÷»n³zîÙ¯¤ÕJªâ(M“N³Z´i>*‘dƒÂIŠS`qD Ø1é]ØîÅ™‹h㎣V[}®Æ/͹q&_iG24bÆ×qJ¼×²Í’a‹e6"Âã>1’¤“°A£ 2š˜A¹6²ÝþÖëa…ÚÜo·ºÙ,ì@|=.“lÚ@²êm²âä@HéfBÛÕ¢QÐÙ¸ J܉ÀbÆàZãQÉ%„ I3–<å¸@7cn&ÜسÖÕÛåÈãm·qèÆ’}4¥h†IrÆ#¸$𤌢š×©b†îE'ÍæBµ£r.d¯Âçy£kzÄ´·þËÔ ]—ÒYj"Ö)$PÈ6×2·»¨§ÆÛHŸ[E! hþsÔ¢UY·Ixc-Ÿd]¥dmB×]'¸ßqTŠ¹.’9+ÔäEa¿(¥8uêžcHFLÐôùÇ& …)¹Ôƨ¹[éÂœÔçE ȇõb•NÓgzº£ÎǦ™oÉmh)"¶úÕ(Ké©kdFµSÄàkÅ„lÒG"o'¸âMf»mÄúo2òÕª:eêl£½âþLmG5×2I›ÛDpcs\¥ÚĮ۩4PÔç4¥aÜÆxëqÇ"Ý#Åhr¸œàƒÙcm*5bÂÈnSåÖ,àèåD¼±¹+yCXÒJÖwB6©vÒxå3z±HäÖk:¥àvÃØ’M íñc©TÒQñ$D:ñ®vä¤Î¯Ö«B!©šÂªÛ¾ñCk”óz‚È(4´ƒbw¢‹×2NÚðÄ&¼’-xáÖ؈Yð k¯Çð¢6œ£·×q3M©€ÂFÓ‰Dü~Á¥“T›|¡%º«ðá7Ùm4ž×´KiîÀ©'^£ÈØ5%rWœnÁ(ÂQ:¤Ø ZÔ¸BR×µsPêÎ@ÊÞrÉ#ð`ePl· Ð@$ã+v@'¢¶Û \ No newline at end of file diff --git a/sounds/phonetic/p_p.gsm b/sounds/phonetic/p_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..bb5ce86312a2e8fd41af786b03f00f6093d31a2f Binary files /dev/null and b/sounds/phonetic/p_p.gsm differ diff --git a/sounds/phonetic/q_p.gsm b/sounds/phonetic/q_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..8dfdb5e051436cebfbd7c34e1d2720355d4ca103 Binary files /dev/null and b/sounds/phonetic/q_p.gsm differ diff --git a/sounds/phonetic/r_p.gsm b/sounds/phonetic/r_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..47d554651da63ff21f9938fe22ce8052826ffcc2 Binary files /dev/null and b/sounds/phonetic/r_p.gsm differ diff --git a/sounds/phonetic/s_p.gsm b/sounds/phonetic/s_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..8a85860a5169da5737e2cf48cb39cd9968df3453 Binary files /dev/null and b/sounds/phonetic/s_p.gsm differ diff --git a/sounds/phonetic/t_p.gsm b/sounds/phonetic/t_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..3701e08c6d4ced3828b4bccaa6c62604fcfd8e84 Binary files /dev/null and b/sounds/phonetic/t_p.gsm differ diff --git a/sounds/phonetic/u_p.gsm b/sounds/phonetic/u_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..39b388834861b2766376f51b2627b8fae2bf7d89 Binary files /dev/null and b/sounds/phonetic/u_p.gsm differ diff --git a/sounds/phonetic/v_p.gsm b/sounds/phonetic/v_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..ad907350152e9500938bdf6e332c83a224417218 Binary files /dev/null and b/sounds/phonetic/v_p.gsm differ diff --git a/sounds/phonetic/w_p.gsm b/sounds/phonetic/w_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..9d2199c102046072eb47dd6c4c525eafe5deb1ae Binary files /dev/null and b/sounds/phonetic/w_p.gsm differ diff --git a/sounds/phonetic/x_p.gsm b/sounds/phonetic/x_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..86269a9be821f9eb449926cbdd162ae36f1142df Binary files /dev/null and b/sounds/phonetic/x_p.gsm differ diff --git a/sounds/phonetic/y_p.gsm b/sounds/phonetic/y_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..ce70b060956c71b5d4edb0bf1a4c43d603162155 Binary files /dev/null and b/sounds/phonetic/y_p.gsm differ diff --git a/sounds/phonetic/z_p.gsm b/sounds/phonetic/z_p.gsm new file mode 100755 index 0000000000000000000000000000000000000000..e7165c1e992148f5dc0277dbd4fe2d6f99b4d3f1 Binary files /dev/null and b/sounds/phonetic/z_p.gsm differ