espeak_Key(key_name) If key_name is a single character, it speaks the character name. Otherwise it speaks key_name as a text string. This is the same behaviour as <say-as interpret-as="tts:key"> Fix: SAPI5 was restricted to 360 wmp. Now the top speed (390 wpm) is allowed. Fix error in phoneme translation data for mbrola "cr1" Croation voice. *_list files: Allow word groups which have no phoneme translation, so that just attributes can be set. The words are considered as a single hyphenated word. Fix: $textmode in *_list files, allow replacement by a word which is also translated in the *_list file. lang=pl: many additions to pl_rules, pl_list git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@165 d46cf337-b52f-0410-862d-fd96e6ae7743master
| @- a E E~ i O O~ u | @- a E E~ i O O~ u | ||||
| y | y | ||||
| * ; b c C d d; dZ | |||||
| dz; f g h j k l m | |||||
| n N n^ p r s S S; | |||||
| t t; tS ts ts; v w x | |||||
| z Z Z; | |||||
| * : ; b c C d d; | |||||
| dZ dz; f g h j k l | |||||
| m n N n^ p r s S | |||||
| s; S; t t; tS ts ts; tS; | |||||
| v w x z Z Z; | |||||
| Dictionary ru_dict | Dictionary ru_dict |
| _- h,aIf@n | _- h,aIf@n | ||||
| _. d0t | _. d0t | ||||
| _: koUl@n | _: koUl@n | ||||
| _; sEmIk'oUl0n | |||||
| _; sEmIk'oUl@n | |||||
| _< ElaNg@L | _< ElaNg@L | ||||
| _= i:kw@Lz | _= i:kw@Lz | ||||
| _> A@aNg@L | _> A@aNg@L |
| k ka | k ka | ||||
| l El | l El | ||||
| m Em | m Em | ||||
| n En | |||||
| //n En // in fr_rules | |||||
| ñ $accent | ñ $accent | ||||
| o o | o o | ||||
| ô $accent | ô $accent | ||||
| _{ uvR_akOlad | _{ uvR_akOlad | ||||
| _| baR | _| baR | ||||
| _} f'ERm_akOl'ad | _} f'ERm_akOl'ad | ||||
| ² pw^is'A~s||d'Y | |||||
| // numeric | // numeric |
| flig) en (t_ A~ // affligent | flig) en (t_ A~ // affligent | ||||
| Vflig) en (t_ // infligent (verbe) | Vflig) en (t_ // infligent (verbe) | ||||
| Xig) en (t_ // figent, pigent | Xig) en (t_ // figent, pigent | ||||
| oblig) en (t_ A~ // obligent, d‚sobligent | |||||
| oblig) en (t_ A~ // obligent, d�sobligent | |||||
| Voblig) en (t_ // obligent (verbe) | Voblig) en (t_ // obligent (verbe) | ||||
| man) en (t_ A~ // permanent | man) en (t_ A~ // permanent | ||||
| .group n | .group n | ||||
| _) n (_ En | |||||
| n n // une | n n // une | ||||
| nn n | nn n | ||||
| ng (_ N | ng (_ N | ||||
| A) ng (_ N // parking meeting | A) ng (_ N // parking meeting | ||||
| nn n // panne | nn n // panne | ||||
| _) n (_° nymero | |||||
| .group o | .group o | ||||
| ¥ i;En | ¥ i;En | ||||
| £ livR | £ livR | ||||
| ° d@gRe | ° d@gRe | ||||
| _n_) ° // n° | |||||
| ± pl'yz_'u_mw'E~ | ± pl'yz_'u_mw'E~ | ||||
| × myltip@-lj'e_p'aR | × myltip@-lj'e_p'aR | ||||
| ÷ diviz'e_p'aR | ÷ diviz'e_p'aR |
| _stk a:thu:za:S | _stk a:thu:za:S | ||||
| _tld tildE | _tld tildE | ||||
| // characters | |||||
| _#9 tAb | |||||
| _#32 so:kYz | |||||
| // Abbreviations | // Abbreviations | ||||
| km kilo:me:tER2 | km kilo:me:tER2 |
| // numeric | // numeric | ||||
| //******** | //******** | ||||
| ?1 _0 z'Eru | |||||
| ?1 _0 z'E*u | |||||
| ?2 _0 z'E*U | ?2 _0 z'E*U | ||||
| ?1 _1 'um | ?1 _1 'um | ||||
| ?2 _1 'uN | ?2 _1 'uN | ||||
| ?2_2X v'iNtSi | ?2_2X v'iNtSi | ||||
| _3X tr'iNt& | _3X tr'iNt& | ||||
| ?1_4X kw&r'eNt& | |||||
| ?1_4X kw&*'eNt& | |||||
| ?2_4X kwa*'eINt& | ?2_4X kwa*'eINt& | ||||
| _5X siNkw'eINt& | _5X siNkw'eINt& | ||||
| ?1_6X sys'eINt& | ?1_6X sys'eINt& | ||||
| _0Z2 seNt'Ezim& // 100ths | _0Z2 seNt'Ezim& // 100ths | ||||
| _0Z3 mil'Ezim& // 1000ths | _0Z3 mil'Ezim& // 1000ths | ||||
| // not roman numbers | |||||
| vi vi | |||||
| // ABBREVIATIONS | // ABBREVIATIONS | ||||
| //************** | //************** | ||||
| dpoc $abbrev | dpoc $abbrev | ||||
| ecg $abbrev | ecg $abbrev | ||||
| edp $abbrev | edp $abbrev | ||||
| ?1 etc ,ets'Et:r& | |||||
| ?1 etc ,ets'Et:*& | |||||
| ?2 etc ,ets'Ete*& | ?2 etc ,ets'Ete*& | ||||
| hiv $abbrev | hiv $abbrev | ||||
| (http ://) ag,atete'pe_ | (http ://) ag,atete'pe_ | ||||
| // Open [E] | // Open [E] | ||||
| nela n'El& | nela n'El& | ||||
| nessa n'Es& | nessa n'Es& | ||||
| ?1 era 'Er& | |||||
| ?2 era 'E*& | |||||
| era 'E*& | |||||
| abacaxi abakaSi | abacaxi abakaSi | ||||
| axé aSE | axé aSE | ||||
| ?1 download d'a,wnl'oud | ?1 download d'a,wnl'oud | ||||
| ?1 end 'end | ?1 end 'end | ||||
| ?1 escape Sk'eIpy | ?1 escape Sk'eIpy | ||||
| ?1 explorer ,ekspl'O:r&r- | |||||
| ?1 explorer ,ekspl'O:*&r- | |||||
| ?2 Explorer ekspl'O*er | ?2 Explorer ekspl'O*er | ||||
| ?1 eyes 'aiz | ?1 eyes 'aiz | ||||
| ?1 frame fr'eImy | ?1 frame fr'eImy |
| _) r (_ 'Exe | _) r (_ 'Exe | ||||
| _) r (_\$ xe'aU // currency | _) r (_\$ xe'aU // currency | ||||
| r r | r r | ||||
| ?1 A) r (A r | |||||
| ?2 A) r (A * | |||||
| ?1 A) r (_A r | |||||
| ?2 A) r (_A * | |||||
| A) r (A * | |||||
| A) r (_A * | |||||
| rr x | rr x | ||||
| C) r (A R // for "pt-pt" [R] is the same as [r] | C) r (A R // for "pt-pt" [R] is the same as [r] | ||||
| _) r x | _) r x |
| <head> | <head> | ||||
| <title>eSpeak</title> | <title>eSpeak</title> | ||||
| <meta name="GENERATOR" content="Quanta Plus"> | |||||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> | ||||
| </head> | </head> | ||||
| <body> | <body> | ||||
| </ul> | </ul> | ||||
| <p><b><say-as></b> | <p><b><say-as></b> | ||||
| <ul> | <ul> | ||||
| <li>interpret-as="characters" | |||||
| <li>interpret-as="characters" format="glyphs" | |||||
| <li>interpret-as="tts:key" | |||||
| <li>interpret-as="tts:char" | |||||
| <li>interpret-as="tts:digits" | |||||
| <li>interpret-as="characters"<p> | |||||
| The names of the characters are spoken. | |||||
| <li>interpret-as="characters" format="glyphs"<p> | |||||
| As "characters", but upper-case letters are prefixed with "Capital". | |||||
| <li>interpret-as="tts:key"<p> | |||||
| If the text is only one character, the name of the character is spoken, including punctuation characters. If the text is more than one character, it is spoken as words. | |||||
| <li>interpret-as="tts:char"<p> | |||||
| The name of the character is spoken, including punctuation characters. | |||||
| <li>interpret-as="tts:digits"<p> | |||||
| The digits are spoken individually. | |||||
| </ul> | </ul> | ||||
| <p><b><mark></b> name | <p><b><mark></b> name | ||||
| <p><b><s></b> | <p><b><s></b> |
| 0 g- NULL 0 NULL | 0 g- NULL 0 NULL | ||||
| 0 @- NULL 0 NULL | 0 @- NULL 0 NULL | ||||
| 0 * NULL 0 r | 0 * NULL 0 r | ||||
| 0 r* NULL 0 NULL | |||||
| 0 I NULL 0 i | 0 I NULL 0 i | ||||
| 0 U NULL 0 u | 0 U NULL 0 u | ||||
| 0 & NULL 0 a | 0 & NULL 0 a | ||||
| 0 A NULL 0 a | 0 A NULL 0 a | ||||
| 0 @ NULL 0 e | 0 @ NULL 0 e | ||||
| 0 @2 NULL 0 e | |||||
| 0 aI NULL 60 a j | 0 aI NULL 60 a j | ||||
| 0 iI NULL 60 i j | 0 iI NULL 60 i j | ||||
| 0 a: NULL 0 a | |||||
| 0 e: NULL 0 e | |||||
| 0 i: NULL 0 i | |||||
| 0 o: NULL 0 o | |||||
| 0 u: NULL 0 u | |||||
| 0 tS; NULL 0 tS' | 0 tS; NULL 0 tS' | ||||
| 0 dZ; NULL 0 dZ' | 0 dZ; NULL 0 dZ' |
| // use mbrola de6 German voice for "grc" (Ancient Greek) | |||||
| 0 i NULL 0 i: | |||||
| 0 e NULL 0 e: | |||||
| 0 E NULL 0 E: | |||||
| 0 a NULL 0 a: | |||||
| 0 a/ NULL 0 a: | |||||
| 0 O NULL 0 O | |||||
| 0 o NULL 0 o: | |||||
| 0 y NULL 0 Y | |||||
| 0 aI NULL 60 a: j | |||||
| 0 EI NULL 70 E: j | |||||
| 0 OI NULL 70 O j | |||||
| 0 oI NULL 60 o: j | |||||
| 0 yI NULL 60 Y j | |||||
| 0 aU NULL 0 aU | |||||
| 0 eU NULL 60 e: w | |||||
| 0 EU NULL 70 E: w | |||||
| 0 OU NULL 70 O w | |||||
| 0 l/ NULL 0 l | |||||
| 0 f NULL 0 pf | |||||
| volume 32 | |||||
| // CR1 doesn't like same phonemes twice | |||||
| 0 e E 5 e _ | |||||
| 0 s s 5 s _ | |||||
| 0 ? k 5 k _ | |||||
| 0 t t 5 t _ | |||||
| 0 m m 5 m _ | |||||
| 0 n n 5 n _ | |||||
| 0 p p 5 p _ | |||||
| 0 l/ l 5 l _ | |||||
| 0 l/2 NULL 0 l | |||||
| 0 l/ NULL 0 l | |||||
| 0 r/ NULL 0 r | |||||
| 0 r- NULL 0 r | |||||
| 0 l- NULL 0 l | |||||
| 0 w/ NULL 0 w | |||||
| 0 j/ NULL 0 j | |||||
| 2 ; i 0 NULL | |||||
| 0 ; NULL 0 NULL | |||||
| 0 - NULL 0 NULL | |||||
| 0 g- NULL 0 NULL | |||||
| 0 @- NULL 0 NULL | |||||
| 0 * NULL 0 r | |||||
| 0 a NULL 0 V | |||||
| 0 E NULL 0 e | |||||
| 0 i NULL 0 I | |||||
| 0 o NULL 0 Q | |||||
| 0 O NULL 0 Q | |||||
| 0 u NULL 0 U | |||||
| 0 n^ NULL 0 nY | |||||
| 0 ? NULL 0 k | |||||
| 0 S NULL 60 s j | |||||
| 0 v NULL 0 f | |||||
| 0 R NULL 0 r | |||||
| 0 x NULL 0 h | |||||
| [Setup] | [Setup] | ||||
| AppName=eSpeak | AppName=eSpeak | ||||
| AppVerName=eSpeak version 1.34 | |||||
| AppVerName=eSpeak version 1.36 | |||||
| AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). | ||||
| WindowVisible=yes | WindowVisible=yes | ||||
| [Setup] | [Setup] | ||||
| AppName=eSpeakEdit | AppName=eSpeakEdit | ||||
| AppVerName=eSpeakEdit version 1.34 | |||||
| AppVerName=eSpeakEdit version 1.36 | |||||
| DefaultDirName={pf}\eSpeak | DefaultDirName={pf}\eSpeak | ||||
| DefaultGroupName=eSpeak | DefaultGroupName=eSpeak | ||||
| OutputBaseFilename=setup_espeakedit | OutputBaseFilename=setup_espeakedit |
| LIBDIR=$(PREFIX)/usr/lib | LIBDIR=$(PREFIX)/usr/lib | ||||
| DATADIR=$(PREFIX)/usr/share/espeak-data | DATADIR=$(PREFIX)/usr/share/espeak-data | ||||
| RELEASE = 1.35 | |||||
| RELEASE = 1.36 | |||||
| BIN_NAME = speak | BIN_NAME = speak | ||||
| BIN2_NAME = espeak | BIN2_NAME = espeak | ||||
| LIB_NAME = libespeak.so | LIB_NAME = libespeak.so | ||||
| ifeq ($(AUDIO),pulseaudio) | ifeq ($(AUDIO),pulseaudio) | ||||
| WAVE=wave_pulse.cpp | WAVE=wave_pulse.cpp | ||||
| LIB_AUDIO=pulse | |||||
| USE_AUDIO=USE_PULSEAUDIO | |||||
| LIB_AUDIO=-lpulse | |||||
| USE_AUDIO=-DUSE_PULSEAUDIO | |||||
| else ifeq ($(AUDIO),portaudio) | |||||
| WAVE=wave.cpp | |||||
| LIB_AUDIO=-lportaudio | |||||
| USE_AUDIO=-DUSE_PORTAUDIO | |||||
| else | else | ||||
| WAVE=wave.cpp | WAVE=wave.cpp | ||||
| LIB_AUDIO=portaudio | |||||
| USE_AUDIO=USE_PORTAUDIO | |||||
| endif | endif | ||||
| speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ | speak_SOURCES = speak.cpp compiledict.cpp dictionary.cpp intonation.cpp \ | ||||
| SRCS1=$(speak_SOURCES) | SRCS1=$(speak_SOURCES) | ||||
| OBJS1=$(patsubst %.cpp,%.o,$(SRCS1)) | OBJS1=$(patsubst %.cpp,%.o,$(SRCS1)) | ||||
| LIBS1=-lstdc++ -l$(LIB_AUDIO) -lpthread $(EXTRA_LIBS) | |||||
| LIBS1=-lstdc++ $(LIB_AUDIO) -lpthread $(EXTRA_LIBS) | |||||
| SRCS2=$(libespeak_SOURCES) | SRCS2=$(libespeak_SOURCES) | ||||
| OBJS2=$(patsubst %.cpp,x_%.o,$(SRCS2)) | OBJS2=$(patsubst %.cpp,x_%.o,$(SRCS2)) | ||||
| LIBS2=-lstdc++ -l$(LIB_AUDIO) -lpthread | |||||
| LIBS2=-lstdc++ $(LIB_AUDIO) -lpthread | |||||
| SRCS3 = espeak.cpp | SRCS3 = espeak.cpp | ||||
| OBJS3=$(patsubst %.cpp,%.o,$(SRCS3)) | OBJS3=$(patsubst %.cpp,%.o,$(SRCS3)) | ||||
| LIBS3=-lstdc++ -L . -lespeak | LIBS3=-lstdc++ -L . -lespeak | ||||
| CXXFLAGS=-O2 -D$(USE_AUDIO) | |||||
| CXXFLAGS=-O2 | |||||
| all: $(BIN_NAME) $(LIB_NAME) $(STATIC_LIB_NAME) $(BIN2_NAME) | all: $(BIN_NAME) $(LIB_NAME) $(STATIC_LIB_NAME) $(BIN2_NAME) | ||||
| mv $(LIB_NAME) $(LIB_NAME).$(LIBTAG) | mv $(LIB_NAME) $(LIB_NAME).$(LIBTAG) | ||||
| .cpp.o: | .cpp.o: | ||||
| $(CXX) $(CXXFLAGS) -D PATH_ESPEAK_DATA=\"$(DATADIR)\" -Wall -pedantic -I. -c -fno-exceptions $< | |||||
| $(CXX) $(CXXFLAGS) $(USE_AUDIO) -D PATH_ESPEAK_DATA=\"$(DATADIR)\" -Wall -pedantic -I. -c -fno-exceptions $< | |||||
| $(BIN_NAME): $(OBJS1) | $(BIN_NAME): $(OBJS1) | ||||
| $(CXX) -o $@ $(OBJS1) $(LIBS1) | $(CXX) -o $@ $(OBJS1) $(LIBS1) | ||||
| x_%.o: %.cpp | x_%.o: %.cpp | ||||
| $(CXX) $(CXXFLAGS) -Wall -fpic -pedantic \ | |||||
| $(CXX) $(CXXFLAGS) $(USE_AUDIO) -Wall -fpic -pedantic \ | |||||
| -I. -D LIBRARY -c -fno-exceptions $< -o x_$*.o | -I. -D LIBRARY -c -fno-exceptions $< -o x_$*.o | ||||
| $(LIB_NAME): $(OBJS2) | $(LIB_NAME): $(OBJS2) |
| if(control == 4) | if(control == 4) | ||||
| c = phonPAUSE; // pause after each character | c = phonPAUSE; // pause after each character | ||||
| if(((count % 3) == 0) || (control == 4)) | |||||
| if(((count % 3) == 0) || (control > 2)) | |||||
| c = phonPAUSE_SHORT; // pause following a primary stress | c = phonPAUSE_SHORT; // pause following a primary stress | ||||
| else | else | ||||
| continue; // remove marker | continue; // remove marker |
| c2 = ' '; | c2 = ' '; | ||||
| } | } | ||||
| if((sayas_mode == 0x14) && (c1 <= 0x20)) | |||||
| if((c1 <= 0x20) && ((sayas_mode == SAYAS_SINGLE_CHARS) || (sayas_mode == SAYAS_KEY))) | |||||
| { | { | ||||
| c1 += 0xe000; // move into unicode private usage area | c1 += 0xe000; // move into unicode private usage area | ||||
| } | } |
| void sync_espeak_Key(const char *key) | void sync_espeak_Key(const char *key) | ||||
| {//================================== | {//================================== | ||||
| // symbolic name, symbolicname_character - is there a system resource of symbolic names per language? | // symbolic name, symbolicname_character - is there a system resource of symbolic names per language? | ||||
| int letter; | |||||
| int ix; | |||||
| ix = utf8_in(&letter,key,0); | |||||
| if(key[ix] == 0) | |||||
| { | |||||
| // a single character | |||||
| sync_espeak_Char(letter); | |||||
| return; | |||||
| } | |||||
| my_unique_identifier = 0; | my_unique_identifier = 0; | ||||
| my_user_data = NULL; | my_user_data = NULL; | ||||
| Synthesize(0, key,0); // for now, just say the key name as passed | |||||
| Synthesize(0, key,0); // speak key as a text string | |||||
| } | } | ||||
| #endif | #endif | ||||
| espeak_ERROR espeak_Key(const char *key_name); | espeak_ERROR espeak_Key(const char *key_name); | ||||
| /* Speak the name of a keyboard key. | /* Speak the name of a keyboard key. | ||||
| Currently this just speaks the "key_name" as given | |||||
| If key_name is a single character, it speaks the name of the character. | |||||
| Otherwise, it speaks key_name as a text string. | |||||
| Return: EE_OK: operation achieved | Return: EE_OK: operation achieved | ||||
| EE_BUFFER_FULL: the command can not be buffered; | EE_BUFFER_FULL: the command can not be buffered; |
| #include "translate.h" | #include "translate.h" | ||||
| #include "wave.h" | #include "wave.h" | ||||
| const char *version_string = "1.35 07.Mar.08"; | |||||
| const char *version_string = "1.36 09.Mar.08"; | |||||
| const int version_phdata = 0x013400; | const int version_phdata = 0x013400; | ||||
| int option_device_number = -1; | int option_device_number = -1; |
| tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :) | tr->langopts.max_initial_consonants = 7; // for example: wchrzczony :) | ||||
| tr->langopts.numbers=0x1009 + 0x4000; | tr->langopts.numbers=0x1009 + 0x4000; | ||||
| tr->langopts.numbers2=0x40; | tr->langopts.numbers2=0x40; | ||||
| tr->langopts.param[LOPT_COMBINE_WORDS] = 2 + 0x100; // combine 'nie' (marked with $alt2) with some 1-syllable words (marked with $alt) | |||||
| tr->langopts.param[LOPT_COMBINE_WORDS] = 4 + 0x100; // combine 'nie' (marked with $alt2) with some 1-syllable (and 2-syllable) words (marked with $alt) | |||||
| SetLetterVowel(tr,'y'); | SetLetterVowel(tr,'y'); | ||||
| } | } | ||||
| break; | break; |
| int prefix_flags = 0; | int prefix_flags = 0; | ||||
| int confirm_prefix; | int confirm_prefix; | ||||
| int spell_word; | int spell_word; | ||||
| int stress_bits; | |||||
| int emphasize_allcaps = 0; | int emphasize_allcaps = 0; | ||||
| int wflags = wtab->flags; | int wflags = wtab->flags; | ||||
| int wmark = wtab->wmark; | int wmark = wtab->wmark; | ||||
| else | else | ||||
| { | { | ||||
| found = LookupDictList(&word1, phonemes, dictionary_flags, FLAG_ALLOW_TEXTMODE, wtab); // the original word | found = LookupDictList(&word1, phonemes, dictionary_flags, FLAG_ALLOW_TEXTMODE, wtab); // the original word | ||||
| if(dictionary_flags[0] & FLAG_TEXTMODE) | |||||
| { | |||||
| stress_bits = dictionary_flags[0] & 0x7f; | |||||
| found = LookupDictList(&word1, phonemes, dictionary_flags2, 0, wtab); // the text replacement | |||||
| if(dictionary_flags2[0]!=0) | |||||
| { | |||||
| dictionary_flags[0] = dictionary_flags2[0]; | |||||
| dictionary_flags[1] = dictionary_flags2[1]; | |||||
| if(stress_bits != 0) | |||||
| { | |||||
| // keep any stress information from the original word | |||||
| dictionary_flags[0] = (dictionary_flags[0] & ~0x7f) | stress_bits; | |||||
| } | |||||
| } | |||||
| } | |||||
| else | |||||
| if((found==0) && (dictionary_flags[0] & FLAG_SKIPWORDS)) | |||||
| { | |||||
| // grouped words, but no translation. Join the words with hyphens. | |||||
| wordx = word1; | |||||
| ix = 0; | |||||
| while(ix < dictionary_skipwords) | |||||
| { | |||||
| if(*wordx == ' ') | |||||
| { | |||||
| *wordx = '-'; | |||||
| ix++; | |||||
| } | |||||
| wordx++; | |||||
| } | |||||
| } | |||||
| // if textmode, LookupDictList() replaces word1 by the new text and returns found=0 | // if textmode, LookupDictList() replaces word1 by the new text and returns found=0 | ||||
| /* dictionary flags, word 1 */ | /* dictionary flags, word 1 */ | ||||
| // bits 0-3 stressed syllable, 7=unstressed | |||||
| // bits 0-3 stressed syllable, bit 6=unstressed | |||||
| #define FLAG_SKIPWORDS 0x80 | #define FLAG_SKIPWORDS 0x80 | ||||
| #define FLAG_PREPAUSE 0x100 | #define FLAG_PREPAUSE 0x100 | ||||
| // pitch,speed, | // pitch,speed, | ||||
| int embedded_default[N_EMBEDDED_VALUES] = {0,50,170,100,50, 0,0, 0,170,0,0,0,0,0}; | int embedded_default[N_EMBEDDED_VALUES] = {0,50,170,100,50, 0,0, 0,170,0,0,0,0,0}; | ||||
| static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,360,300,99,99,99, 0,360,0,0,0,0,4}; | |||||
| static int embedded_max[N_EMBEDDED_VALUES] = {0,0x7fff,400,300,99,99,99, 0,360,0,0,0,0,4}; | |||||
| #define N_CALLBACK_IX N_WAV_BUF-2 // adjust this delay to match display with the currently spoken word | #define N_CALLBACK_IX N_WAV_BUF-2 // adjust this delay to match display with the currently spoken word | ||||
| int current_source_index=0; | int current_source_index=0; |