@@ -42,6 +42,7 @@ new languages: | |||
* ti (Tigrinya) -- Biniam Gebremichael | |||
* mto (Totontepec Mixe) -- Bill Dengler, Elizabeth Resendiz | |||
* fo (Faroese) -- Andras Eliassen, iSolveIT ApS and Setur.fo/Ravnur | |||
* kaa (Karakalpak) -- atabekm | |||
### 1.51 | |||
@@ -494,6 +494,7 @@ dictionaries: \ | |||
espeak-ng-data/ja_dict \ | |||
espeak-ng-data/jbo_dict \ | |||
espeak-ng-data/ka_dict \ | |||
espeak-ng-data/kaa_dict \ | |||
espeak-ng-data/kk_dict \ | |||
espeak-ng-data/kl_dict \ | |||
espeak-ng-data/kn_dict \ | |||
@@ -725,6 +726,9 @@ espeak-ng-data/jbo_dict: dictsource/jbo_list dictsource/jbo_rules dictsource/jbo | |||
ka: espeak-ng-data/ka_dict | |||
espeak-ng-data/ka_dict: dictsource/ka_list dictsource/ka_rules dictsource/ka_extra dictsource/ka_emoji | |||
kaa: espeak-ng-data/kaa_dict | |||
espeak-ng-data/kaa_dict: dictsource/kaa_list dictsource/kaa_rules dictsource/kaa_extra dictsource/kaa_emoji | |||
kk: espeak-ng-data/kk_dict | |||
espeak-ng-data/kk_dict: dictsource/kk_list dictsource/kk_rules dictsource/kk_extra dictsource/kk_emoji | |||
@@ -0,0 +1,34 @@ | |||
// This file is UTF8 encoded | |||
// Spelling to phoneme rules for Karakalpak | |||
// Letters | |||
// Numbers | |||
_0 n'Yl | |||
_1 b'Ir | |||
_2 j'ekI | |||
_3 u#S | |||
_4 t8rt | |||
_5 b'es | |||
_6 'Alt@ | |||
_7 Z'etI | |||
_8 s'egIz | |||
_9 t'oG@z | |||
_1X 'on | |||
_2X Z@g@rm'A | |||
_3X 'ot@z | |||
_4X q'@r@q | |||
_5X 'eliw | |||
_6X 'ALp@s | |||
_7X Zetp'Is | |||
_8X seks'en | |||
_9X toqs'An | |||
_0C Z'u#z | |||
_0M1 m'@N | |||
_0M2 m@jLL@j'on | |||
_1M2 m@jLL@j'on | |||
_0M3 m@jLL@j'Ard | |||
_1M3 m@jLL@j'Ard | |||
_dpt _Z&n'e_ |
@@ -0,0 +1,150 @@ | |||
// This file is UTF8 encoded | |||
// Spelling to phoneme rules for Karakalpak language | |||
.replace | |||
// Replace Cyrillic script to Latin script | |||
а a | |||
ә á | |||
б b | |||
в v | |||
г g | |||
ғ ǵ | |||
д d | |||
е e | |||
ё yo | |||
ж j | |||
з z | |||
и i | |||
й y | |||
к k | |||
қ q | |||
л l | |||
м m | |||
н n | |||
ң ń | |||
о o | |||
ө ó | |||
п p | |||
р r | |||
с s | |||
т t | |||
у u | |||
ү ú | |||
ў w | |||
ф f | |||
х x | |||
ҳ h | |||
ц c | |||
ч ch | |||
ш sh | |||
щ sch | |||
ы ı | |||
ь ʼ | |||
ъ ʼ | |||
э e | |||
ю yu | |||
я ya | |||
.group a | |||
a A | |||
.group á | |||
á & | |||
.group b | |||
b b | |||
.group v | |||
v v | |||
.group g | |||
g g | |||
.group ǵ | |||
ǵ G | |||
.group d | |||
d d | |||
.group e | |||
e e | |||
.group j | |||
j Z | |||
.group z | |||
z z | |||
.group i | |||
i I | |||
.group y | |||
y j | |||
.group k | |||
k k | |||
.group q | |||
q q | |||
.group l | |||
l l | |||
.group m | |||
m m | |||
.group n | |||
n n | |||
.group ń | |||
ń N | |||
.group o | |||
o o | |||
.group ó | |||
ó 8 | |||
.group p | |||
p p | |||
.group r | |||
r * | |||
.group s | |||
s s | |||
sch SS | |||
sh S | |||
.group t | |||
t t | |||
.group u | |||
u U | |||
.group ú | |||
ú u# | |||
.group w | |||
w w | |||
.group f | |||
f f | |||
.group x | |||
x x | |||
.group h | |||
h h | |||
.group c | |||
c ts | |||
ch tS | |||
.group ı | |||
ı @ | |||
.group | |||
ʻ ? | |||
ş S | |||
ç tS |
@@ -0,0 +1,2 @@ | |||
name Karakalpak | |||
language kaa |
@@ -1,6 +1,6 @@ | |||
volume 15 | |||
0 l/ NULL 0 w | |||
0 l/ NULL 0 l | |||
0 l/2 w 0 l | |||
0 l/2 j 0 l | |||
0 l/2 NULL 0 w | |||
@@ -8,59 +8,76 @@ volume 15 | |||
0 r- NULL 0 r | |||
0 w/ NULL 0 w | |||
0 j/ NULL 0 y | |||
0 ; NULL 0 NULL | |||
0 g- NULL 0 NULL | |||
0 @- NULL 0 NULL | |||
0 * @- 0 r2 | |||
8 * j 0 r | |||
0 @- NULL 0 NULL | |||
0 * j 0 r | |||
0 * VWL 0 r | |||
0 * NULL 0 r2 | |||
0 : NULL 0 NULL | |||
0 ; NULL 0 NULL | |||
0 : NULL 0 | |||
0 S NULL 0 x | |||
0 S s 60 x i | |||
0 S NULL 0 x | |||
0 Z NULL 0 j | |||
0 tS NULL 0 t | |||
0 dZ NULL 0 j | |||
0 dZ NULL 0 d | |||
0 l^ NULL 0 h | |||
0 n^ NULL 0 nh | |||
0 N NULL 0 n | |||
0 N VWL 0 n | |||
0 x NULL 0 rr | |||
0 z _ 0 s2 | |||
0 s VWL 0 s | |||
0 s w 0 s | |||
0 s j 0 s | |||
0 s NULL 0 s2 | |||
8 s# VWL 0 s | |||
0 s# NULL 0 s2 | |||
8 r VWL 0 r | |||
0 r VWL 0 r | |||
0 r NULL 0 r2 | |||
0 R NULL 0 r | |||
0 j NULL 0 y | |||
// consonant combinations which are OK for br4 voice, but need epenthetic [i] for br1 br3 | |||
0 k s 90 k i | |||
0 k t 90 k i | |||
0 p s 90 p i | |||
0 p t 90 p i | |||
0 b s 90 b i | |||
0 f s 90 f i | |||
0 k b 90 k i | |||
0 k d 90 k i | |||
0 k dZ 90 k i | |||
0 k f 90 k i | |||
0 k k 90 k i | |||
0 k p 90 k i | |||
0 k s 90 k i | |||
0 k S 90 k i | |||
0 k t 90 k i | |||
0 k tS 90 k i | |||
0 t s 80 t i | |||
1 tS i 40 t i | |||
0 tS y 90 t y | |||
0 tS NULL 0 t | |||
0 z b 35 s2 | |||
0 z Z 35 s2 | |||
0 z v 35 s2 | |||
0 z dZ 35 s2 | |||
0 z l 35 s2 | |||
0 z m 35 s2 | |||
0 z n 35 s2 | |||
0 k VWL 20 k | |||
0 k w 10 k | |||
0 a/ NULL 0 a | |||
0 A NULL 0 a | |||
0 & NULL 0 a | |||
0 &/ NULL 0 a | |||
9 &~ N 0 am | |||
1 &~ N 0 am | |||
0 &~ NULL 0 am | |||
0 E NULL 0 ee | |||
9 eI m 0 em | |||
9 eI N 0 em | |||
8 eI m 10 em | |||
1 eI N 8 em | |||
0 & NULL 70 a | |||
0 i/ NULL 0 i | |||
9 i N 0 im | |||
9 i N 20 im | |||
9 i~ N 0 im | |||
0 i~ NULL 0 im | |||
9 o N 0 om | |||
9 o~ j/ 60 om i | |||
9 o N 40 om | |||
8 o~ j 70 om i | |||
9 o~ j/ 90 om i | |||
9 o~ N 0 om | |||
0 o~ NULL 0 om | |||
0 O NULL 0 oo | |||
@@ -77,12 +94,13 @@ volume 15 | |||
0 OI NULL 60 oo y | |||
0 uI NULL 60 u y | |||
0 aU NULL 55 a w | |||
0 &U~ NULL 60 @ w | |||
10 &U~ NULL 60 @ w | |||
0 eU NULL 55 e w | |||
0 EU NULL 55 ee w | |||
0 iU NULL 55 i w | |||
// English phonemes | |||
0 @ NULL 0 @ | |||
0 T NULL 0 t | |||
@@ -113,5 +131,4 @@ volume 15 | |||
0 aI@ NULL 60 a e | |||
0 aU@ NULL 0 a | |||
0 t2 NULL 0 t | |||
0 h NULL 0 NULL | |||
0 h NULL 0 rr |
@@ -0,0 +1,137 @@ | |||
// use "flag1" for soft vowels | |||
// short vowels | |||
phoneme I | |||
vwl starttype #@ endtype #@ | |||
flag1 | |||
length 100 | |||
IF thisPh(isWordEnd) THEN | |||
length 140 | |||
ENDIF | |||
FMT(vowel/ii#) | |||
endphoneme | |||
phoneme 8 | |||
vwl starttype #@ endtype #@ | |||
length 100 | |||
IF thisPh(isWordEnd) THEN | |||
length 140 | |||
ENDIF | |||
FMT(vowel/8) | |||
endphoneme | |||
phoneme u# | |||
vwl starttype @ endtype @ | |||
length 100 | |||
flag1 | |||
IF thisPh(isWordEnd) THEN | |||
length 140 | |||
ENDIF | |||
FMT(vdiph2/uw_6) | |||
endphoneme | |||
phoneme U | |||
vwl starttype #u endtype #u | |||
length 100 | |||
IF thisPh(isWordEnd) THEN | |||
length 140 | |||
ENDIF | |||
FMT(vowel/uu_2) | |||
endphoneme | |||
// long vowels | |||
phoneme A | |||
vwl starttype #a endtype #a | |||
length 200 | |||
FMT(vowel/aa_9) | |||
endphoneme | |||
phoneme a | |||
vwl starttype #a endtype #a | |||
length 200 | |||
FMT(vowel/a_5) | |||
endphoneme | |||
phoneme & | |||
vwl starttype #a endtype #a | |||
flag1 | |||
length 200 | |||
FMT(vowel/ee_2) | |||
endphoneme | |||
phoneme e | |||
vwl starttype #e endtype #e | |||
length 200 | |||
flag1 | |||
FMT(vdiph2/ii@_2) | |||
endphoneme | |||
phoneme E | |||
vwl starttype @ endtype @ | |||
length 200 | |||
FMT(vowel/@_fnt) | |||
endphoneme | |||
phoneme i | |||
vwl starttype #i endtype #i | |||
length 180 | |||
FMT(vowel/ii_8) | |||
endphoneme | |||
phoneme o | |||
vwl starttype #o endtype #o | |||
length 200 | |||
FMT(vowel/o_3) | |||
endphoneme | |||
phoneme Y | |||
vwl starttype #@ endtype #@ | |||
length 200 | |||
flag1 | |||
FMT(vowel/y#_4) | |||
endphoneme | |||
phoneme u | |||
vwl starttype #u endtype #u | |||
length 200 | |||
FMT(vowel/u_bck3) | |||
endphoneme | |||
phoneme r | |||
import_phoneme base1/R2 | |||
endphoneme | |||
phoneme t | |||
import_phoneme base2/t | |||
endphoneme | |||
phoneme G | |||
import_phoneme base1/r" | |||
endphoneme | |||
phoneme X | |||
vls uvl frc | |||
lengthmod 3 | |||
Vowelin f1=0 f2=2300 200 400 f3=-100 100 | |||
Vowelout f1=0 f2=2300 300 400 f3=-100 100 rms=20 | |||
lengthmod 3 | |||
WAV(ufric/x2, 60) | |||
endphoneme | |||
phoneme L | |||
import_phoneme sq/ll | |||
// import_phoneme base1/l- | |||
endphoneme | |||
phoneme l | |||
liquid | |||
IF nextPhW(isFlag1) THEN | |||
ELSE | |||
ChangePhoneme(L) // Hard | |||
ENDIF | |||
CALL base1/l | |||
endphoneme |
@@ -2058,3 +2058,6 @@ phonemetable qdb en | |||
include ph_langbelta | |||
phonemetable ms id | |||
phonemetable kaa kk | |||
include ph_karakalpak |
@@ -919,7 +919,9 @@ static int UpperCaseInWord(Translator *tr, char *word, int c) | |||
return 0; | |||
} | |||
void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
// Same as TranslateClause except we also get the clause terminator used (full stop, comma, etc.). | |||
// Used by espeak_TextToPhonemesWithTerminator. | |||
void TranslateClauseWithTerminator(Translator *tr, int *tone_out, char **voice_change, int *terminator_out) | |||
{ | |||
int ix; | |||
int c; | |||
@@ -983,6 +985,10 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
MAKE_MEM_UNDEFINED(&source, sizeof(source)); | |||
terminator = ReadClause(tr, source, charix, &charix_top, N_TR_SOURCE, &tone, voice_change_name); | |||
if (terminator_out != NULL) { | |||
*terminator_out = terminator; | |||
} | |||
if (tone_out != NULL) { | |||
if (tone == 0) | |||
*tone_out = (terminator & CLAUSE_INTONATION_TYPE) >> 12; // tone type not overridden in ReadClause, use default | |||
@@ -1265,7 +1271,7 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
} else { | |||
if (iswlower(prev_in)) { | |||
// lower case followed by upper case, possibly CamelCase | |||
if ((prev_out != ' ') && UpperCaseInWord(tr, &sbuf[ix], c) == 0) { // start a new word | |||
if (UpperCaseInWord(tr, &sbuf[ix], c) == 0) { // start a new word | |||
c = ' '; | |||
space_inserted = true; | |||
prev_in_save = c; | |||
@@ -1276,7 +1282,7 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
if ((tr->translator_name == L('n', 'l')) && (letter_count == 2) && (c == 'j') && (prev_in == 'I')) { | |||
// Dutch words may capitalise initial IJ, don't split | |||
} else if ((prev_out != ' ') && IsAlpha(next2_in)) { | |||
} else if (IsAlpha(next2_in)) { | |||
// changing from upper to lower case, start new word at the last uppercase, if 3 or more letters | |||
c = ' '; | |||
space_inserted = true; | |||
@@ -1601,7 +1607,6 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
if (dict_flags & FLAG_SPELLWORD) { | |||
// redo the word, speaking single letters | |||
for (pw = word; *pw != ' ';) { | |||
memset(number_buf, 0, sizeof(number_buf)); | |||
memset(number_buf, ' ', 9); | |||
nx = utf8_in(&c_temp, pw); | |||
memcpy(&number_buf[2], pw, nx); | |||
@@ -1669,6 +1674,11 @@ void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
} | |||
} | |||
void TranslateClause(Translator *tr, int *tone_out, char **voice_change) | |||
{ | |||
TranslateClauseWithTerminator(tr, tone_out, voice_change, NULL); | |||
} | |||
static int CalcWordLength(int source_index, int charix_top, short int *charix, WORD_TAB *words, int word_count) { | |||
int j; | |||
int k; |
@@ -233,6 +233,9 @@ | |||
<Target Name="ka" Inputs="$(ProjectDir)..\..\dictsource\ka_rules;$(ProjectDir)..\..\dictsource\ka_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\ka_dict" DependsOnTargets="Phonemes"> | |||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=ka" /> | |||
</Target> | |||
<Target Name="kaa" Inputs="$(ProjectDir)..\..\dictsource\kaa_rules;$(ProjectDir)..\..\dictsource\kaa_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\kaa_dict" DependsOnTargets="Phonemes"> | |||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=kaa" /> | |||
</Target> | |||
<Target Name="kk" Inputs="$(ProjectDir)..\..\dictsource\kk_rules;$(ProjectDir)..\..\dictsource\kk_list" Outputs="$(ProjectDir)..\..\espeak-ng-data\kk_dict" DependsOnTargets="Phonemes"> | |||
<Exec Command="cd $(ProjectDir)..\..\dictsource && $(TargetDir)espeak-ng.exe --path=$(ProjectDir)..\.. --compile=kk" /> | |||
</Target> |
@@ -79,6 +79,7 @@ test_phwav it e2a438778434f699d9be469c4f9ea1576ec4fd03 "ma na n^a pa ba ta da ka | |||
test_phwav ja 6d1483048991b0205b9bc82cec24340a2184c42f "ma na n^a Na N\\a pa ba ta da ka ga t_sa d_za t_s\\a d_z\\a p\\a sa za s\\a z\\a Ca ha r\`a ja wa _:_ mi mu me mo ma mi~ mu~" | |||
test_phwav jbo 1bf9cf5c4898a24d2f71eae6f8a3e260895da884 "ma na Na pa ba ta da ka ga ?a fa va xa ha tSa dZa sa za Sa Za wa ja la Ra n-a r-a l-a _:_ ma me mi mo mu m@ maI maU meI moI" | |||
test_phwav ka 74a6f31909bdc9470e203a658614b6d2c961d7c3 "ma na p#a pa ba t#a ta da k#a ka ga qa ?a ts#a tsa tSa dza dZa va sa za Sa Za ca xa qa Qa ha ra la _:_ ma me mi mo mu m@ mo:" | |||
test_phwav kaa 2fffd426cd03d47f55829ebdd539a9a2f7b3dbd0 "ma na pa ba ta da tSa dZa tsa dza ca Ja Ca ka ga fa va sa za Sa Za xa Qa ha la ja wa Ra *a _:_ mi me m& my mW mu mo ma m@" | |||
test_phwav kk bb05c59779660929d7f0a7213189d89fcfc71675 "ma na pa ba ta da tSa dZa tsa dza ca Ja Ca ka ga fa va sa za Sa Za xa Qa ha la ja wa Ra *a _:_ mi me m& my mW mu mo ma m@" | |||
test_phwav kl 9b97b1ba5f35bb41a4be67e0a329cff9f494b2b1 "ma na Na pa ta ka qa tsa va sa Sa Qa ra la l#a ja tl#a _:_ ma me mi my mo mu m& mE mV mO mW m3 m@ maI" | |||
test_phwav kn 7a4943a8f06a29a5e59892edb6a39be91b20c2c2 "ma na n.a n^a Na pa p#a ba b#a ta t#a da d#a t.a t.#a d.a d.#a ka k#a ga g#a fa va sa S;a s.a ca c#a Ja J#a ha ja ra la l.a r-a _:_ ma ma: mi mi: mu mu: me me: mo mo: maI" |