mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-04 20:04:50 +00:00
Add SayPhonetic and SayAlpha applications (bug #793)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@2864 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
18
Makefile
18
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 ; \
|
||||
|
@@ -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 },
|
||||
|
@@ -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;
|
||||
|
||||
|
@@ -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
|
||||
;
|
||||
|
@@ -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);
|
||||
|
||||
|
26
pbx.c
26
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;
|
||||
|
314
say.c
314
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,15 +46,187 @@ 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)
|
||||
res = ast_waitstream(chan, ints);
|
||||
ast_stopstream(chan);
|
||||
}
|
||||
num++;
|
||||
}
|
||||
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);
|
||||
} 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++;
|
||||
}
|
||||
@@ -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 */
|
||||
|
134
sounds.txt
134
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 [=]
|
||||
|
BIN
sounds/letters/a.gsm
Executable file
BIN
sounds/letters/a.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/at.gsm
Executable file
BIN
sounds/letters/at.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/b.gsm
Executable file
BIN
sounds/letters/b.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/c.gsm
Executable file
BIN
sounds/letters/c.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/d.gsm
Executable file
BIN
sounds/letters/d.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/dash.gsm
Executable file
BIN
sounds/letters/dash.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/dollar.gsm
Executable file
BIN
sounds/letters/dollar.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/dot.gsm
Executable file
BIN
sounds/letters/dot.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/e.gsm
Executable file
BIN
sounds/letters/e.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/equals.gsm
Executable file
BIN
sounds/letters/equals.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/exclaimation-point.gsm
Executable file
BIN
sounds/letters/exclaimation-point.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/f.gsm
Executable file
BIN
sounds/letters/f.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/g.gsm
Executable file
BIN
sounds/letters/g.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/h.gsm
Executable file
BIN
sounds/letters/h.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/i.gsm
Executable file
BIN
sounds/letters/i.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/j.gsm
Executable file
BIN
sounds/letters/j.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/k.gsm
Executable file
BIN
sounds/letters/k.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/l.gsm
Executable file
BIN
sounds/letters/l.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/m.gsm
Executable file
BIN
sounds/letters/m.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/n.gsm
Executable file
BIN
sounds/letters/n.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/o.gsm
Executable file
BIN
sounds/letters/o.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/p.gsm
Executable file
BIN
sounds/letters/p.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/plus.gsm
Executable file
BIN
sounds/letters/plus.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/q.gsm
Executable file
BIN
sounds/letters/q.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/r.gsm
Executable file
BIN
sounds/letters/r.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/s.gsm
Executable file
BIN
sounds/letters/s.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/slash.gsm
Executable file
BIN
sounds/letters/slash.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/space.gsm
Executable file
BIN
sounds/letters/space.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/t.gsm
Executable file
BIN
sounds/letters/t.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/u.gsm
Executable file
BIN
sounds/letters/u.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/v.gsm
Executable file
BIN
sounds/letters/v.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/w.gsm
Executable file
BIN
sounds/letters/w.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/x.gsm
Executable file
BIN
sounds/letters/x.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/y.gsm
Executable file
BIN
sounds/letters/y.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/z.gsm
Executable file
BIN
sounds/letters/z.gsm
Executable file
Binary file not shown.
BIN
sounds/letters/zed.gsm
Executable file
BIN
sounds/letters/zed.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/9_p.gsm
Executable file
BIN
sounds/phonetic/9_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/a_p.gsm
Executable file
BIN
sounds/phonetic/a_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/b_p.gsm
Executable file
BIN
sounds/phonetic/b_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/c_p.gsm
Executable file
BIN
sounds/phonetic/c_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/d_p.gsm
Executable file
BIN
sounds/phonetic/d_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/e_p.gsm
Executable file
BIN
sounds/phonetic/e_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/f_p.gsm
Executable file
BIN
sounds/phonetic/f_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/g_p.gsm
Executable file
BIN
sounds/phonetic/g_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/h_p.gsm
Executable file
BIN
sounds/phonetic/h_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/i_p.gsm
Executable file
BIN
sounds/phonetic/i_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/j_p.gsm
Executable file
BIN
sounds/phonetic/j_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/k_p.gsm
Executable file
BIN
sounds/phonetic/k_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/l_p.gsm
Executable file
BIN
sounds/phonetic/l_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/m_p.gsm
Executable file
BIN
sounds/phonetic/m_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/n_p.gsm
Executable file
BIN
sounds/phonetic/n_p.gsm
Executable file
Binary file not shown.
2
sounds/phonetic/o_p.gsm
Executable file
2
sounds/phonetic/o_p.gsm
Executable file
@@ -0,0 +1,2 @@
|
||||
<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>P V<><56><EFBFBD>eU<65><55>$dyeVѹ[#[#P<>J<EFBFBD>B<EFBFBD>#<23>x\zI<7A><49><EFBFBD><EFBFBD><11>ܘ<EFBFBD>F<EFBFBD><46>V<EFBFBD><56><EFBFBD>T<EFBFBD><54><EFBFBD><EFBFBD><EFBFBD> 6r<><72>Էj<D4B7><6A><EFBFBD>I"<22>v.՛*<2A>{u<><75><EFBFBD><EFBFBD>L3:I<><49>j1]<5D><><1A>7Z<37>I<EFBFBD><49>d<EFBFBD>k<EFBFBD><6B>QF<51><46><EFBFBD><EFBFBD><EFBFBD><EFBFBD>E<03>z<1C><>:<3A><>#Զ<,<2C><><EFBFBD>H1<48><31><EFBFBD>Q<12>=<3D>ܡ#!<21>]i<13><03><>^[T<><54>C<EFBFBD>
|
||||
<EFBFBD>C<EFBFBD><EFBFBD>fϑ<>QD<51><44><EFBFBD>Z<EFBFBD><5A><04>-=<3D><>ӱKeC<65>d<EFBFBD><64><EFBFBD>Y#<23>D<EFBFBD><44><EFBFBD>L<EFBFBD>Q<EFBFBD><51>3YISD0;<3B>K%ӭRi<52>Se<53>5<EFBFBD><35><EFBFBD>S<EFBFBD>2<EFBFBD><32><EFBFBD>pSd<><64><EFBFBD>\<5C>f<EFBFBD>й<EFBFBD><D0B9><EFBFBD>*j^<5E>U(8<>]J<>SF<53><12>[<5B><>Ԩ
|
BIN
sounds/phonetic/p_p.gsm
Executable file
BIN
sounds/phonetic/p_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/q_p.gsm
Executable file
BIN
sounds/phonetic/q_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/r_p.gsm
Executable file
BIN
sounds/phonetic/r_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/s_p.gsm
Executable file
BIN
sounds/phonetic/s_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/t_p.gsm
Executable file
BIN
sounds/phonetic/t_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/u_p.gsm
Executable file
BIN
sounds/phonetic/u_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/v_p.gsm
Executable file
BIN
sounds/phonetic/v_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/w_p.gsm
Executable file
BIN
sounds/phonetic/w_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/x_p.gsm
Executable file
BIN
sounds/phonetic/x_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/y_p.gsm
Executable file
BIN
sounds/phonetic/y_p.gsm
Executable file
Binary file not shown.
BIN
sounds/phonetic/z_p.gsm
Executable file
BIN
sounds/phonetic/z_p.gsm
Executable file
Binary file not shown.
Reference in New Issue
Block a user