diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index a2328e85..ee6649ef 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -91,10 +91,10 @@ Dictionary es_dict @- a aI e E eI eU i o oI u -* b B d D f g j -J J^ k l l^ m n n^ -p Q r R s t T tS -v w x +* ** b B d D f g +j J J^ k l l^ m n +n^ p Q r R s t T +tS v w x Dictionary fi_dict @@ -115,11 +115,10 @@ Dictionary fr_dict E~ i i: o O O~ u W w^i W~ y Y -* - : ; b c d dZ -f g h j k l L m -n N n^ p r R s S -t t2 tS v w z Z z2 -z3 +* : ; b c d dZ f +g h j k l L m n +N n^ p r R s S t +t2 tS v w z Z z2 z3 Dictionary hi_dict @@ -214,10 +213,10 @@ Dictionary sk_dict l- l: o o: oU r- r: u u: -* b d d; dZ f g h -j k l l^ m n N n^ -p r R R^ R^/ s S t -t; tS ts v x z Z +* : b d d; dZ f g +h j k l l^ m n N +n^ p r R R^ R^/ s S +t t; tS ts v x z Z Dictionary sv_dict @@ -387,3 +386,7 @@ O u j k l m n N n^ p r R s S t tS v w x z + + +Dictionary ja_dict + diff --git a/dictsource/en_list b/dictsource/en_list index 89773d84..a98f12a0 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -2567,6 +2567,7 @@ he %hi: $verbsf she %Si: $only $verbsf it %It $verbsf (it has) I2t||h'az $atend +it $allcaps $abbrev we %wi: $verbf $only you %ju: $verbf they %DeI $verbf diff --git a/dictsource/en_rules b/dictsource/en_rules index 4917fee4..ecad5aeb 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -3151,7 +3151,7 @@ lle (_ l @@o) lled (_$3v d @@) lled (_$3v d - B) l (_N @L + B) l (_ @L w) l (_ l r) l (_ l Al) l (_ @@ -4743,8 +4743,10 @@ j) une (_ u:n l) une (_ u:n r) une (_ u:n +?3 t) une (_ u:n _) una (b ,Vna2 t) un (e ju:n +?3 t) un (e u:n _) un (if ju:n un (ani %ju:n _) under (@P5 ,Vnd3 // prefix diff --git a/dictsource/es_list b/dictsource/es_list index 6d6dda8b..beae3b9f 100644 --- a/dictsource/es_list +++ b/dictsource/es_list @@ -148,7 +148,7 @@ siquiera $pause porque $pause // because // questions -que $u+ $pause // what +que $u $pause // what cuál $pause // which cuáles $pause cómo $pause // how diff --git a/dictsource/es_rules b/dictsource/es_rules index 55207f86..ad6f60da 100644 --- a/dictsource/es_rules +++ b/dictsource/es_rules @@ -129,7 +129,7 @@ _) r (_ E*e r R _) r R - A) r (A * + A) r (A ** C) r (A @-* rr *R diff --git a/dictsource/fr_list b/dictsource/fr_list index 05e105e6..d241e739 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -1,10 +1,11 @@ + // This file in UTF8 encoded // 2006-11-18 Gilles Casse // -// Updated 2008-01-21 Michel Such +// Updated 2008-01-25 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -173,11 +174,13 @@ _dpt virg'yl abc $abbrev ac $abbrev adsl $abbrev +alt $pause amd $abbrev api $abbrev +avh $abbrev cci $abbrev cio $abbrev -ctrl kO~tRol +ctrl kO~tRol $pause dept depaRt@mA~ etc etseteRa hmm h@m @@ -364,23 +367,27 @@ y i:gR'Ek $atend // pronunciation exceptions consent kO~s'A~t2 -divers div'Erz2 scient si bénéficient benefisi $verb +concurrent kO~kyR'A~ +couvent k'uvt2 $verb +dessus d@sy +dessous d@su +divers divErz2 +►évident evid'A~ +évident evidt2 $verb +ferment fErm'A~ +ferment f'Ermt2 $verb +parent paR'A~ +parent p'art2 $verb +pastis pastis président pRezid'A~ président pRezidt2 $verb résident Rezid'A~ résident Rezidt2 $verb ressent r@s'A~t2 -►évident evid'A~ -évident evidt2 $verb -couvent k'uvt2 $verb -concurrent kO~kyR'A~ récurrent RekyR'A~ -ferment fErm'A~ -ferment f'Ermt2 $verb -parent paR'A~ -parent p'art2 $verb +riz ri sergent sErZ'A~ serment sErm'A~ serpent sErp'A~ @@ -405,23 +412,18 @@ accident aksidA~ adéquat adekuat2 adéquate adekuat ardent aRdA~ -boeufs bY bus bys -choeur kWr +choeur k@r discident disidA~ fils fis -haillon _|ajO~ -haricot _|aRiko imprudent E~pRydA~ -juin ZwE~ +juin ZuE~ mars maRs occident OksidA~ -oeufs Y orient ORjA~ pays pEi prudent pRydA~ secret sYkRE -secrets sYkREz2 souris suri @@ -435,9 +437,6 @@ s'y si $verbf qu'y ki $verbf (sud est) sydEst (nord est) nOREst -cci $abbrev -nvda $abbrev -open Op'@n potentiomètre pOtA~sjOmEtR@- processus pROsEsys @@ -462,11 +461,10 @@ out aut rut Ryt scorbut skORbyt scout skut -scouts skut stout staut uppercut ypERkyt ut yt -zut syt +zut zyt // et (t is said) @@ -509,8 +507,6 @@ flirt fl@Rt (sweat shirt) swEtS@Rt (tee shirt) tiS@Rt -parfum paRfW~ -forum fOROm // words from other languages amazon amaz'On @@ -551,6 +547,7 @@ new nj'u news nj'uz night najt ok oke +open Op'@n outlook autluk player plEj'@r reader Ri:d@R @@ -563,7 +560,7 @@ skype sk'ajp@- spybot spajbOt sun s@n sunlight s@nlajt -(text aloud) tEkst||@lau-d +(text aloud) tEkst||@lawd thunderbird f@ndERb@Rd ubuntu ubuntu update @pd'E:jt @@ -578,26 +575,23 @@ yacht jot // tions (tjO~ instead of sjO~) achetions aS@tjO~z2 -ajoutions aZutjO~z2 apportions apORtjO~z2 apprêtions apREtjO~z2 arrêtions aREtjO~z2 chantions SA~tjO~z2 -citions sitjO~z2 comptions kO~tjO~z2 constations kO~statjO~z2 contentions kO~tA~tjO~z2 dations datjO~z2 discutions diskytjO~z2 -doutions dutjO~z2 débutions debytjO~z2 -désertions dezERtjO~z2 +désertions dezERtjO~z2 $verb détentions detA~tjO~z2 escomptions EskO~tjO~z2 exploitions EksplwatjO~z2 exportions EkspORtjO~z2 habitions abitjO~z2 -heurtions @RtjO~z2 +heurtions _!@RtjO~z2 jetions Z@tjO~z2 limitions limitjO~z2 méritions meRitjO~z2 @@ -605,8 +599,7 @@ partions paRtjO~z2 pressentions pREsA~tjO~z2 présentions pRezA~tjO~z2 prêtions pREtjO~z2 -rations RatjO~z2 -redoutions R@dutjO~z2 +rations RatjO~z2 $verb représentions R@pRezA~tjO~z2 respections REspEktjO~z2 ressentions R@sA~tjO~z2 @@ -618,7 +611,6 @@ supportions sypORtjO~z2 tentions tA~tjO~z2 traitions tREtjO~z2 votions vOtjO~z2 $u -écoutions ekutjO~z2 étions etjO~z2 évitions evitjO~z2 @@ -634,3 +626,4 @@ vincent vE~sA~ + diff --git a/dictsource/fr_rules b/dictsource/fr_rules index f075ef0e..dbd13251 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -3,7 +3,7 @@ // 2006-11-18 Gilles Casse // -// Updated: 2008-01-21 Michel Such +// Updated: 2008-01-25 Michel Such // // * The rules are based on Cicero TTS. // @@ -107,15 +107,14 @@ quon) d (_ t2 dt (_ t // Schmidt + _ni) d (_ // nid + _noeu) d (_ // noeud r) d (_ // lourd placard d d // don bled .group e e (Ce_ E - AC) e (_ @- // e muet - CC) e (_ @- // e muet - gu) e (_ @- // e muet eau o // bateau cheveaux j) e (a // Jean Jeanne sp) ea (k i: // speak speaker @@ -210,6 +209,7 @@ en (s_ A~ en (CA A~ // pentathlon en (CC A~ // entre + en (ch_ En // french _C) er (_ ER // fer _Ch) er (_ ER // cher @@ -249,14 +249,15 @@ _r) es (A @s // resaisir resaluer _r) e (ss @ // ressembler + _r) e (ssu e // ressusciter _r) e (stra @ _r) e (stre @ _r) e (stro @ _r) e (stru @ // restructurer -) est (_ Est // -est - @Cr) es (_C =@ - rC) es (_C =@ // fortes dames + @Cr) es (_C @- + rC) es (_C @- // fortes dames ') eu (_ y // eu eu (r_ @ // peur @@ -282,17 +283,20 @@ ez (_ ez2 // nez mangez chez _C) e (_ @ // je te - _CC) e (_ @ + _CC) e (_ @- _qu) e (_ @ // que - @Cr) e (_C =@ // quatre pattes - rC) e (_C =@ + @Cr) e (_C @- // quatre pattes + CC) e (_C @- + ch) e (_C @- + gu) e (_C @- + qu) e (_C @- e (_ // montre g) e (A // mangeons - AC) e (ment // vitement sûrement + AC) e (ment @- // vitement sûrement Aqu) e (ment enC) e (ment enqu) e (ment @@ -386,11 +390,13 @@ .group h _) h (ac _! // hache +_) h (ai _! // haine haillon _) h (al _! // halte _) h (amp _! // hampe _) h (an _! // hanche _) h (app _! // happer _) h (arc _! // harceler +_) h (ari _! // haricot haridelle _) h (arna _! // harnais _) h (ard _! // hardi _) h (arp _! // harpe @@ -398,6 +404,7 @@ _) h (au _! // haut _) h (av _! // havre _) h (ern _! // hernie _) h (ers _! // herse +_) h (eurt _! // heurter _) h (ibo _! // hibou _) h (ide _! // hideux _) h (oll _! // hollandais @@ -500,19 +507,22 @@ _) h (utte_ _! // hutte cr) oc (_ o // escroc o (ch o // cochon + o (che_ O // poche, cloche oe (ll wa // moelleux _) oe (C Y // oesophage - o (eu // soeur oeuf + oeu @ // soeur coeur + oeufs @ // oeufs boeufs o (eC o // coefficient _) oi (gnon O // oignons oin (C wE~ oin (_ wE~ // coin oi wa // poil oid (_ wa // froid - oê (l wE // poêle + oê (l wa // poêle oî wa // boîte o (mm O // comme - dr) o (me_ o // vélodrome + radi) o (C o // radiophonique + dr) o (me_ O // vélodrome ph) o (ne_ O // téléphone om (b O~ // bombe om (p O~ // pompe @@ -606,7 +616,6 @@ _) h (utte_ _! // hutte _A) qu (a ku // équateur qu k // quatre _) que (_ k@ // que - que (_ k@- // puisque banque... _) qu' (P3 k // qu'il n) q (_ k // cinq cent @@ -616,8 +625,6 @@ _) h (utte_ _! // hutte _su) rr RR // surréaliste cou) rr RR // courrai mou) rr RR // mourrai - rre (_ R@- // barre -C) re (_ R@- // litre rr R // erreur r r // rien @@ -682,16 +689,11 @@ V) t (_ t2 // silent at end of verb unless next word starts with a vowe Vn) t (_ t2 // silent at end of verb unless next word starts with a vowel n) t (_ // silent at end of word r) t (_ t2 // fort - tte (_ t@- // fillette C) te (_ t@- // patte -a) te (_ t@- // tomate aul) t (_ // Renault tt t // attitude - tte (_ t@- // fillette -A) te (_ t@- // tomate -C) te (_ t@- // pente s) th (m // asthme th t // théorie @@ -712,6 +714,9 @@ C) te (_ t@- // pente t (ion s // programmation + Cisi) t (ion t // visitions + ci) t (ion t // citions + ou) t (ion t // ajoutions s) t (ion t // gestion t) t (ion t // combattions @@ -739,13 +744,14 @@ C) te (_ t@- // pente u y // cruel nuage brut ui w^i + c) ueill Wj // cueillir + c) ueil (_ Wj // recueil g) ueill Wj // orgueilleux g) ueil (_ Wj // orgueil - c) ueill Wj - c) ueil (_ Wj um (_ Om // album + f) um (_ W~ // parfum um (b W~ // humble um (p W~ un (C W~ // emprunt lundi @@ -763,7 +769,8 @@ C) te (_ t@- // pente .group w w w - ware (_ _^_EN // hardware, software + wa (Ce_ wE // hardware software wave + w (agon v // wagon .group x @@ -853,3 +860,4 @@ C) te (_ t@- // pente + diff --git a/dictsource/sk_list b/dictsource/sk_list index a897fc7e..449f9dde 100644 --- a/dictsource/sk_list +++ b/dictsource/sk_list @@ -2,54 +2,94 @@ // This file is UTF-8 encoded // Letters -_a a: -á d,l-he:'a: -ä 'a:prehlasovane: -b be: -c tse: -č tSe: -d de: -ď d;e: -e e: -é d,l-he:'e: -f ef -g ge: -h ha: -i i: -í d,l-he:'i: -j je: -_k ka: -l el -ľ el^ -ĺ d,l-he:'el -m em -n en -ň en^ -_o o: -ó d,l-he:'o: -ô 'o:sv,oka:n^om -p pe: -q kve: -r er -_s es -š eS -t te: -ť t;e: -u u: -ú dl-he:'u: -_v ve: -w dv'ojite:,ve: -x iks -y ipsilon -ý d,l-he:'i: -_z zet -ž Zet +_a a: +á d,l-he:'a: +ä 'a:pRehlasovane: +b be: +c tse: +č tSe: +d de: +ď d;e: +e e: +é d,l-he:'e: +f ef +g ge: +h ha: +i i: +í d,l-he:'i: +j je: +_k ka: +l el +ľ el^ +ĺ d,l-he:'el +m em +n en +ň en^ +_o o: +ó d,l-he:'o: +ô 'o:sv,oka:n^om +p pe: +q kve: +r eR +ř eR^ +_s es +š eS +t te: +ť t;e: +u u: +ú dl-he:'u: +ů 'u:s_kR'oUZkem +_v ve: +w dv'ojite:,ve: +x iks +y ipsilon +ý d,l-he:'i: +_z zet +ž Zet +// character names +_cap vel^ke: +_?? simbol +_#9 tab +_#32 'medzeRa +_?A znak + +_! vi:kRitSn^i:k +_" u:vodzovki +_# kRi:Zik +_$ dola:R +_& ampeRsand +_' apostRof +_( za:tvoRka +_) zatvoRit; +_* hviezda ++ plus +_, tSiaRka +_- pomltSka +_. bodka +_/ lomeno +_: dvojbodka +_; bodkotSiaRka +_< menSi: +_= Rovna:sa +_> vetSSi: +_? ota:zn^ik +_@ zavin:atS +_[ hRanata:||za:tvoRka +_\ opatSne:||lomeno +_] hRanata:||zatvoRit; +_^ stRieZka +_` aktsent +_{ zloZena:||za:tvoRka +_| zvisla:||tSiaRa +_} zloZena:||zatvoRit; +_~ vlnovka +€ euRo // Numbers _0 n'ula -_1 j'ed;en +_1 j'eden _2 dv'a _3 t'@-*i _4 St'i*i @@ -59,7 +99,7 @@ _7 s'ed;em _8 'osem _9 d;'ev&t; _10 d;'esat; -_11 j'ed;ena:st; +_11 j'edena:st; _12 dv'ana:st; _13 t@-*'ina:st; _14 Str-n'a:st; @@ -82,7 +122,7 @@ _0M1 t;'isi:ts _1M1 t;'isi:ts _2M1 dv'et;'isi:ts _0M2 m'ilio:n -_0M3 m'iljarda +_0M3 m'iljaRda _dpt _:tSj,arka_ diff --git a/dictsource/sk_rules b/dictsource/sk_rules index 6be726b5..b09462e2 100644 --- a/dictsource/sk_rules +++ b/dictsource/sk_rules @@ -639,7 +639,7 @@ _charak) te (r te .group ě e ů u: // czech - $ dola:r - % pertsento - + plus + $ dola:R + % peRtsento + D_) % peRtsent diff --git a/phsource/compile_report b/phsource/compile_report index 960d7310..74141ae8 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -45 phoneme tables +46 phoneme tables new total base 98 98 base2 24 117 @@ -15,7 +15,7 @@ eo 13 110 jbo 4 111 fi 40 129 - fr 38 122 + fr 42 122 fr_ca 11 122 hi 50 134 ta 15 136 @@ -45,6 +45,7 @@ sw 14 107 th 50 141 id 14 119 + ja 7 103 Data file Used by b/b [b] base @@ -83,6 +84,7 @@ d/d [d] base [d[] base [d] base2 [d] fi + [d] fr [d] hi [d.] hi [d] hu @@ -98,6 +100,7 @@ d/d_ [d] base [d[] base [d] base2 [d] fi + [d] fr [d] hi [d.] hi [d] hu @@ -115,6 +118,7 @@ d/dr [*] base [d[] base [d] base2 [d] fi + [d] fr [d] hi [d.] hi [d] hu @@ -128,6 +132,7 @@ d/dr [*] base [d] sw d/tap [*;] ro d/tap1 [*] base +d/tap2 [t#] en_us d/tap3 [*] base d/tap4 [r] es d/tap_i [*;] ro @@ -135,6 +140,7 @@ d/xd [d] base [d[] base [d] base2 [d] fi + [d] fr [d] hi [d.] hi [d] hu @@ -146,6 +152,7 @@ d/xd [d] base [d] sw d/xd_pzd [d;] pl [d;] ru +d/x_tap [t#] en_us dzh/dzh [dZ] base [dZ;] base [dz;] base @@ -192,11 +199,11 @@ envelope/p_fallrise [4] vi envelope/p_level [1] vi [3] zhy [6] zhy - [44] zh [55] zh envelope/p_rise [3] vi [2] zhy [5] zhy + [44] zh [35] zh [4] th envelope/vi_5 [5] vi @@ -209,14 +216,17 @@ g2/xg [g-] base [g] hi g/g [g] base [g] cy + [g] fr [g] hi [g] es g/g_ [g] base [g] cy + [g] fr [g] hi [g] es g/xg [g] base [g] cy + [g] fr [g] es h/h_ [h] base [h] fi @@ -303,6 +313,7 @@ l/_l [l] base [l] en_wi [l] af [l/] de + [l] fr [l] hu [l] sk [l] ru @@ -353,6 +364,7 @@ l/tl [l] base [l] en [l] en_wi [l] af + [l] fr [l] hu [l] sk [l] ru @@ -551,11 +563,14 @@ ufric/f_ [f] base ufric/ll [L] base [l#] is ufric/s [s] base + [s] fr [s] es [s#] pt ufric/s_ [s] base [z] base [s2] fi + [s] fr + [z] fr [z2] fr [z3] fr [s2] hu @@ -564,14 +579,17 @@ ufric/s_ [s] base [z;] ro ufric/s! [s] base [s2] fi + [s] fr [s2] hu [s] es [s#] pt ufric/s_continue [s2] fi [s2] hu ufric/sh [S] base + [S] fr [s#] pt_pt ufric/sh_ [S] base + [S] fr [s#] pt_pt ufric/sh_pzd [S;] base [S;] ro @@ -753,6 +771,7 @@ ustop/t_pzd [t;] pl ustop/tr [t] base [t[] base [t2] en + [t] fr [t.h] hi [t] ru ustop/ts [ts] base2 @@ -1022,8 +1041,8 @@ vdiph/y#y_2 [Yy] af [eoi] zhy vdiph/y#y_3 [Y:] nl vnasal/aa_n [A~] en +vnasal/aa_n2 [A~] fr vnasal/aa_n3 [A~] af - [A~] fr vnasal/a#_n [&~] pt vnasal/a#u_n [&U~] pt [&U~] pt_pt @@ -1083,6 +1102,7 @@ voc/v_ [B] base [v;] ro [v] is voc/vj [v] base + [v] fr vocw/dh [D] base [D] es vocw/Q [Q] base @@ -1100,10 +1120,12 @@ vocw/zh [Z] base [Z;] ro vocw/zh_rfx [z.] base voc/z [z] base + [z] fr [z2] fr [z3] fr [z;] ro voc/z_ [z] base + [z] fr [z2] fr [z3] fr [z;] ro @@ -1131,7 +1153,6 @@ vowel/@ [@] base [@4] hi [@] th vowel/@- [@-] base - [@-] fr [r*] hr vowel/& [a] en_rp [&] fi @@ -1148,8 +1169,7 @@ vowel/0_2 [0] en_n vowel/0_3 [O] en_sc [0] en_rp [A] hu -vowel/@_2 [@] fr - [W] fr +vowel/@_2 [W] fr vowel/@_3 [@] en_sc [I] en_sc [@2] en_sc @@ -1187,6 +1207,7 @@ vowel/a [a] en_n [a] th [a:] th [a] id + [a] ja vowel/a# [a/] base2 [a2] en_sc [a2] en_wi @@ -1341,6 +1362,7 @@ vowel/e_mid [E] en_rp [E] is [E] id [E2] id + [e] ja vowel/e_mid2 [E] af [E] de [E2] de @@ -1354,6 +1376,7 @@ vowel/e_mid2 [E] af vowel/@_fnt [@] en_wi [@2] en_wi [@2] hr +vowel/@_fr [@] fr vowel/@_hgh [@] hr vowel/i [i] base2 [i:] en_n @@ -1377,6 +1400,7 @@ vowel/i [i] base2 [i] sw [i] th [i:] th + [i] ja vowel/i# [i] en_us [i] en_rp [y:] cy @@ -1507,6 +1531,7 @@ vowel/oo [O:] en_sc [O] th [O:] th [O] id + [o] ja vowel/oo_1 [O:] en_n [O:] en_rp [O@] en_rp @@ -1565,7 +1590,6 @@ vowel/u [u:] en_wi vowel/u# [u-] en [u:] en_sc vowel/u_2 [u1] fi - [u] fr [u] sk [U] hr [u] ro @@ -1576,13 +1600,14 @@ vowel/u_4 [u:] en_n vowel/u#_4 [U] en_sc [u:] en_sc vowel/u_5 [u] sw -vowel/u#_5 [u:] en_us vowel/u_6 [U] pt_pt [u] pt_pt +vowel/u#_6 [u:] en_us vowel/u_7 [u] vi vowel/u_bck [u] base2 [U] cy [u] fi + [u] fr [u] fr_ca [u:] hi [u:] hu @@ -1615,6 +1640,7 @@ vowel/uu_bck [U] en_n [U] pt [U] no [u] zhy +vowel/u_unr [u] ja vowel/V [3] en_sc vowel/V_2 [V] en [a] af @@ -1824,6 +1850,7 @@ x/b [b] base x/b_ [b] base x/d [d] base [t#] en_us + [d] fr [d.] hi [d] hr [d] el @@ -1832,6 +1859,7 @@ x/d_ [d] base [d[] base [d] base2 [d] fi + [d] fr [d] hi [d.] hi [d] pl @@ -1870,10 +1898,12 @@ x/dz_pzd [dZ;] base x/dz_pzd_ [J2] hi x/g_ [g] base [g] cy + [g] fr [g] es [g] is x/g2 [g] base [g] cy + [g] fr [g] hi [g] es [g] is diff --git a/phsource/d/tap2 b/phsource/d/tap2 index 5417dd88..01dc9ce8 100644 Binary files a/phsource/d/tap2 and b/phsource/d/tap2 differ diff --git a/phsource/d/tap4 b/phsource/d/tap4 index 410ee52e..b91910fa 100644 Binary files a/phsource/d/tap4 and b/phsource/d/tap4 differ diff --git a/phsource/ph_english_us b/phsource/ph_english_us index 13e93761..5af25f63 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -27,7 +27,7 @@ endphoneme phoneme a vowel starttype (a) endtype (@) - length 200 + length 210 formants vwl_en_us/a reduceto a2 0 endphoneme @@ -52,7 +52,7 @@ endphoneme phoneme E vowel starttype (e) endtype (e) - length 180 + length 185 // formants vowel/ee_2 formants vwl_en_us/ee reduceto I 0 @@ -161,7 +161,7 @@ endphoneme phoneme o@ vowel starttype (o) endtype (@) - length 260 + length 250 formants vwl_en_us/or appendph r endphoneme @@ -178,8 +178,8 @@ endphoneme phoneme u: vowel starttype (u) endtype (u) length 170 - formants vowel/u#_5 -// before l/2 vwl_en/u_L-40+l/L2_uL + formants vowel/u#_6 +// formants vowel/u#_5 endphoneme @@ -228,7 +228,7 @@ endphoneme phoneme i@3 vowel starttype (i) endtype (@) - length 260 + length 250 formants vwl_en_us/ir appendph r endphoneme @@ -271,12 +271,11 @@ endphoneme phoneme t# // reduced [t] as in "city" - vls alv stop - vowelin f1=0 f2=1700 -300 300 f3=-100 80 - vowelout f1=0 f2=1700 -300 300 f3=-100 80 - lengthmod 5 - wave x/d%70 + vcd alv stop + vowelin f1=1 f2=1700 -300 300 f3=-100 80 + vowelout f1=2 f2=1700 -300 300 f3=-100 80 + formants d/tap2+x/d%70 + after @ d/x_tap + lengthmod 2 endphoneme - - diff --git a/phsource/ph_french b/phsource/ph_french index 71329aee..0126481b 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -13,16 +13,7 @@ phoneme @ vowel starttype (@) endtype (@) unstressed length 170 - formants vowel/@_2 -endphoneme - - -phoneme @- // very short schwa - vowel nonsyllabic - starttype (@) endtype (@) - formants vowel/@- - unstressed - length 20 + formants vowel/@_fr endphoneme @@ -80,8 +71,8 @@ endphoneme phoneme u vowel starttype (u) endtype (u) - length 170 - formants vowel/u_2 + length 160 + formants vowel/u_bck endphoneme @@ -101,7 +92,8 @@ endphoneme phoneme w liquid - length 130 + unstressed + length 100 beforenotvowel w/ lengthmod 7 formants w/w @@ -128,7 +120,7 @@ endphoneme phoneme A~ vowel starttype (a) endtype (a) length 180 - formants vnasal/aa_n3 + formants vnasal/aa_n2 endphoneme @@ -194,14 +186,74 @@ endphoneme //=========== // uses the consonants in file "phonemes", unless overridden here +phoneme b + vcd blb stop + vowelout f1=0 f2=1000 -500 -300 f3=-300 80 brk + formants b/b+x/b%45 + before _ b/b_+x/b%45 + before (a) b/ba+x/b%45 + before (@) b/b@+x/b%45 + before (e) b/be+x/b%45 + before (i) b/bi+x/b%45 + before (o) b/bo+x/b%45 + before (u) b/bu+x/b%45 + before @- b/b@2+x/b%45 + after _ NULL + after @ b/xb%45 + lengthmod 5 + switchvoicing p +endphoneme + + +phoneme d + vcd alv stop + vowelin f1=0 f2=1700 -300 300 f3=-100 80 + vowelout f1=0 f2=1700 -300 300 f3=-100 80 + formants d/d%30+x/d%30 + before _ d/d_%30+x/d_%30 + before r d/dr%60+x/d%60 + after _ NULL + after @ d/xd%40 + lengthmod 5 + switchvoicing t +endphoneme + + +phoneme g + vcd vel stop + vowelin f1=2 f2=2300 200 300 f3=-300 80 + vowelout f1=2 f2=2300 250 300 f3=-300 80 brk + formants g/g%30+x/g2%30 + before _ g/g_+x/g_ + after _ NULL + after @ g/xg%30 + lengthmod 5 + switchvoicing k +endphoneme + + +phoneme k + vls vel stop + vowelin f1=0 f2=2300 200 400 f3=-100 80 + vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 + lengthmod 2 + wave ustop/k%45 // reduce strength of noise burst + before _ ustop/k_%45 + before r ustop/kr%45 + before l ustop/kl%45 + before (i) ustop/ki%45 + switchvoicing g +endphoneme + + phoneme l liquid length 100 lengthmod 7 // beforenotvowel l/ formants l/l -// after _ l/_l -// after t l/tl + after _ l/_l + after t l/tl after l/ l/l_long // double l, make it longer before (a) l/la before (e) l/le @@ -213,15 +265,31 @@ phoneme l endphoneme +phoneme p + vls blb stop + vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 + vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 + lengthmod 2 + wave ustop/p%45 + before _ ustop/p_%45 + before r ustop/pr%45 + before R ustop/pr%45 + before @- ustop/p_unasp%45 + before l ustop/pl%45 + switchvoicing b +endphoneme + + phoneme r vcd uvl frc vowelin f1=0 f2=800 -100 100 f3=-400 100 + vowelout f1=0 f2=800 -100 100 f3=-400 100 len=0 rms=20 length 100 lengthmod 7 beforenotvowel r/ - formants vwl_fr/@R%40 - after t r/tr - before _ r3/r_ + formants vwl_fr/@R%60 + after t r/tr%60 + before _ r3/r_%60 endphoneme @@ -231,8 +299,8 @@ phoneme R length 100 lengthmod 7 beforenotvowel r/ - formants vwl_fr/@R%40 - after r r/rr + formants vwl_fr/@R%60 + after r r/rr%60 endphoneme @@ -240,8 +308,34 @@ phoneme r/ // used for [r] when not preceding a vowel vcd uvl frc length 100 lengthmod 2 // - formants r3/r_+r3/rx - before n r3/r_n+r3/rx + formants r3/r_+r3/rx%60 + before n r3/r_n+r3/rx%60 +endphoneme + + +phoneme s + vls alv frc sibilant + vowelin f1=0 f2=1700 -300 300 f3=-100 80 + vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 + lengthmod 3 + wave ufric/s%45 + before _ ufric/s_%45 + before p ufric/s!%45 + before t ufric/s!%45 + before k ufric/s!%45 + switchvoicing z +endphoneme + + +phoneme S + vls pla frc sibilant + vowelin f1=0 f2=2100 100 300 f3=-100 80 + vowelout f1=0 f2=2100 100 300 f3=-100 80 + length 100 + lengthmod 3 + wave ufric/sh%45 + before _ ufric/sh_%45 + switchvoicing Z endphoneme @@ -250,11 +344,11 @@ phoneme t vowelin f1=0 f2=1700 -100 100 f3=-100 80 vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t%50 - before _ ustop/t_%40 - before @- ustop/t%50 -// before r ustop/tr -// before R ustop/tr + wave ustop/t%30 + before _ ustop/t_%30 + before @- ustop/t%30 + before r ustop/tr%30 + before R ustop/tr%30 switchvoicing d endphoneme @@ -265,8 +359,30 @@ phoneme t2 // silent unless followed by vowel vowelin f1=0 f2=1600 -300 300 f3=-100 80 vowelout f1=0 f2=1600 -300 250 f3=-100 80 rms=20 lengthmod 2 - wave ustop/t - before _ ustop/t_ + wave ustop/t%45 + before _ ustop/t_%45 +endphoneme + + +phoneme v + vcd lbd frc + vowelin f1=0 f2=1000 -300 -200 f3=-300 100 + vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=10 + lengthmod 6 + formants voc/v+vocw/v%75 + before (r) voc/vj+vocw/v%75 + before _ voc/v_+vocw/v%75 + switchvoicing f +endphoneme + + +phoneme z + vcd alv frc sibilant + vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 + formants voc/z+ufric/s_%45 + before _ voc/z_+ufric/s_%45 + lengthmod 6 + switchvoicing s endphoneme @@ -274,8 +390,8 @@ phoneme z2 // silent unless followed by vowel beforenotvowel NULL vcd alv frc sibilant vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_ - before _ voc/z_+ufric/s_ + formants voc/z+ufric/s_%45 + before _ voc/z_+ufric/s_%45 lengthmod 6 endphoneme @@ -284,68 +400,8 @@ phoneme z3 // "six" and "dix". [s] before pause, [z] before vowel, else [] beforenotvowel NULL vcd alv frc sibilant vowelout f1=0 f2=1700 -300 300 f3=-100 60 len=50 - formants voc/z+ufric/s_ - before _ voc/z_+ufric/s_ + formants voc/z+ufric/s_%45 + before _ voc/z_+ufric/s_%45 lengthmod 6 endphoneme - - -phoneme k - vls vel stop - vowelin f1=0 f2=2300 200 400 f3=-100 80 - vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 - lengthmod 2 - wave ustop/k%60 // reduce strength of noise burst - before _ ustop/k_ - before r ustop/kr - before l ustop/kl - before (i) ustop/ki - switchvoicing g -endphoneme - - -phoneme v - vcd lbd frc - vowelin f1=0 f2=1000 -300 -200 f3=-300 100 - vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50 - lengthmod 6 - formants voc/v+vocw/v - before _ voc/v_+vocw/v - switchvoicing f -endphoneme - - -phoneme p - vls blb stop - vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 - vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22 - lengthmod 2 - wave ustop/p - before _ ustop/p_ - before r ustop/pr%70 - before R ustop/pr - before @- ustop/p_unasp - before l ustop/pl - switchvoicing b -endphoneme - - -phoneme b - vcd blb stop - vowelout f1=0 f2=1000 -500 -300 f3=-300 80 brk - formants b/b+x/b - before _ b/b_+x/b - before (a) b/ba+x/b - before (@) b/b@+x/b - before (e) b/be+x/b - before (i) b/bi+x/b - before (o) b/bo+x/b - before (u) b/bu+x/b - before @- b/b@2+x/b - after _ NULL - after @ b/xb - lengthmod 5 - switchvoicing p -endphoneme - diff --git a/phsource/ph_zh b/phsource/ph_zh index 3486d574..7a766a4b 100644 --- a/phsource/ph_zh +++ b/phsource/ph_zh @@ -5,7 +5,7 @@ phoneme 11 // tone: low level stress - tone 15 10 envelope/p_fall NULL + tone 12 9 envelope/p_fall NULL endphoneme phoneme 21 // tone: low fall @@ -20,12 +20,12 @@ endphoneme phoneme 22 // tone: mid-low level stress - tone 21 19 envelope/p_fall NULL + tone 22 20 envelope/p_fall NULL endphoneme phoneme 33 // tone: mid level stress - tone 31 29 envelope/p_fall NULL + tone 32 30 envelope/p_fall NULL endphoneme phoneme 35 // tone: mid rise @@ -35,7 +35,7 @@ endphoneme phoneme 44 // tone: mid-high level stress - tone 41 39 envelope/p_level NULL + tone 38 41 envelope/p_rise NULL endphoneme phoneme 51 // tone: high fall diff --git a/phsource/phonemes b/phsource/phonemes index 23302d5b..9e453b25 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -594,13 +594,13 @@ endphoneme phoneme ** // TEST flap after consonant liquid alv - vowelout f1=3 f2=1700 -300 300 f3=-300 80 rms=35 len=15 - vowelin f1=0 f2=1700 -300 300 f3=-300 80 + vowelout f1=3 f2=1600 -300 300 f3=-300 80 rms=35 len=15 + vowelin f1=0 f2=1600 -300 300 f3=-300 80 formants r3/@tap+r3/rx - vowelin f1=0 f2=1700 -300 300 f3=-400 80 + vowelin f1=3 f2=1600 -300 300 f3=-300 80 before (i) r3/@tap_i+r3/rx before (e) r3/@tap_i+r3/rx - vowelin f1=2 f2=1700 -300 300 f3=-300 80 + vowelin f1=2 f2=1600 -300 300 f3=-300 80 before (a) r3/@tap+r3/rx endphoneme @@ -1270,3 +1270,5 @@ include ph_thai phonemetable id base2 include ph_indonesian +phonemetable ja base +include ph_japanese diff --git a/phsource/r3/@tap b/phsource/r3/@tap index 07ebef58..480db11f 100644 Binary files a/phsource/r3/@tap and b/phsource/r3/@tap differ diff --git a/phsource/r3/@tap_i b/phsource/r3/@tap_i index 64a2e48c..6f6ec400 100644 Binary files a/phsource/r3/@tap_i and b/phsource/r3/@tap_i differ diff --git a/phsource/vdiph/8u b/phsource/vdiph/8u index 0339c285..df4023d5 100644 Binary files a/phsource/vdiph/8u and b/phsource/vdiph/8u differ diff --git a/phsource/vdiph/aoo b/phsource/vdiph/aoo index a00fd14f..f3e6fb84 100644 Binary files a/phsource/vdiph/aoo and b/phsource/vdiph/aoo differ diff --git a/phsource/vdiph/ooi_4 b/phsource/vdiph/ooi_4 index 8424bf6a..02793956 100644 Binary files a/phsource/vdiph/ooi_4 and b/phsource/vdiph/ooi_4 differ diff --git a/phsource/vdiph2/ei_4 b/phsource/vdiph2/ei_4 index 267ff01e..300d02f9 100644 Binary files a/phsource/vdiph2/ei_4 and b/phsource/vdiph2/ei_4 differ diff --git a/phsource/vowel/V_6 b/phsource/vowel/V_6 index 46faf887..894ae87f 100644 Binary files a/phsource/vowel/V_6 and b/phsource/vowel/V_6 differ diff --git a/phsource/vowel/aa_4 b/phsource/vowel/aa_4 index 3c4db515..da2359f3 100644 Binary files a/phsource/vowel/aa_4 and b/phsource/vowel/aa_4 differ diff --git a/phsource/vowel/ee b/phsource/vowel/ee index 7b7327cf..766fb26d 100644 Binary files a/phsource/vowel/ee and b/phsource/vowel/ee differ diff --git a/phsource/vowel/i#_5 b/phsource/vowel/i#_5 index 419a78a4..00b24ef5 100644 Binary files a/phsource/vowel/i#_5 and b/phsource/vowel/i#_5 differ diff --git a/phsource/vowel/u#_3 b/phsource/vowel/u#_3 index 91b07ede..792d2afc 100644 Binary files a/phsource/vowel/u#_3 and b/phsource/vowel/u#_3 differ diff --git a/phsource/vowel/u#_5 b/phsource/vowel/u#_5 index ef3827ee..edb43991 100644 Binary files a/phsource/vowel/u#_5 and b/phsource/vowel/u#_5 differ diff --git a/phsource/vowel/u_bck b/phsource/vowel/u_bck index 9f890538..ce6cb4ed 100644 Binary files a/phsource/vowel/u_bck and b/phsource/vowel/u_bck differ diff --git a/phsource/vowel/u_unr b/phsource/vowel/u_unr index 3352cb8e..c92f0f79 100644 Binary files a/phsource/vowel/u_unr and b/phsource/vowel/u_unr differ diff --git a/phsource/vowel/vowelchart.png b/phsource/vowel/vowelchart.png index 211021b5..f959bf7a 100644 Binary files a/phsource/vowel/vowelchart.png and b/phsource/vowel/vowelchart.png differ diff --git a/phsource/vwl_en_us/a b/phsource/vwl_en_us/a index 3d9556ec..1f5cf20a 100644 Binary files a/phsource/vwl_en_us/a and b/phsource/vwl_en_us/a differ diff --git a/phsource/vwl_en_us/ir b/phsource/vwl_en_us/ir index 9b5ae294..da6ff64d 100644 Binary files a/phsource/vwl_en_us/ir and b/phsource/vwl_en_us/ir differ diff --git a/phsource/vwl_en_us/or b/phsource/vwl_en_us/or index d4e998e6..01347beb 100644 Binary files a/phsource/vwl_en_us/or and b/phsource/vwl_en_us/or differ diff --git a/src/dictionary.cpp b/src/dictionary.cpp index c9a44b6a..c411a210 100755 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -177,7 +177,7 @@ int Translator::LoadDictionary(const char *name, int no_error) length = pw[1]; if(size <= (N_HASH_DICT + sizeof(int)*2)) { - fprintf(stderr,"Empty dictionary: '%s\n",fname); + fprintf(stderr,"Empty _dict file: '%s\n",fname); return(2); } if((pw[0] != N_HASH_DICT) || (length <= 0) || (length > 0x8000000)) diff --git a/src/intonation.cpp b/src/intonation.cpp index 6c88abb5..83335052 100755 --- a/src/intonation.cpp +++ b/src/intonation.cpp @@ -247,7 +247,8 @@ static int drops_0[8] = {0x400,0x400,0x700,0x700,0x700,0xa00,0x1800,0x0e00}; static short oflow[] = {0, 20, 12, 4, 0}; static short oflow_emf[] = {5, 24, 15, 10, 5}; -static short oflow_less[] = {1, 17, 10, 5, 1}; +static short oflow_less[] = {3, 19, 12, 7, 2}; +static short oflow_test2[] = {20, 0, 20, 0, 20}; static short back_emf[] = {35, 32, 0}; typedef struct { @@ -278,7 +279,7 @@ typedef struct { unsigned char tail_shape; } TONE_TABLE; -#define N_TONE_TABLE 11 +#define N_TONE_TABLE 13 static TONE_TABLE tone_table[N_TONE_TABLE] = { {PITCHfall, 30, 5, PITCHfall, 30, 8, // 0 statement @@ -297,14 +298,14 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = { 20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 15, 5, 0}, - {PITCHfall, 28, 6, PITCHfall, 28, 10, // 5 statement, less intonation - 20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 12, 6, 0}, + {PITCHfall, 28, 5, PITCHfall, 28, 9, // 5 statement, less intonation + 20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 12, 7, 0}, - {PITCHfrise2, 33,11, PITCHfall, 28,10, // 6 comma, less intonation - 20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 9,14, 0}, + {PITCHfrise2, 32,8, PITCHfrise2, 28,9, // 6 comma, less intonation + 20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 10,16, 0}, - {PITCHfrise2, 28, 7, PITCHfall, 28, 12, // 7 comma, less intonation, less rise - 20, 25, 30, 22, drops_0, 4, 3, 5, oflow_less, NULL, 14, 8, 0}, + {PITCHfrise2, 28, 7, PITCHfall, 29, 14, // 7 comma, less intonation, less rise + 20, 25, 32, 24, drops_0, 4, 3, 5, oflow_less, NULL, 14, 8, 0}, {PITCHrise, 30, 20, PITCHfall, 19, 14, // 8 pitch raises at end of sentence 20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 24, 30, 0}, @@ -315,6 +316,12 @@ static TONE_TABLE tone_table[N_TONE_TABLE] = { {PITCHfrise, 39, 15, PITCHfall, 28, 14, // 10 question 20, 25, 34, 22, drops_0, 3, 3, 5, oflow, NULL, 20, 36, 0}, + {PITCHfall, 28, 6, PITCHfall, 28, 10, // 11 test + 20, 25, 24, 22, drops_0, 3, 3, 5, oflow_less, NULL, 12, 6, 0}, + + {PITCHfall, 35, 9, PITCHfall, 35, 12, // 12 test + 19, 26, 36, 20, drops_0, 2, 4, 5, oflow_test2, NULL, 16, 10, 0}, + }; @@ -327,8 +334,9 @@ unsigned char punctuation_to_tone[INTONATION_TYPES][PUNCT_INTONATIONS] = { {5,7,1,0,0,4}, {8,9,10,3,0,0}, {8,8,10,3,0,0}, - {0,1,2,3,0,4}, - {0,1,2,3,0,0} }; + {11,11,11,11,0,0}, // 6 test + {12,12,12,12,0,0} +}; @@ -738,10 +746,10 @@ void Translator::CalcPitches_Tone(int clause_tone) PHONEME_TAB *prev2_tph; // 2 tones previous PHONEME_LIST *prev_p; - int pitch_adjust = 10; // pitch gradient through the clause - inital value + int pitch_adjust = 0; // pitch gradient through the clause - inital value int pitch_decrement = 0; // decrease by this for each stressed syllable - int pitch_low = 10; // until it drops to this - int pitch_high = 10; // then reset to this + int pitch_low = 0; // until it drops to this + int pitch_high = 0; // then reset to this p = &phoneme_list[0]; diff --git a/src/readclause.cpp b/src/readclause.cpp index 9495288c..6d1f6f65 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -1759,7 +1759,7 @@ f_input = f_in; // for GetC etc c2 = GetC(); } - while(!Eof()) + while(!Eof() || (ungot_char != 0)) { if(!iswalnum(c1)) { @@ -1791,7 +1791,7 @@ f_input = f_in; // for GetC etc if((option_ssml) && (phoneme_mode==0)) { - if((c1 == '&') && ((c2=='#') || isalpha(c2))) + if((c1 == '&') && ((c2=='#') || ((c2 >= 'a') && (c2 <= 'z')))) { n_xml_buf = 0; c1 = c2; @@ -1818,6 +1818,10 @@ f_input = f_in; // for GetC etc { c1 = j; } + else + { + c1 = '&'; + } } if((sayas_mode == 0x14) && (c1 <= 0x20)) { diff --git a/src/speak_riscos.cpp b/src/speak_riscos.cpp index 048a2124..3c683ab3 100644 --- a/src/speak_riscos.cpp +++ b/src/speak_riscos.cpp @@ -76,6 +76,7 @@ char textbuffile[L_tmpnam]; int sample_rate_index; // current value int current_voice_num=0; int n_voice_files = 0; +int n_voice_variant_files = 0; // output sound buffer, 2 bytes per sample static unsigned short SoundBuf[4096]; @@ -84,7 +85,9 @@ static int callback_inhibit = 0; static int more_text=0; #define N_VOICE_NAMES 60 -static char *voice_names[40]; +#define N_VOICE_VARIANT_NAMES 30 +static char *voice_names[N_VOICE_NAMES]; +static char *voice_variant_names[N_VOICE_VARIANT_NAMES]; #define N_STATIC_BUF 8000 static char static_buf[N_STATIC_BUF]; @@ -127,9 +130,9 @@ static const char *help_text = "--punct=\"\"\n" "\t Speak the names of punctuation characters during speaking. If\n" "\t = is omitted, all punctuation is spoken.\n" -//"--voices=\n" -//"\t List the available voices for the specified language.\n" -//"\t If is omitted, then list all voices.\n" +"--voices=\n" +"\t List the available voices for the specified language.\n" +"\t If is omitted, then list all voices.\n" "-k \n" "\t Indicate capital letters with: 1=sound, 2=the word \"capitals\",\n" "\t higher values = a pitch increase (try -k20).\n"; @@ -169,6 +172,7 @@ int GetFileLength(const char *filename) void ReadVoiceNames2(char *directory) {//================================== int len; + int path_len; int *type; char *p; _kernel_swi_regs regs; @@ -184,6 +188,8 @@ void ReadVoiceNames2(char *directory) regs.r[5] = sizeof(buf); regs.r[6] = 0; + path_len = strlen(directory); + while(regs.r[3] > 0) { error = _kernel_swi(0x0c+os_X,®s,®s); /* OS_GBPB 10, read directory entries */ @@ -202,11 +208,25 @@ void ReadVoiceNames2(char *directory) } else { - p = Alloc(len+1); + p = (char *)malloc(len+1); strcpy(p,&buf[20]); - voice_names[n_voice_files++] = p; - if(n_voice_files >= (N_VOICE_NAMES-1)) - break; + + if(strcmp(&directory[path_len-3],".!v")==0) + { + if(n_voice_variant_files >= (N_VOICE_VARIANT_NAMES-1)) + continue; + voice_variant_names[n_voice_variant_files++] = p; + } + else + { + if(n_voice_files >= (N_VOICE_NAMES-1)) + continue; + voice_names[n_voice_files++] = p; + if(strcmp(p,"en")==0) + { + voice_names[n_voice_files++] = "en+f2"; + } + } } } } @@ -216,13 +236,15 @@ void ReadVoiceNames() {//=================== char directory[sizeof(path_home)+10]; - for(n_voice_files=0; n_voice_fileslangopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words + break; + case L_jbo: // Lojban { static const short stress_lengths_jbo[8] = {185,170, 200,200, 0,0, 290,300}; diff --git a/src/voice.h b/src/voice.h index 9ed5980a..275c7c45 100644 --- a/src/voice.h +++ b/src/voice.h @@ -38,6 +38,8 @@ typedef struct { int peak_shape; // alternative shape for formant peaks (0=standard 1=squarer) int voicing; // 100% = 64, level of formant-synthesized sound int formant_factor; // adjust nominal formant frequencies by this because of the voice's pitch (256ths) + int consonant_amp; // amplitude of unvoiced consonants + int consonant_ampv; // amplitude of the noise component of voiced consonants // parameters used by Wavegen short freq[N_PEAKS]; // 100% = 256 diff --git a/src/voices.cpp b/src/voices.cpp index a6fcaffb..2ed11796 100755 --- a/src/voices.cpp +++ b/src/voices.cpp @@ -29,7 +29,9 @@ #ifdef PLATFORM_WINDOWS #include "windows.h" #else -#ifndef PLATFORM_RISCOS +#ifdef PLATFORM_RISCOS +#include "kernel.h" +#else #include "dirent.h" #endif #endif @@ -103,7 +105,7 @@ espeak_VOICE voice_selected; // these need a phoneme table to have been specified #define V_REPLACE 28 - +#define V_CONSONANTS 29 typedef struct { @@ -141,6 +143,7 @@ static keywtab_t keyword_tab[] = { {"numbers", V_NUMBERS}, {"option", V_OPTION}, {"mbrola", V_MBROLA}, + {"consonants", V_CONSONANTS}, // these just set a value in langopts.param[] {"l_dieresis", 0x100+LOPT_DIERESES}, @@ -368,6 +371,9 @@ void VoiceReset(int tone_only) voice->n_harmonic_peaks = 5; voice->peak_shape = 1; voice->voicing = 64; + voice->consonant_amp = 100; + voice->consonant_ampv = 100; + #ifdef PLATFORM_RISCOS voice->roughness = 1; #else @@ -836,6 +842,10 @@ voice_t *LoadVoice(const char *vname, int control) voice->breathw[0] = Read8Numbers(p,&voice->breathw[1]); break; + case V_CONSONANTS: + value = sscanf(p,"%d %d",&voice->consonant_amp, &voice->consonant_ampv); + break; + case V_MBROLA: { int srate = 16000; @@ -937,8 +947,10 @@ char *ExtractVoiceVariantName(char *vname, int variant_num) char *p; static char variant_name[20]; + char variant_prefix[5]; variant_name[0] = 0; + sprintf(variant_prefix,"!v%c",PATHSEP); if(vname != NULL) { @@ -953,7 +965,7 @@ char *ExtractVoiceVariantName(char *vname, int variant_num) else { // voice variant name, not number - strcpy(variant_name,"!v/"); + strcpy(variant_name,variant_prefix); strncpy0(&variant_name[3],p,sizeof(variant_name)-3); } } @@ -962,9 +974,9 @@ char *ExtractVoiceVariantName(char *vname, int variant_num) if(variant_num > 0) { if(variant_num < 10) - sprintf(variant_name,"!v/m%d",variant_num); // male + sprintf(variant_name,"%sm%d",variant_prefix, variant_num); // male else - sprintf(variant_name,"!v/f%d",variant_num-10); // female + sprintf(variant_name,"%sf%d",variant_prefix, variant_num-10); // female } return(variant_name); @@ -1409,6 +1421,54 @@ void GetVoices(const char *path) char fname[sizeof(path_home)+100]; #ifdef PLATFORM_RISCOS + int len; + int *type; + char *p; + _kernel_swi_regs regs; + _kernel_oserror *error; + char buf[80]; + char directory2[sizeof(path_home)+100]; + + regs.r[0] = 10; + regs.r[1] = (int)path; + regs.r[2] = (int)buf; + regs.r[3] = 1; + regs.r[4] = 0; + regs.r[5] = sizeof(buf); + regs.r[6] = 0; + + while(regs.r[3] > 0) + { + error = _kernel_swi(0x0c+0x20000,®s,®s); /* OS_GBPB 10, read directory entries */ + if((error != NULL) || (regs.r[3] == 0)) + { + break; + } + type = (int *)(&buf[16]); + len = strlen(&buf[20]); + sprintf(fname,"%s.%s",path,&buf[20]); + + if(*type == 2) + { + // a sub-directory + GetVoices(fname); + } + else + { + // a regular line, add it to the voices list + if((f_voice = fopen(fname,"r")) == NULL) + continue; + + // pass voice file name within the voices directory + voice_data = ReadVoiceFile(f_voice, fname+len_path_voices, &buf[20]); + fclose(f_voice); + + if(voice_data != NULL) + { + voices_list[n_voices_list++] = voice_data; + } + } + } #else #ifdef PLATFORM_WINDOWS WIN32_FIND_DATA FindFileData; diff --git a/src/wavegen.cpp b/src/wavegen.cpp index 7d556320..bb9b6385 100755 --- a/src/wavegen.cpp +++ b/src/wavegen.cpp @@ -748,12 +748,6 @@ void WavegenInit(int rate, int wavemult_fact) for(ix=0; ixa = 1.0 - rp->b - rp->c; } // end if setresonator - +#endif void InitBreath(void) {//================== +#ifndef PLATFORM_RISCOS int ix; minus_pi_t = -PI / samplerate; @@ -1069,12 +1064,14 @@ void InitBreath(void) { setresonator(&rbreath[ix],2000,200,1); } +#endif } // end of InitBreath void SetBreath() {//============= +#ifndef PLATFORM_RISCOS int pk; if(wvoice->breath[0] == 0) @@ -1089,15 +1086,17 @@ void SetBreath() setresonator(&rbreath[pk], peaks[pk].freq >> 16, wvoice->breathw[pk],0); } } +#endif } // end of SetBreath int ApplyBreath(void) {//================== + int value = 0; +#ifndef PLATFORM_RISCOS int noise; int ix; int amp; - int value = 0; // use two random numbers, for alternate formants noise = (rand() & 0x3fff) - 0x2000; @@ -1110,6 +1109,7 @@ int ApplyBreath(void) value += int(resonator(&rbreath[ix],noise) * amp); } } +#endif return (value); } @@ -1320,10 +1320,12 @@ int Wavegen() total = (total >> 6) * voicing; } +#ifndef PLATFORM_RISCOS if(wvoice->breath[0]) { total += ApplyBreath(); } +#endif // mix with sampled wave if required z2 = 0; @@ -1558,6 +1560,12 @@ void WavegenSetVoice(voice_t *v) else pk_shape = pk_shape2; + consonant_amp = (v->consonant_amp * 26) /100; + if(samplerate <= 11000) + { + consonant_amp = consonant_amp*2; // emphasize consonants at low sample rates + option_harmonic1 = 6; + } WavegenSetEcho(); } @@ -1571,7 +1579,7 @@ static void SetAmplitude(int length, unsigned char *amp_env, int value) amp_inc = (256 * ENV_LEN * STEPSIZE)/length; amplitude = (value * general_amplitude)/16; - amplitude_v = amplitude * 15; // for wave mixed with voiced sounds + amplitude_v = (amplitude * wvoice->consonant_ampv * 15)/100; // for wave mixed with voiced sounds amplitude_env = amp_env; }