From 5ac192df81cbf401f04516d513f4ae246a7fa205 Mon Sep 17 00:00:00 2001 From: jonsd Date: Wed, 21 Dec 2011 15:43:20 +0000 Subject: [PATCH] [1.46.10] Add --version command-line option. Allow hexadecimal numbers for UTF-8 bytes in rules in *_rules files. wave_pulse.cpp, ensure wave_close is not called again while waiting. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@278 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/dict_phonemes | 57 +- dictsource/en_list | 14 +- dictsource/en_rules | 25 +- dictsource/fr_list | 9 +- dictsource/fr_rules | 3089 +++++++++++++++-------------- dictsource/hu_list | 86 +- dictsource/hu_rules | 326 ++- dictsource/ka_rules | 8 +- dictsource/kn_rules | 4 +- dictsource/ml_rules | 4 +- dictsource/ta_list | 9 +- dictsource/ta_rules | 123 +- dictsource/te_rules | 4 +- phsource/compile_report | 51 +- phsource/ph_french | 6 +- phsource/ph_italian | 3 + phsource/phonemes | 7 + phsource/vdiph/ou_2 | Bin 1558 -> 1988 bytes phsource/vowel/a_7 | Bin 1628 -> 6755 bytes phsource/vowel/o_3 | Bin 7275 -> 11303 bytes phsource/vowel/o_mid2 | Bin 1490 -> 6755 bytes phsource/vowel/vowelchart.png | Bin 72631 -> 73845 bytes platforms/windows/make_espeak.iss | 8 +- src/compiledata.cpp | 5 +- src/compiledict.cpp | 36 +- src/espeak.cpp | 29 +- src/fifo.cpp | 28 +- src/numbers.cpp | 8 +- src/setlengths.cpp | 9 +- src/speak.cpp | 9 +- src/synthdata.cpp | 2 +- src/tr_languages.cpp | 39 +- src/translate.cpp | 20 +- src/translate.h | 6 +- src/wave_pulse.cpp | 33 +- 35 files changed, 2347 insertions(+), 1710 deletions(-) diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 61dd4552..ddf1dee7 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -66,7 +66,7 @@ R3 s S t T tS v w x Z -Dictionary hu_dict 2011-11-22 +Dictionary hu_dict 2011-12-21 a A a: e E e: i i: o o: u u: Y y y: Y: @@ -102,7 +102,7 @@ p Q r R s s; t T ts v x z -Dictionary en_dict 2011-11-22 +Dictionary en_dict 2011-12-21 0 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI3 aI@ @@ -118,7 +118,7 @@ s S t T t2 tS v w x z Z z# -Dictionary eo_dict 2011-04-02 +Dictionary eo_dict 2011-12-05 @- a aI aU e eI eU i o oI u uI @@ -152,7 +152,7 @@ l m n N p r R s S s2 t v w Z -Dictionary fr_dict 2011-11-15 +Dictionary fr_dict 2011-12-14 @ @- a a- A~ e E e- E: E~ i I o O O~ u @@ -202,7 +202,7 @@ q r r. s S s. t T t. th th. v w x z -Dictionary ta_dict 2011-11-19 +Dictionary ta_dict 2011-12-21 a a: aI aU e E e: i I i: o o: u U u2 u: @@ -294,18 +294,6 @@ g h j k l m n N p r R s t w z -Dictionary lv_dict 2010-03-12 - -a a: ai au e e: ei i -i: ie iu o o: u u: ui -uo - -: b c d dZ f g h -j J k l l^ m n N -n^ p r R R2 s S t -tS ts v z Z - - Dictionary mk_dict 2007-12-19 & @ @- @2 a A a: e @@ -535,7 +523,7 @@ n^ p p` r s S t t` tS tS` v w x z Z -Dictionary ml_dict 2011-04-25 +Dictionary ml_dict 2011-12-05 @ a a# a: aI aU e E e: i I i: o o: r- u @@ -598,7 +586,7 @@ N n^ p q R s S S; t tS v w x z -Dictionary ur_dict 2009-12-02 +Dictionary ur_dict 2011-12-05 @ a a: aI aU E e: i I i: O o: U u: @@ -691,7 +679,7 @@ t. th th. tS v w x z Z -Dictionary kn_dict 2011-06-25 +Dictionary kn_dict 2011-12-05 a a: aI aU e E e: i I i: o o: r- u u: @@ -716,7 +704,7 @@ R R3 s S t T tS ts v w x X z -Dictionary te_dict 2011-03-22 +Dictionary te_dict 2011-12-05 a a: aI aU e E e: i i: l- o o: r- u u: V @@ -729,7 +717,7 @@ s s. S; t t. th th. tS v w z -Dictionary ka_dict 2011-04-11 +Dictionary ka_dict 2011-12-05 @ @- a e i o u @@ -740,7 +728,7 @@ t# tS ts ts# v w x z Z -Dictionary si_dict 2011-03-16 +Dictionary si_dict 2011-12-05 & &: @ a a: aI aU e E e: i i: o o: u u: @@ -776,7 +764,7 @@ q r s S t tS v w x z Z -Dictionary bo_dict 2011-11-17 +Dictionary bo_dict 2011-12-05 a a: e e: i i: l- o o: r- u u: @@ -786,3 +774,24 @@ dh dh. dz dzh g gh H j J k kh l m n N n. n^ p ph r s S s. t t. th th. ts tsh w z Z + + +Dictionary kk_dict 2011-12-07 + +& 8 a A e E i I +o u U u# Y + +; b d f g G h j +k l m n N p q r +s S t tS v w X z +Z + + +Dictionary lt_dict 2011-12-12 + +@ a e e: i i: o o: +u u: + +- : ; b c d f g +h j k l m n p q +r s S t tS v z diff --git a/dictsource/en_list b/dictsource/en_list index 8c4b66db..bff93f72 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -713,6 +713,7 @@ bombard $2 bonbon b0nb0n bonhomie b0n@mi: bonjour bO:nZ'U@ +booger bUg3 boogie b'u:gi bosun boUs@n boutique bu:t'i:k @@ -891,18 +892,18 @@ concise k0ns'aIs conduct k0ndVkt conduct $verb cone koUn -conflict $1 $onlys +conflict k0nflIkt $onlys conflict $verb conger k0Ng3 conscience k0nS@ns -construct $1 $onlys +construct k0nstrVkt $onlys construct $verb contemplative $2 -content $1 $onlys +content k0ntEnt $onlys content $verb $past -contest $1 $onlys +contest k0ntEst $onlys contest $verb -contract $1 $onlys +contract $1 $onlys contract $verb contralto k0ntr'altoU contraption k0ntr'apS@n @@ -1397,6 +1398,7 @@ interrogatory $3 inventory Inv@ntrI interface $1 intermin Int'3:mIn // interminable +intern $1 $onlys internee Int'3:ni: internet Int3nEt interrupt $1 $onlys @@ -1618,6 +1620,7 @@ mutate mju:t'eIt myriad mIrIad myrrh m3: ?5 myrrh mVR +myrtle m3:t@L naif naI'i:f naïve naI'i:v @@ -2377,7 +2380,6 @@ vineyard vInj3d vinyl vaInI2l viola vaI'oUl@ violin $2 -virus vaI3r@s viral vaI3r@L visa vi:z@ visit vIzI2t diff --git a/dictsource/en_rules b/dictsource/en_rules index b480c1d6..a7d00fa6 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -893,7 +893,7 @@ _) arch (AA A@k _) arch (er A@tS _) arch (et A@k - _) archi A@kI + _) archi (@ A@kI _) archiv (+ A@kaIv @) arch (y A@k @) arch (i A@k @@ -1420,7 +1420,7 @@ co (llab k@ co (llap k@ collar k0l3 - co (llat k%0 + co (llat k@ co (llec k@ colle (gi k@li: co (llis k@ @@ -1457,7 +1457,7 @@ co (mper k0 compe (tAn k0mpI co (mpila k0 - _) co (mpl k%0 + _) co (mpl k@ co (mplem k0 co (mplex_ k0 co (mplica k0 @@ -1470,7 +1470,7 @@ _) comp (tr k%0m co (mputa k,0 _) co (mr k0 - _) con (@ k%0n + _) con (@ k@n _) conce (ntra k0ns@ _) co (ncept_ k0 _) co (ncret k0 @@ -1497,11 +1497,11 @@ _) co (nque k0 _) co (nsc k0 co (nsec k0 - co (nsecu k%0 + co (nsecu k@ _) conse (q k0nsI conser (v k%0ns3: conser (vatio k0ns@ - consider k%0nsId3 + consider k@nsId3 co (nson k0 _) co (nstabl k0 co (nstan k0 @@ -1523,8 +1523,9 @@ contrar k%0ntre@ _) co (ntrib k0 _) co (ntrov k,0 - co (ntrol+ k%0 + co (ntrol+ k@ conva (l k0nv@ + _) con (v k%0n _) co (nvoy k0 _) co (nw k0 _) copy k0pI @@ -1789,6 +1790,7 @@ e (ffic %I efier (_ I2faI3 e (ful + _) e (ffu %I @@) efy (_ I2faI l) e (gal i: l) egi (b EdZ@ @@ -2343,7 +2345,7 @@ c) er (n_ 3: &) er (oCe_ =@r er (se 3: - er (sal '3: + v) er (sal '3: @) er (sial '3: @) er (sy 3: er (sib 3: @@ -2589,6 +2591,7 @@ _) gnu g@nu: hun) g g g (ear g + %A) g (er g g (et g g (ette_ dZ ve) g (et dZ @@ -3282,6 +3285,7 @@ _) ir (rA I ir (ro I ir (ru I + v) ir (us aIr iry (_ aI3rI @@ -3619,7 +3623,7 @@ &ia) n (_S1 n &ia) ns (_S2 nz - @) name (_S4 neIm + &) name (_S4 neIm _) nano (P4 n,anoU nause nO:sI necessit n@sEsIt @@ -4673,7 +4677,7 @@ &B) red (_ r@d uv) re @ rer (_ r@ - re (_ 3 + &) re (_ 3 A) re (_ r@ r) re (_ r@ _) re (C_ rE @@ -5422,6 +5426,7 @@ with (C w%ID with (A w%ID with (e wID + &) wood (_S4 wUd s) wor (d o@ ss) wor (d w3: ?5 ss) wor (d wVR diff --git a/dictsource/fr_list b/dictsource/fr_list index e4019a1f..7b23cd63 100755 --- a/dictsource/fr_list +++ b/dictsource/fr_list @@ -24,7 +24,7 @@ // 2006-11-18 Gilles Casse // -// Updated 2011-10-14 Michel Such +// Updated 2011-10-29 Michel Such // // * Numbers, a few abbreviations and exceptions. // @@ -149,6 +149,8 @@ _’ apostr'Of _‘ apostr'Of _µ mikr'o _§ sEksj'O~ +_∞ infini + // symbols that are normally spoken when reading text @ _::arobaz @@ -680,6 +682,7 @@ bis bis bissus bisys blues _^_en blum blum +bootable boutable $text broglie breuil $text browglie breuil $text buffer bYfWr @@ -726,7 +729,9 @@ gus gys gym Zim han _|A~ hélas elas $u+ +here _^_en hermes _|ErmEs +his _^_en input _^_en island _^_en jackpot dZakpOt @@ -783,7 +788,9 @@ stocker stoker2 sus sys sus sy $verb sushi suSi +there _^_en thierry tjEri +those _^_en to tu $u+ tramway tramwE: tuttiquanti tutikw'anti diff --git a/dictsource/fr_rules b/dictsource/fr_rules index 315e9fdc..eb4cf4ba 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -1,1544 +1,1545 @@ -// French translation rules for Espeak - -// *************************************************************************** -// * Copyright (C) 2005 to 2010 by Jonathan Duddington * -// * email: jonsd@users.sourceforge.net * -// * * -// * This program is free software; you can redistribute it and/or modify * -// * it under the terms of the GNU General Public License as published by * -// * the Free Software Foundation; either version 3 of the License, or * -// * (at your option) any later version. * -// * * -// * This program is distributed in the hope that it will be useful, * -// * but WITHOUT ANY WARRANTY; without even the implied warranty of * -// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -// * GNU General Public License for more details. * -// * * -// * You should have received a copy of the GNU General Public License * -// * along with this program; if not, see: * -// * . * -// ***************************************************************************/ - -// This file is UTF-8 encoded - -// 2006-11-18 Gilles Casse -// Initial rules for French, imported from -// Cicero TTS: A Small, Fast and Free Text-To-Speech Engine. -// http://www.fluxnic.net/cicero -// -// Rules are now maintained by Michel Such -// Last update: 2011-10-26 Michel Such -// - -// Letter classes: -// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û -// C all consonants -// Y front vowels: e i y é ê è î -// K not a vowel (i.e. consonant, space, ) - -.replace -œ oe - - -.L01 d e l n r t u -.L02 b c d f g h k p t v -.L03 d l m n s t v -.L04 c d f g l m n v -.L05 g h k l m v w - -// Following groups are used to manage mute e inside words. - -// After or before L06, e is not mute -.L06 bl br cl cr ct dr fl fr ft gl gr kl kr pl pr tr vr - -// After L07, e is not mute -.L07 ec éc ed éd lb lc ld lg lm ln lp lt lv rb rc rd rf rg rl rm rn rp rs rt rv - -// All consonants + ch gu qu used as ch g k -.L08 b c d f g h j k l m n p q r s t v w x z ch qu gu - -// E placed after a consonant following L09 is not mute -.L09 l r s - -// When these diphtonges are after a consonant folllowing e, e is not mute -.L10 ia ie io ua ue ui uo -.L11 b p -.L12 é è aï al ib ie iq l om on ym ré - -// Words ending "son" pust sound english if preceded by L13 -.L13 d g k l p er hn - -// For english words ending "side" -.L14 be in up ut -.L15 c f g h - -// Hours -.L16 0 1 2 3 4 5 6 7 8 9 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 - -// Minutes -.L17 0 1 2 3 4 5 - - - -.group a - ae (_ e // reggae vitae - aen A~ // caen (diff Cicero: aA~) - ae aE // maestro - aim (K E~ // faim - ain (K E~ // pain - Ct) ain (_ E~n2 // certain ami - ch) ain (_ E~n2 // prochain arret - ai E - ai (_ e -_bal) ai (_ E -_ess) ai (_ E -_vr) ai (_ E - aie E - ais (_ Ez2 - ait (_ Et2 - aient Et2 - f) ai (sA @ // faisons faisan - a (ilK a - am (L11 A~ // jambon, tampon - am (m a // programmation - _) am (n am // amnistie - am (n a // condamner - - _L04) an (_ an - an (n_ a - _h) an (_ an - _) anti (@@P4 A~ti - _) anti (CAXP4 A~ti - _) arché (@P5 arke // archéologue - _) archéo (@P6 arkeo // archéologue - _) arch (aP4 ark // archange - _) arch (oP4 ark // archonte - _) anarcho (@P7 anarko // anarchosyndicalisme - - a (nnA a // manne - an (K A~ // ancien, élan - an (h an - @@m) an (_ an // tennisman - zm) an (_ an // jazzman - L02m) an (_ an - lism) an (_ A~ // talisman - ulm) an (_ A~ // musulman - _caïm) an (_ A~ // caïman - _C) aon (_ A~ // faon, paon, taon - s) aoul (_ u // saoul - s) aou (le u // saoule - août ut // août - août (i aus // aoûtien - aut (_ ot2 - a (ô // saune - au o // au, aux - aud (_ o // chaud -_C) aud (_ od // Maud - au (l_ O // Paul - au (re_ O // dinosaure - _) audio (@P5 odio - _) auto (@P4 oto - _) autom (n otO - bb) aye (X ei // abbaye - ay (C E // aymé - ay Ej // paye - ay (ak aj // kayak - ay (_ E // display - bb) aye (_ aj // cobbaye layer - Xl) ayer (X EjWr // player, layer - h) am (_S2 am - w) an (_ an - a a // bateau - -// group a: English section - any _^_en - aw (K _^_en - - -.group b - bb b // abbé - om) b (_ // plomb applomb - b b // aube - -// group b: English section - back _^_en -_) be (L15A _^_en - board _^_en // board, keyboard - box (_ _^_en // box, inbox, outbox - bugg _^_en // debugger - - -.group c - _) c' (P2v s // s - cch k // bacchanale - cc (Y ks // accéder - cc k // occuper - _) c (d se - _) ch (arism k // charisme, charismatique - _) ch (irop k // chiroptère - _) coe (la se // coelacante - a) ch (_ k // almanach - ar) c (ti // arctique - e) ch (_ k // varech - ni) ch (_ k - _A) ch (o_ k // écho - mani) ch (é k // manichéisme - wi) ch tS // sandwich - mito) ch (o k // mitochondrie - _eu) ch (ari k // eucharistie - or) ch (esC k // orchestre - or) ch (iC k // orchidée - _) ch (ao k // chaos, chaotique - _) ch (orA k // chorale - _) ch (oriz S - _) ch (oro S - ch (r k // chrétien - _) chrono (@P6 krono - ch (l k - ch (n k - ch (s k - ch (to k - ch S // chien - ck k // nickel - cqu k // grecque - cq k // pecq - s) c (Y - x) c (Y - c (Y s // cède - _) cyber (P5 sibEr - Can) c (_ // banc - Con) c (_ // tronc, jonc - _don) c (_ k // donc - cler) c (_ // leclerc - tchou) c (_ - taba) c (_ - toma) c (_ - se) c (ond g // seconde secondaire - c k // recoin donc -zin) c (_ g // zinc - - cient (_ sit2 // ils appr�ient, remercient. - effi) cient sjA~ // coefficient - défi) cient sjA~ // déficient - cast (_S4 kast // podcast - casts (_S5 kast // podcasts - _) clown klun - -// group c: English section - n) ch (_ _^_en // french - ch (ment _^_en // attachment - cut (_ _^_en // cut, shortcut - - -.group ç - - ç s // rançon - _) ç' (P2v s - - -.group d - dd d // addition - _) d' (P2 d - _ban) d (_ d - _lan) d (_ d // land - _stan) d (_ d // stand - an) d (_ - _san) d (_ d - - _gran) d (_ t2 // grand ami, grand marchand - Cen) d (_ t2 - Con) d (_ - con) d (_ t2 - quen) d (_ t2 - r) d (_ - _har) d (_ d - lor) d (_ d - oi) d (_ - ou) d (_ - - dt (_ t // Schmidt - _ni) d (_ // nid - d d // don bled - _expé) dien (t_ djA~ // expédient -V_expé) dien (t_ di // expédient -_ingré) dien (t_ djA~ // ingrédient - dien (t_ di // étudient (verbe) - _) dendro (@P6 dE~dro - -// group d: English section - day (_ _^_en - _) devic _^_en - dle (X _^_en // bundle, handle - -.group e - -// Define use of the final 'e' in french - e (_ - -// Manage mute e inside words -@C) e (CeCA @ -@L08) e (CA -@L08) e (CL10C @ -@L08) e (L06 -@L08) e (L06L10C @ -@L06) e (CA @ -@L06) e (L06 @ -@L07) e (CA @ -@L07) e (L06 @ -@L09gu) e (CA @ -@L09gu) e (L06 @ -@L09qu) e (CA @ -@L09qu) e (L06 @ - e (ct+++++ E - e (x+++++ E - - _C) e (_ @- // je te - -c) e (_ - -j) e (_ - C) e (- - -_) e (CAN e // Evident -_) e (L06A e // Ecran -_eC) e (CA++ E // Evenement - eau (++ o // bateau - e (CC E - cap) e (la_ E - gh) e (tAX E // spagheti - p) ect (_ E // suspect - ect (_ Ekt // direct - pi) ed (_ e // pied - _art) e (++ e // arte, artefact - _cl) ef (_ e // clef - _) ein (K En // Einstein - ein (K E~ // peindre - pl) ein (_ E~n2 // plein emploi - e (il E // vieille - ei E // neige - e (oi // asseoir - el (l E // belle - _f) em (me a // femme - i) e (mA // remerciement, d�ploiement - A) e (rA // remerciera - tch) e (rX W - @) em (me a // patiemment - em (L11 A~ // décembre - em (mACC A~ // emmancher - em (mACAC A~ // emmagasiner - em (ma E // emmanuel - em (mai A~ // emmailloter - l) em (n a // solemnel - il) emn Em // dilemne - en (_ A~n2 // en - en (hA A~n // enharmonique - _C) en (j E~ // benjamin - _flam) en (c E~ // flamenco - _) en (A A~n // enivrer - - C) en (d_ A~ // comprend dépend - od) en (dr E~ // rhododendron - qu) en (d_ A~ - - pati) en A~ // patient patience - en (nu A~ // ennui - en (nA E // penne ennemi - - é) en (_ E~ // européen - - Ci) en (nA E // mienne - - éC) en (t_ A~ // récent différent élément - équ) en (t_ A~ // fréquent, conséquent - étic) en (t_ A~ // réticent - - _C) en (t_ A~ // cent vent lent dent - cc) en (t_ A~ // accent - Asc) en (t_ A~ // luminescent - _dol) en (t_ A~ // dolent - ol) en (t_ A~ // somnolent, violent - Vol) en (t_ // somnolent, violent - Xol) ent (_ t2 // volent - eul) ent (_ t2 // veulent - ul) en (t_ A~ // turbulent - Ccul) ent (_ t2 - Vul) ent (_ t2 - imCoC) en (t_ A~ // impotent - inCoC) en (t_ A~ // innocent, indolent - -XACcid) en (t_ A~ // accident, occident - - _ag) en (t_ A~ // agent - _ard) en (t_ A~ // ardent - _arg) en (t_ A~ // argent - _urg) en (t_ A~ // urgent - V_urg) ent (_ t2 // urgent (verbe) - - _émin) en (t_ A~ // éminent - immin) en (t_ A~ // imminent - oémin) en (t_ A~ // proéminent - jac) en (t_ A~ // sous-jacent, adjacent - _lat) en (t_ A~ // latent - - ig) ent (_ t2 - ilig) ent (_ A~t2 - llig) ent (_ A~t2 - ndig) ent (_ A~t2 - tang) ent (_ A~t2 // tangent - @@ing) en (t_ A~ // astreingent, contingentindigent - - man) en (t_ A~ // permanent - _pat) en (t_ A~ // patent - rmam) en (t_ A~ // firmament - verg) en (t_ A~ // convergent, divergent - Vverg) ent (_ t2 // convergent, divergent (verbe) - - _serg) en (t_ A~ // sergent -CACCim) en (t_ A~ // condiment, gentiment - dim) en (t_ A~ // rudiment - Agim) en (t_ A~ // régiment - Alim) en (t_ A~ // poliment - inim) en (t_ A~ // infiniment - manim) en (t_ A~ // maniment - onim) en (t_ A~ // boniment - plim) en (t_ A~ // compliment - Atim) en (t_ A~ // bâtiment - _cim) en (t_ A~ // ciment - _pim) en (t_ A~ // piment - gm) en (t_ A~ // fragment - Asim) en (t_ A~ // quasiment - - ertin) en (t_ A~ // pertinent, impertinent - ontin) en (t_ A~ // continent, incontinent - _sArm) en (t_ A~ // sarment, serment - erm) en (t_ A~ // ferment - Vferm) ent (_ t2 // ferment, referment (verbe) - XArp) en (t_ A~ // arpent, serpent - CArr) en (t_ A~ // conncurrent, torrent - Cerr) ent (_ t2 // ils serrent -_appar) en (t_ A~ // apparent - spar) en (t_ A~ // transparent - _par) en (t_ A~ // parent - V_par) ent (_ t2 // parent (verbe) - _var) en (t_ A~ // varent - mitt) en (t_ A~ // intermittent - énit) en (t_ A~ // pénitent - tourm) en (t_ A~ // tourment - Cflu) en (t_ A~ // affluent, confluent - VCflu) ent (_ t2 // refluent, influent (verbe) - - _tal) en (t_ A~ // talent - ival) en (t_ A~ // équivalent - Vival) ent (_ t2 // équivalent (verbe) - xcell) en (t_ A~ // excellent -Vxcell) ent (_ t2 // excellent - - iCam) en (t_ A~ - mm) en (t_ A~ - em) en (t_ A~ // lentement - mom) en (t_ A~ // moment - Aaim) en (t_ A~ - Caim) en (t_ A~ - dum) en (t_ A~ - gum) en (t_ A~ - jum) en (t_ A~ - oCum) en (t_ A~ - rum) en (t_ A~ - - éCid) en (t_ A~ - VéCid) ent (_ t2 - Xtrid) en (t_ A~ - _flor) en (t_ A~ - _laur) en (t_ A~ -_mécont) en (t_ A~ - _cont) en (t_ A~ -_Vcont) ent (_ t2 - éC) en (t_ A~ // compétent - _souv) en (t_ A~ // souvent - Cud) en (t_ A~ - - _couv) en (tS3f A~ // le couvent -V_couv) en (t_ // elles couvent -s_couv) en (t_ // elles couvent - - ent (_ t2 // étaient mangent - A) ent (_ t2 // étaient mangent - - Ci) en (K E~ // rien, lien - Ci) en (c A~ // science - - AA) en (_ E~ - C) en (_ En // amen, abdomen, golden - C) en (to_ En // memento - nc) ens (_ A~ // encens - xam) en (_ E~ // examen - - en (s_ A~ - en (CA A~ // pentathlon - en (CC A~ // entre - sp) ens (_ Ens // suspens - éC) ens (_ A~z2 // dépens démens - - _C) er (_ Er // fer - _Ch) er (_ Er // cher - _env) er (_ Er - _hi) er (_ Er // hier - _fi) er (_ Er // fier - _hiv) er (X Er // hiver - Cst) er (X Er // hamster - _cart) er (X Er // carter - _cutt) er (X Wr // cutter - tain) er (X Er // container - _ti) er (_ Er - ack) er (K Wr - ock) er (K Er - rock) er (K Wr - - er (_ e // parler léger - er (s_ e - - i) e (rt_ E // requiert - - d) e (ssus_ @ // dessus - - _d) es (bA e - _d) es (jA e // Desjardins - _d) es (nA e - _d) es (qA e // desquels - - _l) es (qA e // lesquels - - _m) es (dA e // mesdames - _m) es (nA e - Am) es (dA e - Am) es (nA e // Dumesnil - - d) esh (A ez // Deshormeaux - f) eb (vA E // Lefebvre - - _r) e (ss @ // ressembler - _r) e (ssu e // ressusciter - _r) e (stra @ - _r) e (stro @ - _r) e (stru @ // restructurer - -) est (_ Est // -est - - dg) et (_ Et // Bridget, gadget - k) et (_ Et - tick) et (_ E - m) et (_ Et2 - - eu Y // eu - eu (CX W // neuf - eu (CeX W // fleuve - eu (Cer_ Y // pleurer - eu (i W // feuille - eu (CeX Y // meule - eu (reX W // demeure - eu (leX W // gueule - eu (ler Y // gueuler - eu (rC W // pleurnicher - eu (rreX W // beurre - _) eu (ss y // eusse - - _) eut (_ yt2 - eut (_ Yt2 - eux (_ Yz2 - _) extra (uP5 Ekstra - _) extra (CP5 Ekstra - _) eû y // eût - eû Y: // jeûne - - ey (_ E // dahomey - ey (C E // ceylan - ey Ej // asseye - - ez (_ ez2 // nez mangez chez - - g) e (A // mangeons - g) eu W // vengeur - g) eu (re y // gageure - - _d) e (ch @ - _r) e (ch @ // recherche - e (Cl @ - - _l) e (CA @ - _l) e (ChA @ - _l) e (ClA @ // Leclerc - tr) e (CA @ - tr) e (ChA @ - - e (Cr @ - _) e (C% e // effet, effectuer - e (C_ E - e (rC E - es (_ z2 - - e (ri_++ e - e (ria_++ e - e (ro_++ e // Cicero - e (rr+++ E - - e @ // menue - _) e (CA e - Cr) eam I:m - Cr) eamer ImWr - Cl) eaner InWr - vert) e (rX W - eï (K 'Ej - _y) en (_ En - iew) er (X er2 - _m) e (ga e - app) en (di E~ // appendice - - -// group e: English section - ea _^_en -_) e (CeX _^_en - ed (_ _^_en - ee _^_en // meeting - efore (_ _^_en // before - eing (_ _^_en // being, boeing - eive _^_en // receive - el (CX _^_en // field - el (sX El - _) enter (_ _^_en // enter - _) enhan _^_en - ess (_ _^_en // loudness - qu) est (_ _^_en // request - qu) este (X_ _^_en // requested, requester - even (_ _^_en - _) ever _^_en - oC) ever _^_en // forever, however - ew (++ _^_en - _) eye _^_en - - -.group è - - Z) ème iEm - è E - ès (_ E - Ar) ès (_ Es - m) ès (_ Es - n) ès (_ Es - p) ès (_ Es - - -.group ë - u) ë // ambiguë -no) ë (_ e // canoë - ë E // citroën noël - - -.group f - f f - f (f - _ner) f (X - _neu) f (_ans v // liaison: neuf ans - _neu) f (_heures v - -// group f: English section - _) fire (CA _^_en - _) fire (CCA _^_en - fly _^_en - _) frame _^_en - fter (_ _^_en - - -.group g - g g - g (Y Z - ge (a Z - ge (o Z - - su) gg (Y gZ // suggérer suggestif - gg g // agglomérer - ai) gni n^ // craignions châtaignier - gn nj // agneau -_wa) gner (_ gnEr - gni n^i // signifier - gn (e_ n^ - gn (_ n^ - gn (eCA nj@- - gn (ie n // compagnie - dia) g (no g - _a) g (no g -_quatrevin) gts (_ z2 - - vin) gt (_A t // liaison: vingt ans - - vin) gt (_un - vin) gt (_deux t - vin) gt (_trois t //liaison: vingt-trois - vin) gt (_quatr t - vin) gt (_cinq t - vin) gt (_six t - vin) gt (_sept t - vin) gt (_huit t - vin) gt (_neuf t - vin) gt (_neuvi t - - gt (_ // vingt doigts - An) gt (A t // vingtaine doigté - - gu (i g // anguille - ai) gui (l gyi // aiguillage - in) gui (s gyi // linguiste - g (C g - - _ran) g (_ // rang - _san) g (_ // sang - étan) g (_ // étang - _lon) g (_ // long - bour) g (_ // Strasbourg - - g (_ g // grog gag goulag - -// group g: English section - _) game (X _^_en - girl _^_en // girl - gh (K _^_en - gy (_ _^_en - - -.group h - _) h _| - _) h (abi // habit, habilleur - _) h (allo // hallogène - _) h (ame // hameçon - _) h (andr // handroïde - _) h (arm // harmonie - _) h (el // hellène - _) h (ect // hectare - _) h (erb // herbe - _) h (é - _) h (éris _| - _) h (éro _| - _) h (eure // heure - _) h (iber // hibernation - _) hi (A _|j // hier - _) h (ippo // hippodrome - _) h (iro // hirondelle - _) h (ist // histoire - _) h (iv // hiver - _) h (omm // homme - _) h (onn // honneur - _) h (ô // hôpital - _) h (os // hostile - _) h (ora // horaire - _) h (orip // horipeau - _) h (oriz // horizon - _) h (oro // horoscope - _) h (orlo // horloge - _) h (orr // horreur - _) h (uil // huile - _) h (uiss // huissier - _) h (uitr // huître - _) h (umA // humain - _) h (umC // humble - _) hy (A j - haus (_ os //blockhaus - heim (_ ajm - _) h (y // hypermarché - _) hyper (@P5 ipEr - _) hyper (_ ipEr - _) hypra (@P5 ipra - h // ahuri - -// group h: English section - _) half _^_en - _) ha (C_ _^_en - hn _^_en - - -.group i - i i // cri - - C) i (erA i - C) ien (t_ i - dév) ien (t_ i - t) ien (K_ jE~ // tient - v) ien (K_ jE~ // vient - at) ien (t_ jA~ // patient - cip) ien (C jA~ // récipient - cl) ien (C iA~ // client - mol) ien (C jA~ // émolient - vén) ien (C jA~ // inconvénient - or) ien (t iA~ // orient, orienter - ot) ien (t_ jA~ // quotient - - _) i (ce@ aj // iceberg - _) il (l i // illégal - aigu) ill ij // aiguille - anqu) ill il // tranquille - c) ill (i il - dist) ill il // distiller - _L05) ill il // Lille, mille, william - v) ill (e_ il // ville - osc) ill il // osciller - gu) ill ij // guillaume - qu) ill ij // quille - A) ill j // caillou - C) ill ij // famille - a) il (_ j // bail - e) il (_ j - gt) i (m aj - u) il (_ j // deuil - L01_f) ils (_ is // fils (enfant) - - imm imm // immaculé - im (_ im // karim - im (C E~ // timbre - inct (_ E~ // distinct - in (h in // inhumain - in (n i // innombrable - in (C E~ // vingt - in (_ E~ // vin -// ing (_ iN - ing (h ing - ing (s iN - _) infra (sP5 E~fra - _) inter (@@P5 E~tEr - _) interr (A E~tEr - _) inter (_ E~t'Er - _) inter (ne_ E~t'Er - _) intra (neP5 E~tra - _) intra (uP5 E~tra - C) is (_ i - Kir) is (_ is - bor) is (_ is - dor) is (_ is - tor) is (_ is - fl) irt Wrt - otl) i (neX aj - onl) i (ne_ aj - offl) i (ne_ aj - dr) i (ve aj - pr) int (_ int - -// group i: English section - ibuter (X _^_en - iev _^_en - ife (_ _^_en - ign (_ _^_en - ill (_ _^_en // Bill - C) ill (y_ _^_en // Billy - ing (_ _^_en - i (pAd _^_en -C) irt (_ _^_en - iven (_ _^_en - ind (X _^_en // find, mind - _C) ind (erX _^_en // finder - AC) ind (erX _^_en // reminder - C) ird (X _^_en // bird - ize (K _^_en // realize - ram_f) i (le _^_en - -.group ï - ï i // naïf - A) ï (_ j - A) ïe (_ j - A) ï (lA j - - - ïn (K E~ // coïncidence - Ca) ïs (_ is // maïs - - - -.group j - j Z // adjoint joujoux - je (a Z // Jean - _) j' (P2v Z - _) jazz dZaz - _) j (obK dZ - _) j (ohK dZ - _) jusqu' (P6 Zysk - - -.group k - k k // kafka - - -// group k: English section - ke (_ _^_en // make, take - ke (s_ _^_en // makes, takes - ke (rX _^_en // maker - ke (nX _^_en // taken -AC) k (X _^_en // bank - -.group l - l l // lit - ll (A l // aller - _) l' (P2 l - au) lt // hérault - uCi) l (_ // outil, fusil - nti) l (_ // gentil - nti) lh j // gentilhomme - ui) ll j // juillet - _) lorsqu' (P7 lorsk - -// group l: English section -o) ld (_ _^_en // old -u) ld (_ _^_en // could - less (_ _^_en // noiseless -%C) l (eX _^_en -ff) l (eX l -pp) l (eX l - _) line (X _^_en - _) live _^_en - @) loud (_ _^_en - AC) l (X _^_en - - -.group m - m m // film - mm m // pomme - _) m' (P2v m - _) mc (@P2 mak - _) ms (P2 EmEs - master (_S6 mastWr - -// group m: English section - m (n_ _^_en // column, autumn -e) mail _^_en -d) mail _^_en -g) mail _^_en -t) mail _^_en - mov (AX _^_en // move, movy - mov (ie_ _^_en // move, movy - - -.group n - n n // une - nn n - ng (_ N - ngh ng - - _) n' (P2v n - _wAC) ner (_ nEr - - _) n (_° nymero - _) neuro (@@P5 nYro - _) nvda (P4 Envedea - -// group n: English section -_) name _^_en -_re) name _^_en - n (eme_ _^_en - n (emes_ _^_en - - -.group o - br) oc (_ o // broc - cr) oc (_ o // escroc - _) os (_++ Os - _v) os (gY o - s_) os (_ o - x_) os (_ o - o (t_ o - - oe (llA wa // moelleux - oe (i W // oeil - _) oe (C Y // oesophage - _ph) oe (C e // phoetus - _ph) oe (n_ W // phoen - oeu W // voeu - oeud Y // noeud - oeufs (_ Y // oeufs boeufs - oeu (x Yz2 // voeux - o (eC o // coefficient - _) oi (gnon o // oignons - oin (C wE~ - oin (_ wE~ // coin - oi wa // poil - oê (l wa // poêle - om (L11 O~ // bombe, pompe - om (t O~ // comte - n) om (X O~ // nom - om (_ Om // www.web.com - - on (K O~ // montre, vision - on (n O // bonne, personne - on (t_ O~t2 // mont vont sont - _m) ont (pAC O~ // Montpellier - _m) ont (m O~ - _m) ont (rAal O~ // Montreal - onsh (A O~z // bonshommes - onh (A On // bonhomme - _) on (z _|O~ // onze, onzième - - _c) on (_ O~ // no comment - _C) on (_ O~n2 // mon appui, mon histoire, mon havre - - alc) oo (l O // alcool - z) oo o // zoo - z) oo (C oo // zoologue - z) oo (m u // zoom - _gal) op (_ o // galop - - _sir) op (_ o // sirop - - v) ost (_ o // Prévost - _C) oup (_ u // coup, loup - - - ou u // hibou brouillard groupe encouragé - ou (in w // pingouin - oue (mA u // dévouement - _) ou (at _|u // ouate - où u // où - oû u // coûter - oy (A waj // noyer voyelles - _b) oy (co Oj // boycott - _c) oy (o Oi // coyote - _y) o (y O - oy wa - o (_ o // zorro allégro - gr) oss os // grosse, grossir - -C) o (me_ o // atome, chrome -_C) o (me_ O // Rome tome - o (sA o // position - o (zA o // Mozilla - o (CC O // poste, votre - o O - -// group o: English section - oa (X _^_en // approach, load - oa (_ oa - oa (s_ oa - oa (CerX _^_en - oach _^_en - oes _^_en -_) of (X _^_en - o (lder_ _^_en // folder, older -_) o (rder_ _^_en // order - C) oing (_ _^_en // going - gt) on (_ _^_en - Cst) on (_ _^_en - oo (Ce _^_en // boomer - oo (k _^_en // book, cook - oo (st _^_en // booster - oo (X _^_en // pool - C) oot _^_en // bootable football - _) one _^_en -l) oud (X _^_en // cloud, loud -XC) oud (X _^_en - oun (C _^_en // bounce, found - _) over _^_en // over - _sC) ot _^_en // shot, slot, spot - ow (e _^_en // flower, power - ow (X _^_en -_C) oy (X _^_en // boy, toy - - -.group ô - ôt (_ o // rôt - ô o // cône - - -.group p - p p // pas - _) para (pCP4 para - _) photo (@P5 foto - _) poly (@P4 poli - _) post (CP4 post - _) post (ACCP4 post - _) pseudo (@P6 psYdo - p (p // appliquer - pays pEiz2 // pays, paysage - ph f // phrase - - m) ps (_ // temps champs - r) ps (_ // corps - - cham) p (_ // champ - - cam) p (_ // camp - - dra) p (_ // drap - _) psych (@P5 psik - _) psych (iCP5 psiS - _) psych (AA_P5 psiS - - ba) p (t // baptiser - com) p (t // compte - - C) pt (_ // prompt exempt - - se) pt (_ t // sept - se) pt (iè t // septième - scul) p (t // sculpture - _) puisqu' (P7 pyisk - -// group p: English section - pad (_ _^_en - plug _^_en // plug - printer (_ _^_en // printer - - -.group q - q k // coq - _) qu' (AP3 k - _) qua (d kwa // quadrature - _) qua (tA kwa // quaternaire - _) quan (tA kwA~ // quantique - _) qua (drill ka // quadriller - _a) qua kwa // aquarium - _a) qu (if ku // aquifère - _A) qui (dist kyi // équidistant - _A) qui (lat kyi // équilatéral - _C) qua kwa // squale square - _A) qua kwa // équateur - dé) qua kwa // adequate - _) qua (rtz kwa // quartz - qu k // quatre - _) que (_ k@ // que - n) q (_ k // cinq - n) q (_mill // cinq mille - n) q (_cent_ // cinq cent - -// group q: English section - quick _^_en // quick, quickly - - -.group r - - _su) rr rr // surréaliste - cou) rr rr // courrai - mou) rr rr // mourrai - cou) rr (i r // courrier - cou) rr (o r // courroie - r r // rien - rr r - _) radio (@P5 radio - -// group r: English section - _) real _^_en - rst (_ _^_en - r (Cy_ _^_en - _) rule _^_en - - -.group s - s s // verser sien - - s (_S1 z2 - stein (_ Stajn - - _) s' (P2v s // s'amène - _) s' (esXP2v s // s'amène - sç s // immisça - sch (ie sk // schierzo - sch (iz sk // schizophrène - sch (ol sk - sch (oo sk - schu Su - - sch S // schéma - dé) sh (A z // déshabiller - sh S // shérif - ss s // assez - - ai) s (em s // vraisemblable - _al) s (ac z // Alsace - aCè) s (_ s - nè) s (_ s - kansa) s (_ s // Kansas, Arkansas - aka) s (_ s - ub) s (is z // subsister - tran) s (A z // transition - tran) s (e s // transe - tran) s (ub s // transubstantiation - A) s (A z // baiser - A) s (oft s // microsoft - A) s (ol_ s // tournesol - _) socio (@P5 sosio - _) super (@@P5 sypEr - _) super (_ sypEr - _) supra (@P5 sypra - batro) s (_ s - océro) s (_ s - scien (t siA~ // conscient scientifique - sql (_S3 EskyEl - - _u) s (_ s - Cu) s (_ - Abu) s (_ s - _Abu) s (_ - mbu) s (_ s -_cACpu) s (_ s - Acu) s (_ s - docu) s (_ - écu) s (_ - asu) s (_ s - odu) s (_ s - gu) s (_ s - igu) s (_ // aigus - iu) s (_ s // radius - ïu) s (_ s // laïus - Culu) s (_ s // cumulus - plu) s (_ z2 // plus, surplus - ylu) s (_ s // stylus - mu) s (_ s - _mu) s (_ - ému) s (_ - opu) s (_ s // opus, octopus - Aru) s (_ s // virus - aru) s (_ // disparus - ouru) s (_ // courus - Anu) s (_ s // bonus, tonus - enu) s (_ // menus, venus - psu) s (_ s // lapsus - cessu) s (_ s // processus - - atu) s (_ s // stratus motus - ctu) s (_ s // cactus - etu) s (_ s - aitu) s (_ - itu) s (_ s - ltu) s (_ s // altus - otu) s (_ s // motus - Cutu) s (_ s - - _tou) s (_ s - - s (b z // sbire - s (d z - s (g z - s (j z - s (v z - _tou) s (_Ces_ - _tou) s (_des_ s - _tou) s (_Cos_ - _tou) s (_leurs_ - -// group s: English section - send (_ _^_en -_) server (X _^_en - sh (_ _^_en - sh (Ap _^_en // shop, ship - sh (At _^_en // shut, shot -_) side (X+++ _^_en -L14) side (X+++ _^_en - _) sky _^_en - _) smil _^_en // smile, smiley - spy _^_en -_A) s (_ _^_en -L13) son (_ _^_en -L13) ston (_ _^_en - stone (_ _^_en - - -.group t - t t // bataille - _) t (_ te - -) t (- t2 - _) t' (P2v t - Vn) t (_ t2 - A) t (- t2 - VCi) t (_ t2 - t (_ - peti) t (_ t2 - th (L12++ t - th (ArA++ t - th (oCA t -or) th (++ t - _) th (erm t - ts (_S1 z2 // silent at end of word unless next word starts with a vowel - C) t (_ t // compost watt soft script malttact abrupt - ki) t (_ t // kit - n) t (_ - r) t (_ - - aul) t (_ // Renault - grani) t (_ t - - _) télé (@P4 tele - _) tele tele - _) thermo (@P6 tErmo - - tt t // attitude - - s) th (m // asthme - th t // théorie - hui) t (_ t3 // huit - - _) t t // tien tiers - an) t (ia t // Santiago - C) t (ieu s // contentieux - - t (io_ s // ratio - - Ama) t (ieX s // diplomatie - a) t (ia s // spatial - en) t (ia s // confidentialit� - lbu) t (iA s // balbutiait - r) t (ia s // impartial - ini) t (iA s // initier - p) t (ia s // nuptial - an) t (iat s // transsubstantiation - - t (ion s // programmation - V) t (ion t // verbes - ache) t (ion t // achetions, rachetions - ai) t (ion t // souhaitions, traitions - oi) t (ion t // boitions - si) t (ion s // position - chan) t (ion t // chantions, d�chantions - Cisi) t (ion t // visitions - ci) t (ions t // citions - comp) t (ions t // comptions, escomptions - CAnc) t (ion s // fonctionner, ponctionner - Ce) t (ions t // jetions, rejetions - Vec) t (ion t // respections - Vep) t (ion t // respections - éCi) t (ions t // hésitions, héritions - éti) t (ion s // pétition - Vé) t (ion t // répétions - habi) t (ions t // habitions - imi) t (ions t // imitions, limitions - VAu) t (ion t // ajoutions - lu) t (ion s // févolution - Apor) t (ion t // emportions, exportions - opor) t (ion s // proportion - Cpor) t (ion t // emportions, exportions - sor) t (ion t // sortions - rê) t (ion t // arrêtions, apprêtions - - s) t (ion t // gestion - _ta) t (ion t // tation - sen) t (ion_ t // sentions, ressentions - t) t (ion t // combattions - - t (iel s // partiel - t (ieu s // ambitieux - t (iAm s // patiemment - - mar) t (ien s // martien vénitienne - a) t (ien s - i) t (ien s - o) t (ien s - - ipé) t (ieX s - amé) t (ieX s - nu) t (ieX s // minutie - ni) tien (t_ si - bu) tien (t_ si - - cra) t (ieX s // démocratie - - ner) t (ie s // inertie - - _ce) t (_ t -_transA) t (_ t - -// group t: English section - th (A _^_en // this - th (K _^_en // month - _) time _^_en - tle (_ _^_en - too _^_en - ttl _^_en -g) ton (_ _^_en // try, country -i) t (uneX _^_en - try (_ _^_en // try, country - sCar) t (_ _^_en // smart, start - sCar) t (er_ _^_en // starter - _) tun (AX _^_en - - -.group u - u y // cruel nuage brut - ue (il W // orgueil - ui yi // nuit, fuite - uin (K yE~ // juin - _C) u (rfX W - _bl) u (ff W - _s) u (rfeX W - uy (A yij - - C) ucci utSi // capuccino - _g) ua wa - ag) ua (X wa - Ctig) ua (_ wa - _c) ul (_ y - _) ultra (P5 yltra - g) u (ay u - haïk) u (X u - - C) u (bX W // hub, club - C) u (gX W // bug, mug - _n) u (rse W // nurse - pr) unt (_ W~ // emprunt - um (_ Om // album - f) um (_ W~ // parfum - um (L11 W~ // humble - un (C W~ // emprunt lundi - un (n y // tunnel - CC) un (_ W~ // brun - uc) un (_ W~n2 // aucun - un (_ W~n2 // un avion - _h) un (_ W~ // hun - - fl) ux (_ y // flux, reflux - g) u (A // fatigue - g) u (ï y // ambiguïté - g) u (ë y // ambiguë - p) u (tsch u // putsch - uz (z W - -// group u: English section - ual (_ _^_en // usual - uch (_ _^_en // much - _b) usi _^_en // business, businessman - C) ui (ce _^_en // produice, juice -C) ult (_ _^_en - umber (_ _^_en - ump (_ _^_en - r) u (nX _^_en // run, autorun - unch _^_en - under _^_en // under, understand, thunder - _C) un (_ _^_en - _C) un (ny _^_en - _) up (C _^_en // upper, update - up (_ _^_en // setup - urn (X _^_en // burn, turn - ust (_ _^_en // just, trust - uzz _^_en // buzz - - -.group ü - ü y - üs (_ ys - üm (_ om - ül (_ yll - - -.group v - v v - vers (_ vErz2 - dri) ver (X vWr - view (X vju - _) view (A vjuv - -// group v: English section - voice (X _^_en - void (_ _^_en - vy (_ _^_en - - -.group w - w w - _) w (A _|w - w (ag++ v // wagon - -// group w: English section - _) w (AC _^_en - _) w (ina w - _) w (Ai _^_en - _) w (Att w - _) w (ACo w - _) we _^_en - wh _^_en // why whisky when - wr _^_en // write - war _^_en // war - wav _^_en // wave - way _^_en // way, away -A) wn _^_en - wor _^_en - - -.group x - x ks - xx ks - _) x (A gz // xylophone - _) x (CP1 iks // xylophone - xml (_S3 _|iksEmEl - e) x (A gz // exagérer exemple - L03e) x (A ks // annexe, vexer - _ine) x (A gz - _e) x (h gz // exhumer - - ai) x (_ // voix paix prix - oi) x (_ - ri) x (_ - - _soi) x (A s // soixante - - Au) x (_ z2 // faux feux choux - - _au) x (quel // auxquels - - _di) x (_neuf z // liaison: dix-neuf - _di) x (_ z3 - _si) x (_neu s // liaison: six-neuf - _si) x (_ z3 - - di) x (iè z // dixième - si) x (iè z // sixième - deu) x (iè z // deuxième - - -.group y - y i // cryogénique myope - _) y (A _|j // yak - _) y (eu j // yeux - _) yacht _^_en // yacht, yachtman - - _) yahoo (P5 ja'u - ym (L11 E~ // tympan - ym (_ E~ // thym - X) ys (_ is - - yn (K E~ // laryngite - y (nn i - -// group y: English section -_C) y (_ _^_en -AC) y (_ _^_en -C) y (e_ _^_en -%C) y (_ _^_en -ss) y (_ i -@CeC) y (_ _^_en -nC) y (_ _^_en - yze _^_en - - -.group z - z z - t) z s // tzigane - t) zer (_ zEr - C) zer (_ zWr - - -.group -// accented characters, these could have their own groups if they need more rules - â a: - ñ n^ - - é e // été - ê E // fête - - ö o // angström - û y: // fûtes - ü y // bülcher - - -// symbols that are normally spoken when reading text -// , (D pilk:u -_L16_) : (_L17D_ Wr // Say time - $ dOlar - ° d@gre - _n_) ° // n° - ' (C _^_en - - - - - - - - - +// French translation rules for Espeak + +// *************************************************************************** +// * Copyright (C) 2005 to 2010 by Jonathan Duddington * +// * email: jonsd@users.sourceforge.net * +// * * +// * This program is free software; you can redistribute it and/or modify * +// * it under the terms of the GNU General Public License as published by * +// * the Free Software Foundation; either version 3 of the License, or * +// * (at your option) any later version. * +// * * +// * This program is distributed in the hope that it will be useful, * +// * but WITHOUT ANY WARRANTY; without even the implied warranty of * +// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +// * GNU General Public License for more details. * +// * * +// * You should have received a copy of the GNU General Public License * +// * along with this program; if not, see: * +// * . * +// ***************************************************************************/ + +// This file is UTF-8 encoded + +// 2006-11-18 Gilles Casse +// Initial rules for French, imported from +// Cicero TTS: A Small, Fast and Free Text-To-Speech Engine. +// http://www.fluxnic.net/cicero +// +// Rules are now maintained by Michel Such +// Last update: 2011-10-26 Michel Such +// + +// Letter classes: +// A all vowels: a e i o u y â ä é ê è î ï ô ö ù û +// C all consonants +// Y front vowels: e i y é ê è î +// K not a vowel (i.e. consonant, space, ) + +.replace +œ oe + + +.L01 d e l n r t u +.L02 b c d f g h k p t v +.L03 d l m n s t v +.L04 c d f g l m n v +.L05 g h k l m v w + +// Following groups are used to manage mute e inside words. + +// After or before L06, e is not mute +.L06 bl br cl cr ct dr fl fr ft gl gr kl kr pl pr tr vr + +// After L07, e is not mute +.L07 ec éc ed éd lb lc ld lg lm ln lp lt lv rb rc rd rf rg rl rm rn rp rs rt rv + +// All consonants + ch gu qu used as ch g k +.L08 b c d f g h j k l m n p q r s t v w x z ch qu gu + +// E placed after a consonant following L09 is not mute +.L09 l r s + +// When these diphtonges are after a consonant folllowing e, e is not mute +.L10 ia ie io ua ue ui uo +.L11 b p +.L12 é è aï al ib ie iq l om on ym ré + +// Words ending "son" pust sound english if preceded by L13 +.L13 d g k l p er hn + +// For english words ending "side" +.L14 be in up ut +.L15 c f g h + +// Hours +.L16 0 1 2 3 4 5 6 7 8 9 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 + +// Minutes +.L17 0 1 2 3 4 5 + + + +.group a + ae (_ e // reggae vitae + aen A~ // caen (diff Cicero: aA~) + ae aE // maestro + aim (K E~ // faim + ain (K E~ // pain + Ct) ain (_ E~n2 // certain ami + ch) ain (_ E~n2 // prochain arret + ai E + ai (_ e +_bal) ai (_ E +_ess) ai (_ E +_vr) ai (_ E + aie E + ais (_ Ez2 + ait (_ Et2 + aient Et2 + f) ai (sA @ // faisons faisan + a (ilK a + am (L11 A~ // jambon, tampon + am (m a // programmation + _) am (n am // amnistie + am (n a // condamner + + _L04) an (_ an + an (n_ a + _h) an (_ an + _) anti (@@P4 A~ti + _) anti (CAXP4 A~ti + _) arché (@P5 arke // archéologue + _) archéo (@P6 arkeo // archéologue + _) arch (aP4 ark // archange + _) arch (oP4 ark // archonte + _) anarcho (@P7 anarko // anarchosyndicalisme + + a (nnA a // manne + an (K A~ // ancien, élan + an (h an + @@m) an (_ an // tennisman + zm) an (_ an // jazzman + L02m) an (_ an + lism) an (_ A~ // talisman + ulm) an (_ A~ // musulman + _caïm) an (_ A~ // caïman + _C) aon (_ A~ // faon, paon, taon + s) aoul (_ u // saoul + s) aou (le u // saoule + août ut // août + août (i aus // aoûtien + aut (_ ot2 + a (ô // saune + au o // au, aux + aud (_ o // chaud +_C) aud (_ od // Maud + au (l_ O // Paul + au (re_ O // dinosaure + _) audio (@P5 odio + _) auto (@P4 oto + _) autom (n otO + bb) aye (X ei // abbaye + ay (C E // aymé + ay Ej // paye + ay (ak aj // kayak + ay (_ E // display + bb) aye (_ aj // cobbaye layer + Xl) ayer (X EjWr // player, layer + h) am (_S2 am + w) an (_ an + a a // bateau + +// group a: English section + any _^_en + aw (K _^_en + + +.group b + bb b // abbé + om) b (_ // plomb applomb + b b // aube + +// group b: English section + back _^_en +_) be (L15A _^_en + board _^_en // board, keyboard + box (_ _^_en // box, inbox, outbox + bugg _^_en // debugger + + +.group c + _) c' (P2v s // s + cch k // bacchanale + cc (Y ks // accéder + cc k // occuper + _) c (d se + _) ch (arism k // charisme, charismatique + _) ch (irop k // chiroptère + _) coe (la se // coelacante + a) ch (_ k // almanach + ar) c (ti // arctique + e) ch (_ k // varech + ni) ch (_ k + _A) ch (o_ k // écho + mani) ch (é k // manichéisme + wi) ch tS // sandwich + mito) ch (o k // mitochondrie + _eu) ch (ari k // eucharistie + or) ch (esC k // orchestre + or) ch (iC k // orchidée + _) ch (ao k // chaos, chaotique + _) ch (orA k // chorale + _) ch (oriz S + _) ch (oro S + ch (r k // chrétien + _) chrono (@P6 krono + ch (l k + ch (n k + ch (s k + ch (to k + ch S // chien + ck k // nickel + cqu k // grecque + cq k // pecq + s) c (Y + x) c (Y + c (Y s // cède + _) cyber (P5 sibEr + Can) c (_ // banc + Con) c (_ // tronc, jonc + _don) c (_ k // donc + cler) c (_ // leclerc + tchou) c (_ + taba) c (_ + toma) c (_ + se) c (ond g // seconde secondaire + c k // recoin donc +zin) c (_ g // zinc + + cient (_ sit2 // ils appr�ient, remercient. + effi) cient sjA~ // coefficient + défi) cient sjA~ // déficient + cast (_S4 kast // podcast + casts (_S5 kast // podcasts + _) clown klun + +// group c: English section + n) ch (_ _^_en // french + ch (ment _^_en // attachment + cut (_ _^_en // cut, shortcut + + +.group ç + + ç s // rançon + _) ç' (P2v s + + +.group d + dd d // addition + _) d' (P2 d + _ban) d (_ d + _lan) d (_ d // land + _stan) d (_ d // stand + an) d (_ + _san) d (_ d + + _gran) d (_ t2 // grand ami, grand marchand + Cen) d (_ t2 + Con) d (_ + con) d (_ t2 + quen) d (_ t2 + r) d (_ + _har) d (_ d + lor) d (_ d + oi) d (_ + ou) d (_ + + dt (_ t // Schmidt + _ni) d (_ // nid + d d // don bled + _expé) dien (t_ djA~ // expédient +V_expé) dien (t_ di // expédient +_ingré) dien (t_ djA~ // ingrédient + dien (t_ di // étudient (verbe) + _) dendro (@P6 dE~dro + +// group d: English section + day (_ _^_en + _) devic _^_en + dle (X _^_en // bundle, handle + +.group e + +// Define use of the final 'e' in french + e (_ + +// Manage mute e inside words +@C) e (CeCA @ +@L08) e (CA +@L08) e (CL10C @ +@L08) e (L06 +@L08) e (L06L10C @ +@L06) e (CA @ +@L06) e (L06 @ +@L07) e (CA @ +@L07) e (L06 @ +@L09gu) e (CA @ +@L09gu) e (L06 @ +@L09qu) e (CA @ +@L09qu) e (L06 @ + e (ct+++++ E + e (x+++++ E + + _C) e (_ @- // je te + -c) e (_ + -j) e (_ + C) e (- + +_) e (CAN e // Evident +_) e (L06A e // Ecran +_eC) e (CA++ E // Evenement + eau (++ o // bateau + e (CC E + cap) e (la_ E + gh) e (tAX E // spagheti + p) ect (_ E // suspect + ect (_ Ekt // direct + pi) ed (_ e // pied + _art) e (++ e // arte, artefact + _cl) ef (_ e // clef + _) ein (K En // Einstein + ein (K E~ // peindre + pl) ein (_ E~n2 // plein emploi + e (il E // vieille + ei E // neige + e (oi // asseoir + el (l E // belle + _f) em (me a // femme + i) e (mA // remerciement, d�ploiement + A) e (rA // remerciera + tch) e (rX W + @) em (me a // patiemment + em (L11 A~ // décembre + em (mACC A~ // emmancher + em (mACAC A~ // emmagasiner + em (ma E // emmanuel + em (mai A~ // emmailloter + l) em (n a // solemnel + il) emn Em // dilemne + en (_ A~n2 // en + en (hA A~n // enharmonique + _C) en (j E~ // benjamin + _flam) en (c E~ // flamenco + _) en (A A~n // enivrer + + C) en (d_ A~ // comprend dépend + od) en (dr E~ // rhododendron + qu) en (d_ A~ + + pati) en A~ // patient patience + en (nu A~ // ennui + en (nA E // penne ennemi + + é) en (_ E~ // européen + + Ci) en (nA E // mienne + + éC) en (t_ A~ // récent différent élément + équ) en (t_ A~ // fréquent, conséquent + étic) en (t_ A~ // réticent + + _C) en (t_ A~ // cent vent lent dent + cc) en (t_ A~ // accent + Asc) en (t_ A~ // luminescent + _dol) en (t_ A~ // dolent + ol) en (t_ A~ // somnolent, violent + Vol) en (t_ // somnolent, violent + Xol) ent (_ t2 // volent + eul) ent (_ t2 // veulent + ul) en (t_ A~ // turbulent + Ccul) ent (_ t2 + Vul) ent (_ t2 + imCoC) en (t_ A~ // impotent + inCoC) en (t_ A~ // innocent, indolent + +XACcid) en (t_ A~ // accident, occident + + _ag) en (t_ A~ // agent + _ard) en (t_ A~ // ardent + _arg) en (t_ A~ // argent + _urg) en (t_ A~ // urgent + V_urg) ent (_ t2 // urgent (verbe) + + _émin) en (t_ A~ // éminent + immin) en (t_ A~ // imminent + oémin) en (t_ A~ // proéminent + jac) en (t_ A~ // sous-jacent, adjacent + _lat) en (t_ A~ // latent + + ig) ent (_ t2 + ilig) ent (_ A~t2 + llig) ent (_ A~t2 + ndig) ent (_ A~t2 + tang) ent (_ A~t2 // tangent + @@ing) en (t_ A~ // astreingent, contingentindigent + + man) en (t_ A~ // permanent + _pat) en (t_ A~ // patent + rmam) en (t_ A~ // firmament + verg) en (t_ A~ // convergent, divergent + Vverg) ent (_ t2 // convergent, divergent (verbe) + + _serg) en (t_ A~ // sergent +CACCim) en (t_ A~ // condiment, gentiment + dim) en (t_ A~ // rudiment + Agim) en (t_ A~ // régiment + Alim) en (t_ A~ // poliment + inim) en (t_ A~ // infiniment + manim) en (t_ A~ // maniment + onim) en (t_ A~ // boniment + plim) en (t_ A~ // compliment + Atim) en (t_ A~ // bâtiment + _cim) en (t_ A~ // ciment + _pim) en (t_ A~ // piment + gm) en (t_ A~ // fragment + Asim) en (t_ A~ // quasiment + + ertin) en (t_ A~ // pertinent, impertinent + ontin) en (t_ A~ // continent, incontinent + _sArm) en (t_ A~ // sarment, serment + erm) en (t_ A~ // ferment + Vferm) ent (_ t2 // ferment, referment (verbe) + XArp) en (t_ A~ // arpent, serpent + CArr) en (t_ A~ // conncurrent, torrent + Cerr) ent (_ t2 // ils serrent +_appar) en (t_ A~ // apparent + spar) en (t_ A~ // transparent + _par) en (t_ A~ // parent + V_par) ent (_ t2 // parent (verbe) + _var) en (t_ A~ // varent + mitt) en (t_ A~ // intermittent + énit) en (t_ A~ // pénitent + tourm) en (t_ A~ // tourment + Cflu) en (t_ A~ // affluent, confluent + VCflu) ent (_ t2 // refluent, influent (verbe) + + _tal) en (t_ A~ // talent + ival) en (t_ A~ // équivalent + Vival) ent (_ t2 // équivalent (verbe) + xcell) en (t_ A~ // excellent +Vxcell) ent (_ t2 // excellent + + iCam) en (t_ A~ + mm) en (t_ A~ + em) en (t_ A~ // lentement + mom) en (t_ A~ // moment + Aaim) en (t_ A~ + Caim) en (t_ A~ + dum) en (t_ A~ + gum) en (t_ A~ + jum) en (t_ A~ + oCum) en (t_ A~ + rum) en (t_ A~ + + éCid) en (t_ A~ + VéCid) ent (_ t2 + Xtrid) en (t_ A~ + _flor) en (t_ A~ + _laur) en (t_ A~ +_mécont) en (t_ A~ + _cont) en (t_ A~ +_Vcont) ent (_ t2 + éC) en (t_ A~ // compétent + _souv) en (t_ A~ // souvent + Cud) en (t_ A~ + + _couv) en (tS3f A~ // le couvent +V_couv) en (t_ // elles couvent +s_couv) en (t_ // elles couvent + + ent (_ t2 // étaient mangent + A) ent (_ t2 // étaient mangent + + Ci) en (K E~ // rien, lien + Ci) en (c A~ // science + + AA) en (_ E~ + C) en (_ En // amen, abdomen, golden + C) en (to_ En // memento + nc) ens (_ A~ // encens + xam) en (_ E~ // examen + + en (s_ A~ + en (CA A~ // pentathlon + en (CC A~ // entre + sp) ens (_ Ens // suspens + éC) ens (_ A~z2 // dépens démens + + _C) er (_ Er // fer + _Ch) er (_ Er // cher + _env) er (_ Er + _hi) er (_ Er // hier + _fi) er (_ Er // fier + _hiv) er (X Er // hiver + Cst) er (X Er // hamster + _cart) er (X Er // carter + _cutt) er (X Wr // cutter + tain) er (X Er // container + _ti) er (_ Er + ack) er (K Wr + ock) er (K Er + rock) er (K Wr + + er (_ e // parler léger + er (s_ e + + i) e (rt_ E // requiert + + d) e (ssus_ @ // dessus + + _d) es (bA e + _d) es (jA e // Desjardins + _d) es (nA e + _d) es (qA e // desquels + + _l) es (qA e // lesquels + + _m) es (dA e // mesdames + _m) es (nA e + Am) es (dA e + Am) es (nA e // Dumesnil + + d) esh (A ez // Deshormeaux + f) eb (vA E // Lefebvre + + _r) e (ss @ // ressembler + _r) e (ssu e // ressusciter + _r) e (stra @ + _r) e (stro @ + _r) e (stru @ // restructurer + -) est (_ Est // -est + + dg) et (_ Et // Bridget, gadget + k) et (_ Et + tick) et (_ E + m) et (_ Et2 + + eu Y // eu + eu (CX W // neuf + eu (CeX W // fleuve + eu (Cer_ Y // pleurer + eu (i W // feuille + eu (CeX Y // meule + eu (reX W // demeure + eu (leX W // gueule + eu (ler Y // gueuler + eu (rC W // pleurnicher + eu (rreX W // beurre + _) eu (ss y // eusse + + _) eut (_ yt2 + eut (_ Yt2 + eux (_ Yz2 + _) extra (uP5 Ekstra + _) extra (CP5 Ekstra + _) eû y // eût + eû Y: // jeûne + + ey (_ E // dahomey + ey (C E // ceylan + ey Ej // asseye + + ez (_ ez2 // nez mangez chez + + g) e (A // mangeons + g) eu W // vengeur + g) eu (re y // gageure + + _d) e (ch @ + _r) e (ch @ // recherche + e (Cl @ + + _l) e (CA @ + _l) e (ChA @ + _l) e (ClA @ // Leclerc + tr) e (CA @ + tr) e (ChA @ + + e (Cr @ + _) e (C% e // effet, effectuer + e (C_ E + e (rC E + es (_ z2 + + e (ri_++ e + e (ria_++ e + e (ro_++ e // Cicero + e (rr+++ E + + e @ // menue + _) e (CA e + Cr) eam I:m + Cr) eamer ImWr + Cl) eaner InWr + vert) e (rX W + eï (K 'Ej + _y) en (_ En + iew) er (X er2 + _m) e (ga e + app) en (di E~ // appendice + + +// group e: English section + ea _^_en +_) e (CeX _^_en + ed (_ _^_en + ee _^_en // meeting + efore (_ _^_en // before + eing (_ _^_en // being, boeing + eive _^_en // receive + el (CX _^_en // field + el (sX El + _) enter (_ _^_en // enter + _) enhan _^_en + ess (_ _^_en // loudness + qu) est (_ _^_en // request + qu) este (X_ _^_en // requested, requester + even (_ _^_en + _) ever _^_en + oC) ever _^_en // forever, however + ew (++ _^_en + _) eye _^_en + + +.group è + + Z) ème iEm + è E + ès (_ E + Ar) ès (_ Es + m) ès (_ Es + n) ès (_ Es + p) ès (_ Es + + +.group ë + u) ë // ambiguë +no) ë (_ e // canoë + ë E // citroën noël + + +.group f + f f + f (f + _ner) f (X + _neu) f (_ans v // liaison: neuf ans + _neu) f (_heures v + +// group f: English section + _) fire (CA _^_en + _) fire (CCA _^_en + fly _^_en + _) frame _^_en + fter (_ _^_en + + +.group g + g g + g (Y Z + ge (a Z + ge (o Z + + su) gg (Y gZ // suggérer suggestif + gg g // agglomérer + ai) gni n^ // craignions châtaignier + gn nj // agneau +_wa) gner (_ gnEr + gni n^i // signifier + gn (e_ n^ + gn (_ n^ + gn (eCA nj@- + gn (ie n // compagnie + dia) g (no g + _a) g (no g +_quatrevin) gts (_ z2 + + vin) gt (_A t // liaison: vingt ans + + vin) gt (_un + vin) gt (_deux t + vin) gt (_trois t //liaison: vingt-trois + vin) gt (_quatr t + vin) gt (_cinq t + vin) gt (_six t + vin) gt (_sept t + vin) gt (_huit t + vin) gt (_neuf t + vin) gt (_neuvi t + + gt (_ // vingt doigts + An) gt (A t // vingtaine doigté + + gu (i g // anguille + ai) gui (l gyi // aiguillage + in) gui (s gyi // linguiste + g (C g + + _ran) g (_ // rang + _san) g (_ // sang + étan) g (_ // étang + _lon) g (_ // long + bour) g (_ // Strasbourg + + g (_ g // grog gag goulag + +// group g: English section + _) game (X _^_en + girl _^_en // girl + gh (K _^_en + gy (_ _^_en + + +.group h + _) h _| + _) h (abi // habit, habilleur + _) h (allo // hallogène + _) h (ame // hameçon + _) h (andr // handroïde + _) h (arm // harmonie + _) h (el // hellène + _) h (ect // hectare + _) h (erb // herbe + _) h (é + _) h (éris _| + _) h (éro _| + _) h (eure // heure + _) h (iber // hibernation + _) hi (A _|j // hier + _) h (ippo // hippodrome + _) h (iro // hirondelle + _) h (ist // histoire + _) h (iv // hiver + _) h (omm // homme + _) h (onn // honneur + _) h (ô // hôpital + _) h (os // hostile + _) h (ora // horaire + _) h (orip // horipeau + _) h (oriz // horizon + _) h (oro // horoscope + _) h (orlo // horloge + _) h (orr // horreur + _) h (uil // huile + _) h (uiss // huissier + _) h (uitr // huître + _) h (umA // humain + _) h (umC // humble + _) hy (A j + haus (_ os //blockhaus + heim (_ ajm + _) h (y // hypermarché + _) hyper (@P5 ipEr + _) hyper (_ ipEr + _) hypra (@P5 ipra + h // ahuri + +// group h: English section + _) half _^_en + _) ha (C_ _^_en + hn _^_en + + +.group i + i i // cri + + C) i (erA i + C) ien (t_ i + dév) ien (t_ i + t) ien (K_ jE~ // tient + v) ien (K_ jE~ // vient + at) ien (t_ jA~ // patient + cip) ien (C jA~ // récipient + cl) ien (C iA~ // client + mol) ien (C jA~ // émolient + vén) ien (C jA~ // inconvénient + or) ien (t iA~ // orient, orienter + ot) ien (t_ jA~ // quotient + + _) i (ce@ aj // iceberg + _) il (l i // illégal + aigu) ill ij // aiguille + anqu) ill il // tranquille + c) ill (i il + dist) ill il // distiller + _L05) ill il // Lille, mille, william + v) ill (e_ il // ville + osc) ill il // osciller + gu) ill ij // guillaume + qu) ill ij // quille + A) ill j // caillou + C) ill ij // famille + a) il (_ j // bail + e) il (_ j + gt) i (m aj + u) il (_ j // deuil + L01_f) ils (_ is // fils (enfant) + + imm imm // immaculé + im (_ im // karim + im (C E~ // timbre + inct (_ E~ // distinct + in (h in // inhumain + in (n i // innombrable + in (C E~ // vingt + in (_ E~ // vin +// ing (_ iN + ing (h ing + ing (s iN + _) infra (sP5 E~fra + _) inter (@@P5 E~tEr + _) interr (A E~tEr + _) inter (_ E~t'Er + _) inter (ne_ E~t'Er + _) intra (neP5 E~tra + _) intra (uP5 E~tra + C) is (_ i + Kir) is (_ is + bor) is (_ is + dor) is (_ is + tor) is (_ is + fl) irt Wrt + otl) i (neX aj + onl) i (ne_ aj + offl) i (ne_ aj + dr) i (ve aj + pr) int (_ int + +// group i: English section + ibuter (X _^_en + iev _^_en + ife (_ _^_en + ign (_ _^_en + ill (_ _^_en // Bill + C) ill (y_ _^_en // Billy + ing (_ _^_en + i (pAd _^_en +C) irt (_ _^_en + iven (_ _^_en + ind (X _^_en // find, mind + _C) ind (erX _^_en // finder + AC) ind (erX _^_en // reminder + C) ird (X _^_en // bird + ize (K _^_en // realize + ram_f) i (le _^_en + +.group ï + ï i // naïf + A) ï (_ j + A) ïe (_ j + A) ï (lA j + + + ïn (K E~ // coïncidence + Ca) ïs (_ is // maïs + + + +.group j + j Z // adjoint joujoux + je (a Z // Jean + _) j' (P2v Z + _) jazz dZaz + _) j (obK dZ + _) j (ohK dZ + _) jusqu' (P6 Zysk + + +.group k + k k // kafka + + +// group k: English section + ke (_ _^_en // make, take + ke (s_ _^_en // makes, takes + ke (rX _^_en // maker + ke (nX _^_en // taken +AC) k (X _^_en // bank + +.group l + l l // lit + ll (A l // aller + _) l' (P2 l + au) lt // hérault + uCi) l (_ // outil, fusil + nti) l (_ // gentil + nti) lh j // gentilhomme + ui) ll j // juillet + _) lorsqu' (P7 lorsk + +// group l: English section +o) ld (_ _^_en // old +u) ld (_ _^_en // could + less (_ _^_en // noiseless +%C) l (eX _^_en +ff) l (eX l +pp) l (eX l + _) line (X _^_en + _) live _^_en + @) loud (_ _^_en + AC) l (X _^_en + + +.group m + m m // film + mm m // pomme + _) m' (P2v m + _) mc (@P2 mak + _) ms (P2 EmEs + master (_S6 mastWr + +// group m: English section + m (n_ _^_en // column, autumn +e) mail _^_en +d) mail _^_en +g) mail _^_en +t) mail _^_en + mov (AX _^_en // move, movy + mov (ie_ _^_en // move, movy + + +.group n + n n // une + nn n + ng (_ N + ngh ng + + _) n' (P2v n + _wAC) ner (_ nEr + + _) n (_° nymero + _) neuro (@@P5 nYro + _) nvda (P4 Envedea + +// group n: English section +_) name _^_en +_re) name _^_en + n (eme_ _^_en + n (emes_ _^_en + + +.group o + br) oc (_ o // broc + cr) oc (_ o // escroc + _) os (_++ Os + _v) os (gY o + s_) os (_ o + x_) os (_ o + o (t_ o + + oe (llA wa // moelleux + oe (i W // oeil + _) oe (C Y // oesophage + _ph) oe (C e // phoetus + _ph) oe (n_ W // phoen + oeu W // voeu + oeud Y // noeud + oeufs (_ Y // oeufs boeufs + oeu (x Yz2 // voeux + o (eC o // coefficient + _) oi (gnon o // oignons + oin (C wE~ + oin (_ wE~ // coin + oi wa // poil + oê (l wa // poêle + om (L11 O~ // bombe, pompe + om (t O~ // comte + n) om (X O~ // nom + om (_ Om // www.web.com + + on (K O~ // montre, vision + on (n O // bonne, personne + on (t_ O~t2 // mont vont sont + _m) ont (pAC O~ // Montpellier + _m) ont (m O~ + _m) ont (rAal O~ // Montreal + onsh (A O~z // bonshommes + onh (A On // bonhomme + _) on (z _|O~ // onze, onzième + + _c) on (_ O~ // no comment + _C) on (_ O~n2 // mon appui, mon histoire, mon havre + + alc) oo (l O // alcool + z) oo o // zoo + z) oo (C oo // zoologue + z) oo (m u // zoom + _gal) op (_ o // galop + + _sir) op (_ o // sirop + + v) ost (_ o // Prévost + _C) oup (_ u // coup, loup + + + ou u // hibou brouillard groupe encouragé + ou (in w // pingouin + oue (mA u // dévouement + _) ou (at _|u // ouate + où u // où + oû u // coûter + oy (A waj // noyer voyelles + _b) oy (co Oj // boycott + _c) oy (o Oi // coyote + _y) o (y O + oy wa + o (_ o // zorro allégro + gr) oss os // grosse, grossir + +C) o (me_ o // atome, chrome +_C) o (me_ O // Rome tome + o (sA o // position + o (zA o // Mozilla + o (CC O // poste, votre + o O + +// group o: English section + oa (X _^_en // approach, load + oa (_ oa + oa (s_ oa + oa (CerX _^_en + oach _^_en + oes _^_en +_) of (X _^_en + o (lder_ _^_en // folder, older +_) o (rder_ _^_en // order + C) oing (_ _^_en // going + gt) on (_ _^_en + Cst) on (_ _^_en + oo (Ce _^_en // boomer + oo (k _^_en // book, cook + oo (st _^_en // booster + oo (X _^_en // pool + C) oot _^_en // bootable football + _) one _^_en +l) oud (X _^_en // cloud, loud +XC) oud (X _^_en + oun (C _^_en // bounce, found + _) over _^_en // over + _sC) ot _^_en // shot, slot, spot + ow (e _^_en // flower, power + ow (X _^_en +_C) oy (X _^_en // boy, toy + + +.group ô + ôt (_ o // rôt + ô o // cône + + +.group p + p p // pas + _) para (pCP4 para + _) photo (@P5 foto + _) poly (@P4 poli + _) post (CP4 post + _) post (ACCP4 post + _) pseudo (@P6 psYdo + p (p // appliquer + pays pEiz2 // pays, paysage + ph f // phrase + + m) ps (_ // temps champs + r) ps (_ // corps + + cham) p (_ // champ + + cam) p (_ // camp + + dra) p (_ // drap + _) psych (@P5 psik + _) psych (iCP5 psiS + _) psych (AA_P5 psiS + + ba) p (t // baptiser + com) p (t // compte + + C) pt (_ // prompt exempt + + se) pt (_ t // sept + se) pt (iè t // septième + scul) p (t // sculpture + _) puisqu' (P7 pyisk + +// group p: English section + pad (_ _^_en + plug _^_en // plug + printer (_ _^_en // printer + + +.group q + q k // coq + _) qu' (AP3 k + _) qua (d kwa // quadrature + _) qua (tA kwa // quaternaire + _) quan (tA kwA~ // quantique + _) qua (drill ka // quadriller + _a) qua kwa // aquarium + _a) qu (if ku // aquifère + _A) qui (dist kyi // équidistant + _A) qui (lat kyi // équilatéral + _C) qua kwa // squale square + _A) qua kwa // équateur + dé) qua kwa // adequate + _) qua (rtz kwa // quartz + qu k // quatre + _) que (_ k@ // que + n) q (_ k // cinq + n) q (_mill // cinq mille + n) q (_cent_ // cinq cent + +// group q: English section + quick _^_en // quick, quickly + + +.group r + + _su) rr rr // surréaliste + cou) rr rr // courrai + mou) rr rr // mourrai + cou) rr (i r // courrier + cou) rr (o r // courroie + r r // rien + rr r + _) radio (@P5 radio + +// group r: English section + _) real _^_en + rst (_ _^_en + r (Cy_ _^_en + _) rule _^_en + + +.group s + s s // verser sien + + s (_S1 z2 + stein (_ Stajn + + _) s' (P2v s // s'amène + _) s' (esXP2v s // s'amène + sç s // immisça + sch (ie sk // schierzo + sch (iz sk // schizophrène + sch (ol sk + sch (oo sk + schu Su + + sch S // schéma + dé) sh (A z // déshabiller + sh S // shérif + ss s // assez + + ai) s (em s // vraisemblable + _al) s (ac z // Alsace + aCè) s (_ s + nè) s (_ s + kansa) s (_ s // Kansas, Arkansas + aka) s (_ s + ub) s (is z // subsister + tran) s (A z // transition + tran) s (e s // transe + tran) s (ub s // transubstantiation + A) s (A z // baiser + A) s (oft s // microsoft + A) s (ol_ s // tournesol + _) socio (@P5 sosio + _) super (@@P5 sypEr + _) super (_ sypEr + _) supra (@P5 sypra + batro) s (_ s + océro) s (_ s + scien (t siA~ // conscient scientifique + sql (_S3 EskyEl + + _u) s (_ s + Cu) s (_ + Abu) s (_ s + _Abu) s (_ + mbu) s (_ s +_cACpu) s (_ s + Acu) s (_ s + docu) s (_ + écu) s (_ + asu) s (_ s + odu) s (_ s + gu) s (_ s + igu) s (_ // aigus + iu) s (_ s // radius + ïu) s (_ s // laïus + Culu) s (_ s // cumulus + plu) s (_ z2 // plus, surplus + ylu) s (_ s // stylus + mu) s (_ s + _mu) s (_ + ému) s (_ + opu) s (_ s // opus, octopus + Aru) s (_ s // virus + aru) s (_ // disparus + ouru) s (_ // courus + Anu) s (_ s // bonus, tonus + enu) s (_ // menus, venus + psu) s (_ s // lapsus + cessu) s (_ s // processus + + atu) s (_ s // stratus motus + ctu) s (_ s // cactus + etu) s (_ s + aitu) s (_ + itu) s (_ s + ltu) s (_ s // altus + otu) s (_ s // motus + Cutu) s (_ s + + _tou) s (_ s + + s (b z // sbire + s (d z + s (g z + s (j z + s (v z + _tou) s (_Ces_ + _tou) s (_des_ s + _tou) s (_Cos_ + _tou) s (_leurs_ + +// group s: English section + send (_ _^_en +_) server (X _^_en + sh (_ _^_en + sh (Ap _^_en // shop, ship + sh (At _^_en // shut, shot +_) side (X+++ _^_en +L14) side (X+++ _^_en + _) sky _^_en + _) smil _^_en // smile, smiley + spy _^_en +_A) s (_ _^_en +L13) son (_ _^_en +L13) ston (_ _^_en + stone (_ _^_en + + +.group t + t t // bataille + _) t (_ te + -) t (- t2 + _) t' (P2v t + Vn) t (_ t2 + A) t (- t2 + VCi) t (_ t2 + t (_ + peti) t (_ t2 + th (L12++ t + th (ArA++ t + th (oCA t +or) th (++ t + _) th (erm t + ts (_S1 z2 // silent at end of word unless next word starts with a vowel + C) t (_ t // compost watt soft script malttact abrupt + ki) t (_ t // kit + n) t (_ + r) t (_ + + aul) t (_ // Renault + grani) t (_ t + + _) télé (@P4 tele + _) tele tele + _) thermo (@P6 tErmo + + tt t // attitude + + s) th (m // asthme + th t // théorie + hui) t (_ t3 // huit + + _) t t // tien tiers + an) t (ia t // Santiago + C) t (ieu s // contentieux + + t (io_ s // ratio + + Ama) t (ieX s // diplomatie + a) t (ia s // spatial + en) t (ia s // confidentialit� + lbu) t (iA s // balbutiait + r) t (ia s // impartial + ini) t (iA s // initier + p) t (ia s // nuptial + an) t (iat s // transsubstantiation + + t (ion s // programmation + V) t (ion t // verbes + ache) t (ion t // achetions, rachetions + ai) t (ion t // souhaitions, traitions + oi) t (ion t // boitions + si) t (ion s // position + chan) t (ion t // chantions, d�chantions + Cisi) t (ion t // visitions + ci) t (ions t // citions + comp) t (ions t // comptions, escomptions + CAnc) t (ion s // fonctionner, ponctionner + Ce) t (ions t // jetions, rejetions + Vec) t (ion t // respections + Vep) t (ion t // respections + éCi) t (ions t // hésitions, héritions + éti) t (ion s // pétition + Vé) t (ion t // répétions + habi) t (ions t // habitions + imi) t (ions t // imitions, limitions + VAu) t (ion t // ajoutions + lu) t (ion s // févolution + Apor) t (ion t // emportions, exportions + opor) t (ion s // proportion + Cpor) t (ion t // emportions, exportions + sor) t (ion t // sortions + rê) t (ion t // arrêtions, apprêtions + + s) t (ion t // gestion + _ta) t (ion t // tation + sen) t (ion_ t // sentions, ressentions + t) t (ion t // combattions + + t (iel s // partiel + t (ieu s // ambitieux + t (iAm s // patiemment + + mar) t (ien s // martien vénitienne + a) t (ien s + i) t (ien s + o) t (ien s + + ipé) t (ieX s + amé) t (ieX s + nu) t (ieX s // minutie + ni) tien (t_ si + bu) tien (t_ si + + cra) t (ieX s // démocratie + + ner) t (ie s // inertie + + _ce) t (_ t +_transA) t (_ t + +// group t: English section + th (A _^_en // this + th (K _^_en // month + _) time _^_en + tle (_ _^_en + too _^_en + ttl _^_en +g) ton (_ _^_en // try, country +i) t (uneX _^_en + try (_ _^_en // try, country + sCar) t (_ _^_en // smart, start + sCar) t (er_ _^_en // starter + _) tun (AX _^_en + + +.group u + u y // cruel nuage brut + ue (il W // orgueil + ui yi // nuit, fuite + uin (K yE~ // juin + _C) u (rfX W + _bl) u (ff W + _s) u (rfeX W + uy (A yij + + C) ucci utSi // capuccino + _g) ua wa + ag) ua (X wa + Ctig) ua (_ wa + _c) ul (_ y + _) ultra (P5 yltra + g) u (ay u + haïk) u (X u + + C) u (bX W // hub, club + C) u (gX W // bug, mug + _n) u (rse W // nurse + pr) unt (_ W~ // emprunt + um (_ Om // album + f) um (_ W~ // parfum + um (L11 W~ // humble + un (C W~ // emprunt lundi + un (n y // tunnel + CC) un (_ W~ // brun + uc) un (_ W~n2 // aucun + un (_ W~n2 // un avion + _h) un (_ W~ // hun + + fl) ux (_ y // flux, reflux + g) u (A // fatigue + g) u (ï y // ambiguïté + g) u (ë y // ambiguë + p) u (tsch u // putsch + uz (z W +g) ua (l_ wa + +// group u: English section +L03) ual (_ _^_en // usual + uch (_ _^_en // much + _b) usi _^_en // business, businessman + C) ui (ce _^_en // produice, juice +C) ult (_ _^_en + umber (_ _^_en + ump (_ _^_en + r) u (nX _^_en // run, autorun + unch _^_en + under _^_en // under, understand, thunder + _C) un (_ _^_en + _C) un (ny _^_en + _) up (C _^_en // upper, update + up (_ _^_en // setup + urn (X _^_en // burn, turn + ust (_ _^_en // just, trust + uzz _^_en // buzz + + +.group ü + ü y + üs (_ ys + üm (_ om + ül (_ yll + + +.group v + v v + vers (_ vErz2 + dri) ver (X vWr + view (X vju + _) view (A vjuv + +// group v: English section + voice (X _^_en + void (_ _^_en + vy (_ _^_en + + +.group w + w w + _) w (A _|w + w (ag++ v // wagon + +// group w: English section + _) w (AC _^_en + _) w (ina w + _) w (Ai _^_en + _) w (Att w + _) w (ACo w + _) we _^_en + wh _^_en // why whisky when + wr _^_en // write + war _^_en // war + wav _^_en // wave + way _^_en // way, away +A) wn _^_en + wor _^_en + + +.group x + x ks + xx ks + _) x (A gz // xylophone + _) x (CP1 iks // xylophone + xml (_S3 _|iksEmEl + e) x (A gz // exagérer exemple + L03e) x (A ks // annexe, vexer + _ine) x (A gz + _e) x (h gz // exhumer + + ai) x (_ // voix paix prix + oi) x (_ + ri) x (_ + + _soi) x (A s // soixante + + Au) x (_ z2 // faux feux choux + + _au) x (quel // auxquels + + _di) x (_neuf z // liaison: dix-neuf + _di) x (_ z3 + _si) x (_neu s // liaison: six-neuf + _si) x (_ z3 + + di) x (iè z // dixième + si) x (iè z // sixième + deu) x (iè z // deuxième + + +.group y + y i // cryogénique myope + _) y (A _|j // yak + _) y (eu j // yeux + _) yacht _^_en // yacht, yachtman + + _) yahoo (P5 ja'u + ym (L11 E~ // tympan + ym (_ E~ // thym + X) ys (_ is + + yn (K E~ // laryngite + y (nn i + +// group y: English section +_C) y (_ _^_en +AC) y (_ _^_en +C) y (e_ _^_en +%C) y (_ _^_en +ss) y (_ i +@CeC) y (_ _^_en +nC) y (_ _^_en + yze _^_en + + +.group z + z z + t) z s // tzigane + t) zer (_ zEr + C) zer (_ zWr + + +.group +// accented characters, these could have their own groups if they need more rules + â a: + ñ n^ + + é e // été + ê E // fête + + ö o // angström + û y: // fûtes + ü y // bülcher + + +// symbols that are normally spoken when reading text +// , (D pilk:u +_L16_) : (_L17D_ Wr // Say time + $ dOlar + ° d@gre + _n_) ° // n° + ' (C _^_en + + + + + + + + + diff --git a/dictsource/hu_list b/dictsource/hu_list index 04de6d0b..5fe96b04 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -452,6 +452,7 @@ mm milime:tER2 $unstressend (mm-nyire) milime:tER2n^iR2E $unstressend (mm-es) milime:tER2ES $unstressend (mm-t) milime:tER2t $unstressend +nszk EnEska: RAM R2Am $allcaps //Espeak normaly spokening this abbreviation with erraem, but this is not good Psszt ps:t $capital // similar word with quiet word. Espeak default spokening this abbrew quiet word with letter by letter by default. Pszt ps:t $capital //same as prewious abbrewiation @@ -3272,6 +3273,8 @@ koncepciójáról $unstressend (törvény koncepciójáról) tYR2ve:n^_||kontsEptsio:ja:R2o:l $unstressend miniszterelnök $unstressend (orbán viktor miniszterelnök) oR2ba:n_||viktoR2_||ministER2ElnYk $unstressend +(számít a miniszterelnök) sa:mi:t_'||A'||ministER2ElnYk $unstressend +(a miniszterelnök) A'||ministER2ElnYk $unstressend minisztert $unstressend összeülnek $unstressend tárgyalásokban $unstressend @@ -4445,7 +4448,7 @@ alkalmazással $unstressend (dolgok idegesítenek) dolgok_'||idEgESi:tEnEk $unstressend (is jelezték) iS_||jElEzte:k $unstressend fordulok $unstressend -(miért van az) mie:R2t_'||vAn_'||Az $unstressend +(miért van az) mie:R2t||vAn||Az $unstressend (módot választom) mo:dot_||va:lAstom $unstressend (a hiba) A'||hibA $unstressend (kerül sor) kER2yl_||SoR2 $unstressend @@ -4720,6 +4723,85 @@ biciklizőknek $unstressend forintért $unstressend (a szintet) A'||sintEt $unstressend (egy próbát) EJ_'||pR2o:ba:t $unstressend +(lehetőség van arra) lEhEtY:Se:g||vAn||AR2R2A $unstressend +szervét $unstressend +parancsnokságát $unstressend +kötelezettséget $unstressend +tarthatnak $unstressend +korhatárt $unstressend +korhatára $unstressend +törvényt $unstressend +gondoskodik $unstressend +(tartja el) tArcA_'||El $unstressend +(alól az) Alo:l_'||Az $unstressend +életévét $unstressend + + +nagykorú $unstressend +szólaljon $unstressend +elmaradt $unstressend +őszintén $unstressend +(éjszaka volt) e:jsAkA_'||volt $unstressend +szabott $unstressend +dolgok $unstressend +kifizetnie $unstressend +különadót $unstressend +ezzel $unstressend +szóba $unstressend +azzal $unstressend +(van itt) vAn_'||it: $unstressend +(tudta volna) tut:A'||volnA $unstressend +maradhatnak $unstressend +címezte $unstressend +hivatkozott $unstressend +felelősségük $unstressend +bíróságot $unstressend +(vezetik el) vEzEtik_'||El $unstressend +firtassuk $unstressend +fogni $unstressend +társadalomban $unstressend +években $unstressend +(számunkra az) sa:munkR2A_'||Az $unstressend +azután $unstressend +vitába $unstressend +múltról $unstressend +munkahely $unstressend +pedig $unstressend +vitában $unstressend +(ki kell mondani) ki_||kEl:_||mondAni $unstressend +(lehet venni) lEhEt_'||vEn:i $unstressend +klónok $unstressend +(kerül itthon) kER2yl_'||ithon $unstressend +összeg $unstressend +élményét $unstressend +háttértár $unstressend +(fejlett processzor) fEjlEt:_'||pR2otsEs:oR2 $unstressend +eredményező $unstressend +alkalmazásával $unstressend +(akar a gyártó) AkAR2_'||A'||Ja:R2to: $unstressend +(dob piacra) dob_'||piAtsR2A $unstressend +nyitja $unstressend +kötnie $unstressend +(úgy fest) u:J_'||fESt $unstressend +(lehet ismerős) lEhEt_'||iSmER2Y:S $unstressend +kamerát $unstressend +alkalmas $unstressend +bővíteni $unstressend +(is lehet bővíteni) iS_'||lEhEt_'||bY:vi:tEni $unstressend +(a tablethez) A'||tAblEthEz $unstressend +olcsó $unstressend +kapcsolható $unstressend +kapcsolni $unstressend +peremére $unstressend +(nagyra van állítva) nAJR2A_'||vAn_'||a:li:tvA $unstressend +folyamatos $unstressend +(is lehet csatlakoztatni) iS_'||lEhEt_'||tSAtlAkostAtni $unstressend +kipróbálni $unstressend +(lehet tudni róla) lEhEt_'||tudni_'||Ro:lA $unstressend +váltana $unstressend +találtam $unstressend +(sem biztosak) SEm_'||bistoSAk $unstressend + // word pairs @@ -4991,5 +5073,5 @@ egyezség eggyesség (Mhz-en) megahercen (ORTT-től) oerrtététől //special exceptio (kilogramm) kilogram - +mszmp emeszempé diff --git a/dictsource/hu_rules b/dictsource/hu_rules index 6362b0f2..49ee34d4 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -81,7 +81,7 @@ gyümöl) cs (zs tS _kó) c (csomó ts árbó) c (csúcs ts árbo) c (csúcs ts -fegyen) c (csoport ts +fegyen) c ts ccs (L01 tS // only speak one cs if followed by a consonant cc (L01 ts // only speak one c if followed by a consonant ccsr tSR2 //special exception with need always execute @@ -127,10 +127,22 @@ szanité) c (cs ts kilen) c (schill ts _bohó) cs ts|S _ar) c (sérül ts - _har) c (sor ts - _áká) c (söv ts + _har) csor ts|SoR2 _áká) c (söv ts + _aká) c (söv ts _bohó) c (sz ts + _vi) cc (sor ts + tán) cs (ics tS + _ér) c (sisak ts + _in) cz (éd ts +_virgon) c (ság ts +_elmén) c (ség ts +martaló) c (ser ts + _ér) c (sas ts + _újon) c (ság ts + _kuru) c (ság ts + _paló) c (ság ts + .group ch anar) ch (i h @@ -161,6 +173,10 @@ oligar) ch h mazo) ch (izm h mazo) ch (is h ar) ch (aikus h + _ar) ch (imé h +diszti) ch (on h + ma) ch (iavell h + _or) ch (ide h .group d @@ -184,7 +200,8 @@ oligar) ch h dsz (_S3 ts: beszé) d (szin d beszé) d (sebesség d - cselé) d d + cselé) d (so d + dobermann dob:ER2mAn föl) d (sánc d ha) dd (_S2 d @@ -318,6 +335,49 @@ miliár) d (szor d beszé) d (jel d _biliár) d (szo d rekor) d (sebesség d + beszé) d (stílus d + zöl) d (szín d + ná) d (szőnye d +manzár) d (szob d +paliszá) d (sor d + föl) d (színé d + föl) d (színű d + ren) d (szerető d + kó) d (szó d + fjor) d (szerű d + harma) d (száz d + kar) d (szíj d + negye) d (szél d +smarag) d (szín d + száza) d (szám d + tér) d (szokny d + _va) d (szag d + _va) d (szam d + _va) d (szárny d + árpá) d (zászló d + árpá) d (sáv d + beszé) d (zagy d + ezre) d (szerte d + ezre) d (zászl d + föl) d (színek d + föl) d (szökő d + föl) d (szürk d + kalan) d (szerep d + _kar) d (szúr d + _kö) d (szerű d + _kö) d (szürk d + ná) d (síp d + ná) d (szerd d + ná) d (szöve d + _ren) d (jel d + _ren) dsz (eretet d|s + szaba) d (szelle d + szaba) d (szerel d + száza) d (szint d + tér) d (szíj d + _tér) d (zseb d + twee) d (szövet d + utó) d (szerv d .group dz fogó) dz (kod ts @@ -330,6 +390,7 @@ harapó) dz z himbáló) dz z lopó) dz z szedelő) dz z +szedelő) dz (kö s tapogató) dz z ó) dz (kod ts villó) dz z @@ -478,6 +539,7 @@ imádsá) g (gyűjt g rá) g (gyűjt g //for example virággyűjtés, virággyűjteményt words _lo) g (gyűjt g //for example loggyűjtemény word dro) g (gyanú g + le) gg (roteszk g: .group gy gy J @@ -593,14 +655,25 @@ huszone) gy (es J: _e) gy (é_ J: _mint-e) gy (é_ J: na) gy (sáp J +_hiszeke) gy (e J: +huszone) gy (ed J: +huszone) gy (ez J: + újrae) gy (esít J: + e) gy (éjszak J: +_egyszere) gy (e J: +_huszone) gy (e J: .group h h h hertz hER2ts hh (-L01 h minde) hh (ez h - - + _cse) h (ország //special exception, the h phoneme doesn't need spokening thiws word part + _cse) h (szlovák //special exception, the h phoneme doesn't need spokening thiws word part + _ju) h (kolb + _ju) h (sajt + _ju) h (tenyész + _ju) h (szárnyék .group i i i @@ -620,6 +693,7 @@ _mint-e) gy (é_ J: v) í (zére i sz) í (ve i t) í (zes i + t) í (zesz i: sz) í (vel i: _t) í (zük i _sz) í (vattak i @@ -627,6 +701,12 @@ _mint-e) gy (é_ J: _sz) í (vató i _v) í (zi i //for example vízipipa, vízimentők beginning words need spokening i, not i: phoneme _v) í (zió i: //But this word an exception for prewious rule +agressz) í (v i: + _sz) í (nész i + _sz) í (néssz i + sz) í (vatn i +_megsz) í (vatta i + .group j j j @@ -816,6 +896,9 @@ helybe) n (jár n mikrofo) n (nyílás n szí) n (nyom n kormá) ny (javaslat n^ + _me) ny (assz n^ + _me) nny (assz n^ +kölcsö) n (jegyz n .group o o o @@ -843,6 +926,7 @@ mikrofo) n (nyílás n ?1 _) potsdam potsda:m pp (-L01 p //if have consonant after - character, need spokening one p letter + .group q q kv qu kv @@ -899,7 +983,7 @@ robbaná) s S gyalogo) s (zászló S ki) s (zsidó S szennye) s (zsá S - alvá) s (zavar S + alvá) s (zava S magatartá) s (zavar S erőforrá) s (zabál S működé) s (zava S @@ -913,6 +997,27 @@ identitá) s (zavar S fáklyá) s (zen S _ki) s (zombor S _alvá) ssz (üksé Ss +_barná) ssz (ürke Ss +_kőműve) s (sz S + _lőré) s (sz S +_pörkölé) s (sz S + hadá) s (szag S + _körö) s (szakál S + hú) s (szag S +gránáto) s S +páncélo) s S +robbaná) s (zaj S + üté) s (záp S + mozgá) s (zava S +ejtőernyő) s S + puská) s S + lépé) s S + mágne) s S + padlá) s S + _pili) s S + _piro) s S + típu) s (zub S + _vörö) s S .group ss ssz ss2 @@ -927,7 +1032,6 @@ danubiu) ss s: //a radio station name danubiu) ssz s: //a radio station name juventu) ss s: juventu) ssz s: //a radio station name -ejtőernyő) ssz S|s farka) ssz (em Ss villamo) ssz (ék Ss titko) ssz (olgál Ss @@ -953,7 +1057,7 @@ zuhaná) ssz (erű Ss karo) ssz (éria Ss bor) ssz (em Ss bor) ssz (ór Ss - kéke) ssz (ürke Ss + kéke) ssz (ürk Ss éde) ssz (áj Ss égé) ssz (abály Ss egyene) ssz Ss @@ -1006,11 +1110,9 @@ könyve) ssz (ek Ss látomá) ssz (erű Ss lejté) ssz (ög Ss lengé) ssz (abály Ss - lépé) ssz (ám Ss nyomá) ssz (erű Ss löké) ssz (erű Ss luxu) ssz Ss - mágne) ssz (alag Ss megállapodá) ssz (erű Ss meglepeté) ssz (erű Ss motoro) ssz (án Ss @@ -1022,7 +1124,6 @@ motoro) ssz (án Ss orvo) ssz (er Ss ökrö) ssz (ekér Ss ő) ssz (üle Ss - padlá) ssz (ob Ss pikkelye) ssz (árny Ss piro) ssz (em Ss plü) ssz (erű Ss @@ -1074,7 +1175,6 @@ kavará) ssz (erű Ss _sa) ssz (eg Ss ké) ssz (úrás Ss gyalogo) ssz Ss - puská) ssz Ss mozgá) ssz Ss _ke) ss (elring s: rádió) ssz (ob Ss @@ -1105,6 +1205,7 @@ ellátá) ssz (er Ss égé) ssz (ag Ss csapá) ssz (erű Ss menekülé) ssz (erű Ss + csapá) ssz (ám Ss _ökrö) ssz (ekere Ss _nyár) ssz (erű Ss hamva) ssz (őke Ss @@ -1150,6 +1251,144 @@ _farka) ssz (ig Ss lako) ssz (ám Ss _szencsége) ssz (űz Ss ki) ssz (ekrény Ss +csattaná) ssz (erű Ss + csikó) ssz (ám Ss +_csipké) ssz Ss +csobbaná) ssz (erű Ss +csuklá) ssz (erű Ss +csavará) ssz (erű Ss + ájulá) ssz (erű Ss +aranyo) ssz (őke Ss +_bakfi) ssz Ss + barná) ssz (ők Ss + bélé) ssz (alag Ss +_berendezé) ssz (e Ss + omlá) ssz (ag Ss + rengé) ssz (erű Ss + pergé) ssz (erű Ss + dú) ssz (akáll Ss + _éde) ssz (esztest Ss +egyene) ssz (ál Ss + előőr) ssz (erű S|s + rúgá) ssz (erű Ss + farka) ssz (uk Ss + _fá) ssz (ín Ss +fehére) ssz (őke Ss +feketé) ssz (ürk Ss + pa) ssz (íroz s + ma) ssz (íroz s +szerelé) ssz (ett Ss +fertőzé) ssz (erű Ss + fájá) ssz (er Ss +csuszamlá) ssz (erű Ss + fűté) ssz (ag Ss +habitu) ssz (erű Ss +halotta) ssz (ob Ss + hányá) ssz (ag Ss +világo) ssz (őke Ss + + kéré) ssz (erű Ss +rándulá) ssz (erű Ss + utalá) ssz (erű Ss +villaná) ssz (erű Ss + hárma) ssz (ám Ss + szoro) ssz (erű Ss +_hente) ssz (ak Ss + örgé) ssz (erű Ss + hő) ssz (erep Ss + hú) ssz (állít Ss + járá) ssz (olgálat Ss + járá) ssz (erű Ss + irtá) ssz (él Ss +jelenté) ssz (int Ss + karo) ssz (ériá Ss +katekizmu) ssz (erű Ss +_keríté) ssz (ag Ss + _kevé) ssz (er Ss + látá) ssz (ög Ss +nyilatkoztatá) ssz (erű Ss +szögellé) ssz (erű Ss +_kitünteté) ssz Ss +kommunikáció) ssz (ob Ss + köle) ssz (em Ss + köntö) ssz (erű Ss +könyöklé) ssz (él Ss + _körö) ssz (ig Ss + _kőri) ssz Ss +_küldeté) ssz Ss +labirintu) ssz (er Ss +lázadá) ssz Ss +_lejté) ssz S|s + üté) ssz (ám Ss + málhá) ssz Ss + medre) ssz (ék Ss + _mela) ssz (ín s: + _méne) ssz Ss +_mesze) ssz (ür Ss + _móku) ssz Ss + _napo) ssz (ob Ss + utazá) ssz (erű Ss + nedve) ssz (ürk Ss + neme) ssz (ív Ss + neme) ssz (őrm Ss +nyikkaná) ssz (er Ss + nyomá) ssz (ab Ss + orvo) ssz (áz Ss + orvo) ssz (er Ss + vodá) ssz (int Ss +örvénylé) ssz (erű Ss + párná) ssz (ék Ss + _pené) ssz (ín s: +pedagógu) ssz (ob Ss +pirami) ssz (erű Ss +_pirító) ssz (e Ss +_piszko) ssz Ss +pisztolylövé) ssz (erű Ss + rádió) ssz (erep Ss + rántá) ssz (erű Ss +repülő) ssz (árny Ss + _ré) ssz (erű Ss +_rózsá) ssz (ők Ss + ruhá) ssz (ekere Ss +selyme) ssz (őke Ss + sérté) ssz (ám Ss +borzongá) ssz (erű S|s +sikoltá) ssz (erű Ss + _sor) ssz (eszély Ss +suhogá) ssz (erű Ss + _suva) ssz (a s: + tálto) ssz (árny Ss +szórakozá) ssz (ám Ss + szúró) ssz (em Ss + támlá) ssz (ék Ss +társalgá) ssz (ámba Ss +templomo) ssz (ak Ss +_tigri) ssz Ss + _típu) ssz (ám Ss + _típu) ssz (öveg Ss +tizede) ssz (állás Ss + tölté) ssz (ab Ss + tölté) ssz (erű Ss + ulánu) ssz (ázad Ss +utasítá) ssz (erű Ss + uta) ssz (int Ss + uta) ssz (olg Ss +ügyelete) ssz (ob Ss +_vallomá) ssz Ss + _váro) ssz (él Ss + vére) ssz (áj Ss + vere) ssz (őke Ss + vérte) ssz (ázad Ss +vörhenye) ssz (őke Ss + _vörö) ssz Ss +zavaro) ssz (ür Ss +_nesze) ssz (er s + a) ssz (isztens s + ka) ssz (íroz s + _e) ssz (enci s +bégeté) ssz (erű Ss + a) ssz (isztál s + piro) ssz (ka s .group sz @@ -1162,10 +1401,8 @@ _szencsége) ssz (űz Ss sz (öld Sz va) sz (abl S||z egé) szs (ég S -liszte) szs (ák SZ rend) sz (er s: -krumpli) szs (ák SZ -szerszámo) szs (ák SZ + rend) sz (erető s maro) sz (ug Sz körö) sz (ug Sz fáklyá) sz (ene Sz @@ -1173,23 +1410,16 @@ fáklyá) sz (ene Sz evé) sz (avar Sz vonó) sz (ene Sz va) sz (ár Sz -kenyere) szs (ák SZ sonká) szs (eml SZ vize) szs (em SZ iga) szs (ágos S: li) sztsz (erű st|s tava) sz (ára s -rongyo) szs (ák SZ para) sztsz (ek st|s rava) sz (ár s _ka) sztsze st|sE -szemete) szs (ák SZ dro) sztsze (rző st|sE //drosztszerződés word need spokening st and single sE phoneme - _búzá) szs (ák SZ -_szene) szs (ák SZ -_szalmá) szs (ák SZ va) szs (anér SZ -gaboná) szs (ák SZ va) sz (ápor Sz bati) sztsz (erű st|s para) sztsz (andál st|s @@ -1201,13 +1431,11 @@ gaboná) szs (ák SZ azbe) szt (sisak st nyu) szt (süveg st serté) szs (ír SZ - szere) szs (ák SZ - rizse) szs (ák SZ tá) szs (in SZ - ruhá) szs (ák SZ - ro) szs (ák SZ va) szs (ír SZ - széná) szs (ák SZ + szs (ák SZ //All szsák part containing part need spokening single S and Z phoneme, for example kenyereszsák, pénzeszsák, krumpliszsák, cukroszsák words + sz (acsk Sz //all szacsk containing part block need spokening single S and z phoneme, for example chipseszacskó word + legké) szs (éges S: .group t t t @@ -1308,6 +1536,10 @@ fejeze) t (sor t küldö) tt (gyűl t szé) t (söpör t rokkan) t (segít t +összebéké) ts (e tS: + _hé) t (col t + _fro) tt (ír t + plaká) t (cég t .group tj C) tj c @@ -1376,6 +1608,12 @@ terüle) tj (elöl tj _á) tj (u tj _tábláza) tj (egy tj üzene) tj (el tj + á) tj (össz tj +_keresz) tj (á tj +_deszan) tj (árm tj +_készle) tj (elen tj +tisztele) tj (egy tj + _vész) tj (ósl tj .group ts ts (_S2 tS //general rule with word end of ts letters @@ -1588,6 +1826,8 @@ támogato) ts (ág tS: _á) tsz (olgál t|s felira) ts (áv t|S pö) tsz (en ts: + _á) tsz (orult t|s + leme) tsz (vén ts .group tt tt t: @@ -1604,6 +1844,10 @@ helyeze) tt (ről t: ttyj c: keresz) tt (űz t: me) ttsz (et ts: +bennszülö) tt (jelmez t + +.group ty +mindszen) ty t|i .group u u u @@ -1614,6 +1858,10 @@ szovjet) u (nió u: h) ú (szan u h) ú (szas u h) ú (szat u + _h) ú (gocs u + h) ú (gom u + _h) ú (gy u + _h) ú (ggy u .group ü @@ -1786,7 +2034,6 @@ magyará) z (kod s ezkö) z (sáv z eszkö) z (sáv z _mé) z (sárg z - tű) z (sáv z _tí) z (sor z _szá) z (sor z ré) z (sisak z @@ -1799,8 +2046,27 @@ magyará) z (kod s ezkö) z (sor z wal) z (er ts tanácskö) z (társaság s - tű) z (sebesség z + tű) z z _tű) z (zsonglőr z + búcsú) z (tat s + bogo) z (ták s + fogó) z (kod ts + szára) z (sült z + precí) z (ség z + _ro) zs (zabál Z + _bor) z (zsír z + oszto) z (kod s +csatlako) z (tok s + _bron) z z + tű) z (zsák z + búcsú) z (kod s + búcsú) z (t s + gá) z (spra z + eszkö) z (t s + kórhá) z (sá z + neme) z z + helye) z (ke s + _tí) z (sou z .group $ dolla:R2 diff --git a/dictsource/ka_rules b/dictsource/ka_rules index 5dff815c..729321d4 100755 --- a/dictsource/ka_rules +++ b/dictsource/ka_rules @@ -140,13 +140,13 @@ // For cyrillic characters (U+0400 to U+04FF) use Russian voice .group 0xd0 - \320 _^_RU + 0xd0 _^_RU .group 0xd1 - \321 _^_RU + 0xd1 _^_RU .group 0xd2 - \322 _^_RU + 0xd2 _^_RU .group 0xd3 - \323 _^_RU + 0xd3 _^_RU .group $ dolari diff --git a/dictsource/kn_rules b/dictsource/kn_rules index 7b3370dd..f8cd483f 100644 --- a/dictsource/kn_rules +++ b/dictsource/kn_rules @@ -258,9 +258,9 @@ .group 0xe0a4 // devanagari - \340\244 _^_HI // switch to hindi voice for devanagari characters + 0xe0a4 _^_HI // switch to hindi voice for devanagari characters .group 0xe0a5 // devanagari - \340\245 _^_HI + 0xe0a5 _^_HI .group diff --git a/dictsource/ml_rules b/dictsource/ml_rules index 6191e601..c07810dd 100644 --- a/dictsource/ml_rules +++ b/dictsource/ml_rules @@ -273,9 +273,9 @@ _പ്രൊ) ഫ (സര് fa .group 0xe0a4 // devanagari - \340\244 _^_HI // switch to hindi voice + 0xe0a4 _^_HI // switch to hindi voice .group 0xe0a5 // devanagari - \340\245 _^_HI + 0xe0a5 _^_HI .group diff --git a/dictsource/ta_list b/dictsource/ta_list index 43e6938b..41d0c4d0 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -358,9 +358,10 @@ tamil தமிழ் $text பாதிப்பு $alt பீடா $alt பைக்க $alt -பாதிக்கும் $alt பாதிக்குமா $alt பத்திரப் bVttirVp +பாய்ஸ் $alt +புக்கர் $alt @@ -427,6 +428,9 @@ tamil தமிழ் $text தட $alt தடியாய் $alt தொள $alt +தான $alt +தம்மம் $alt +தம்ம $alt // initial ட @@ -510,6 +514,7 @@ tamil தமிழ் $text கௌன் $alt கிண் $alt கிர் $alt +கங்க $alt @@ -541,3 +546,5 @@ tamil தமிழ் $text செட் set. திக் dik பிட் bit. +புட் fud. +உப்ப ubbV diff --git a/dictsource/ta_rules b/dictsource/ta_rules index 4939b6ef..eb8c4bfc 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -86,6 +86,8 @@ // words after 'full' .L15 மீல்ஸ கிளாஸ பாட்டில டிக்கெட் டாஸ +// words after பாதிக்கும் +.L16 மேல மேற் குறை // consonants @@ -115,6 +117,8 @@ //sort + _) க (ங்கபாடி gV + _) க (ங்கர gV _) க (ங்கா gV _) க (ங்காரு kV _) க (ங்கை gV @@ -161,6 +165,7 @@ _) க (ர்வ gV _) க (லாட்டா gV _) க (லிலL08யோ gV + _) க (லீசிய gV _) க (லீர gV _) க (லீல gV _) க (ளுக் gV @@ -173,6 +178,7 @@ _) க (வுனை gV _) க (வுன்கள gV _) க (வுர gV + _) க (ாசியாபாத் g _) க (ாண்டாமிருக g _) க (ாண்டீப g _) காண்டேக (ர ga:n.d.e:kV @@ -187,6 +193,7 @@ _) க (ாயத்திரி g க (ாரன k _) க (ார்டன g + _) க (ார்டியன g _) க (ிஃப்ட g _) க (ிடுகிடு g _) க (ிண்ணென்ற g @@ -202,8 +209,11 @@ _) கி (ரந்த g _) கி (ரவுண்ட g _) கி (ரஹ g + _) கிராஃபைட gra:faIt.V# _) கி (ராக்கி g + _) கிராணைட gra:naIt.V# _) கி (ராதக k + _) கிராபைட gra:faIt.V# _) கிராப் kra:p _) கி (ராம g _) கி (ராம்ப k @@ -211,6 +221,7 @@ _) க (ிரிக்கா g _) க (ிரிஜா g _) க (ிரிதர g + _) க (ிரிதார g _) கி (ரித்த k _) கி (ரிமினல k _) கி (ரியா_ k @@ -219,6 +230,7 @@ _) க (ிரியி g _) க (ிரியு g _) கி (ரில் g + _) க (ிரிவல g _) கி (ரிஸ்ட k _) கிரிஸ்டோப (ர krist.o:fV _) கி (ரிஸ்த k @@ -237,8 +249,10 @@ _) கி (ரைண்டர g _) கி (ரௌண்ட g _) க (ிர்ரெ g + _) கி (றிஸ்டல k _) கி (ளப்_ k _) கிளப்ப (ில kl.Vbb + _) கிளப்ப (ுகள klVbb _) கிளப்ப (ுக் kl.Vbb _) கிளப்ப (ை kl.Vbb _) கிளர்க் klVrk @@ -300,6 +314,7 @@ _மன்மதக்) க (ுகை g _) க (ுதிச் g _) க (ுதித் g _) க (ுதிப் g + _) க (ுதிப்பகுதி k _) க (ுபீர g _) க (ுபுகுபு g _) க (ுபுக் g @@ -427,6 +442,7 @@ _மன்மதக்) க (ுகை g _) க (ௌன்கள g _) க (ௌரவ g _) க (ௌரி g + _) க (ௌளை g _) க் (ரவுண்ட g _) க் (ரிகோரிய g _) க்ரிஸ்டோப (ர krist.o:fV @@ -448,6 +464,8 @@ _வெங்) கட kVt.V# ஒரு) க (ட்ட kV மறு) க (ட்ட kV _கால) க (ட்ட kV + _பின்) க (ட்ட kV + _முன்) க (ட்ட kV ஆரம்ப) க (ட்ட kV _கல்) க (ண்ட kV _நற்) க (தி gV @@ -515,6 +533,7 @@ _மௌனி) க (ா k _ஸ்ரீலங்) க (ா k _ஹன்L04ி) க (ா k அனாமி) க (ா k +சித்திரலே) க (ா k _ஹாங்) க (ாங் k _தென்) க (ாசி k _நேர்) க (ாணல k @@ -532,6 +551,7 @@ _ஹன்L04ி) க (ா k _பால்) க (ாரர k _தையல்) க (ாரர k _வண்டி) க (ாரர k + அங்) க (ாரா k _பூ) க (ாரி k _பால்) க (ாரி k _கடை) க (ாரி k @@ -571,7 +591,10 @@ _தொன்ம) க (ால k ஆதி) க (ுடி k _பூர்வ) க (ுடி k _மூத்த) க (ுடி k + அமண்) கு (டி ku2 அரிய) கு (டி ku2 // Don't change to [U] +அம்மன்) கு (டி ku2 +உடையார்) கு (டி ku2 மன்னார்) கு (டி ku2 நற்) க (ுண g _சற்) க (ுண g @@ -590,6 +613,7 @@ _டா) குமெண்ட kUmen.tV# _) குல்க (ந்த gulkV _மெரு) க (ூட்ட g அறை) க (ூவ k + _மார்) கெட் ket. _ஓ) க (ே k நீல) க (ேசி k புலி) க (ேசி k @@ -665,6 +689,7 @@ _போர்) க்க (ுண gg _வெடி) க்க (ுண்ட gg _துப்பாக்கி) க்க (ுண்ட gg ஜன) க்க (ும்பல gg + _மார்) க்கெட் kket. _ல) க்க (ேஜ gg L03) க்க (ோபுர gg _வி) க்ச (னரி ks.V @@ -685,7 +710,9 @@ _துப்பாக்கி) க்க (ுண்ட gg _சௌ) க் (ய k அசௌ) க் (ய k _செ) க்யூரிட (ி kjU:rit. + _சா) க் (ரடீஸ k _ச) க்ரப (ாணி krVp + _சீ) க் (ரம k வி) க (்ரம k _ரெ) க்ரூட் krU:t. ஆ) க (்ரோஷ k @@ -725,6 +752,7 @@ _துப்பாக்கி) க்க (ுண்ட gg _) ச (க்கரவர்த்தி tSV _) ச (க்கிலி tSV சங்க (ர s.VNkV + _) ச (ட்டL08ஸ்கர tSV _) ச (ட்டினி tSV _) ச (ட்னி tSV _) ச (ண்டாள tSV @@ -749,6 +777,7 @@ _விமோ) ச (ன tSV _) ச (ப்பா tSV _) ச (ப்பி tSV _) ச (ப்பு tSV + _) ச (ப்பெ tSV _டின்) ச (ர tSV _பங்) ச (ர tSV _) சரசு (வதி sVrVs @@ -789,10 +818,10 @@ _தணிகா) ச (ல tSV ச (ாரிய tS _) சாருலத (ா tSa:rUlVt _) ச (ாருவ tS + _) ச (ார்ஜ tS _ரீ) ச (ார்ஜ tS _டிஸ்) ச (ார்ஜ tS _) ச (ார்ஜை tS - _) ச (ார்ஜ்_ tS _) ச (ார்லஸ tS _) ச (ார்லி tS _) ச (ாளுக்கிய tS @@ -937,7 +966,7 @@ _தணிகா) ச (ல tSV ஞ n^V ஞ (B n^ - _கா) ஞ்ச (னா ntSV + _கா) ஞ்ச (ன ntSV இ) ஞ்ச் ntS _வி) ஞ்ச் ntS @@ -956,11 +985,13 @@ _தணிகா) ச (ல tSV //sort + _பேண்) ட t.V# _வால்) ட t.V# _கமெண்) ட t.V# _க்ளையண்) ட t.V# _பேஷண்) ட t.V# _ரிப்போர்) ட t.V# +_வோல்) ட t.V# _ஷிஃப்) ட t.V# அL04ால்) ட t.V# அக்ரீமெண்) ட t.V# @@ -1010,6 +1041,7 @@ _ஷிஃப்) ட t.V# _மால்) ட (ா t. _) டாக் (_ t.a:k _) ட (ாக்க t. // talkies + _) டாக்குமெண்ட d.a:kkUmen.t.V# _) டாக்ட (ர d.a:kt.V _) டாக (்ஸி t.a:k _) டாங்க (ர t.a:NkV @@ -1125,7 +1157,7 @@ _செண்) டிமெண்ட t.imen.t.V# _) ட (ூர t. இண்) ட (ெ t. _) டெக் (னாலஜி t.ek - _) டெக்னிக (ல t.eknikV + _) டெக்னிக t.eknikV# _) ட (ெக்ஸாஸ t. _) ட (ெக்ஸ் t. _) ட (ெண்டர t. @@ -1164,6 +1196,7 @@ _லான்_) ட (ென்னிஸ t. ளு) ட (ோனிய t. _) டோரண்ட (ோ t.o:rVn.t. _ப்ரி) ட (ோரிய t. + _லே) ட் t. @மெண்) ட் t. // -ment _பேண்) ட் t. இண்டர்நெ) ட் t. @@ -1195,6 +1228,7 @@ _லான்_) ட (ென்னிஸ t. _) ட் (ரான்ஸ்ஃபர t. _) ட் (ரான்ஸ்ப t. _) ட்ரான்ஸ்ப (ர t.ra:nsfV + _) ட்ரான்ஸ்ப (ரண்ட t.ra:nspV _) ட் (ரான்ஸ்பாண்டர t. _) ட்ரான்ஸ்பிரண்ட t.ra:nspirVn.t.V# _) ட் (ரான்ஸ்மீட்டர t. @@ -1338,8 +1372,10 @@ _நடுரோ) ட் (ல t. _) த (ன்வந்தரி dV _) தபதப dVbVdVbV# _) த (மயந்தி dV + _) த (ம்படி dV _) த (ம்பதி dV _) த (ம்பிடி dV + _) த (ம்மடிL11் dV _) த (யவ dV _) த (யாணந்த dV _) த (யால dV @@ -1411,6 +1447,7 @@ _நடுரோ) ட் (ல t. _) த (ிகம்பர d _) த (ிகில d _) த (ிகுதிகு d + _) த (ிக்கித்த d _) த (ிக்கில d _) த (ிக்கு d _) த (ிக்கு_முக்க t @@ -1560,10 +1597,12 @@ _நடுரோ) ட் (ல t. _) த (ேவகுல d _) த (ேவக் d _) த (ேவசேன d + _) த (ேவதாஸ d _) த (ேவதூத d _) த (ேவதை d _) த (ேவநேய d _) த (ேவன d + _) த (ேவரடி d _) த (ேவராஜ d _) த (ேவராட்டி d _) த (ேவராணி d @@ -1601,13 +1640,18 @@ _நடுரோ) ட் (ல t. //sort _வசந்) த tV# _க) த (L08ஜா t + _சாந்) த (_ tV _ப) த (ஞ்சலி tV _கீழ்) த (ட்ட tV _மேல்) த (ட்ட tV + _சாந்) த (த்த tV# பிள்ளை) த (ன tV முட்டாள்) த (ன tV _கௌ) த (ம tV + _சாந்) த (ம tV# _கௌ) த (மி tV + _புல்) த (ரை tV + _சாந்) த (லிங்க tV# _கீ) த (ா t _சீ) த (ா t _ல) த (ா t @@ -1629,6 +1673,7 @@ _புஷ்பல) த (ா t _நே) த (ாஜி t _சுல்) த (ான t _முல்) த (ான t + _சாந்) த (ானு tV# _சும) த (ி t _சாந்) த (ி t _சுகந்) த (ி t @@ -1647,10 +1692,12 @@ _பிரசார்_பார) த (ி t எ) தியோப (ிய tijo:p _பிர) த (ீ t த (ுறை t + த (ூக்க t // in word வீண்) த (ேவை t _நிவேதி) த (ை t வீண்) த (ொல்லை t அம்பே) த்க tkV# + _வா) த் (சல்ய t யு) த்த ddV# _சிரார்) த்த ddV# _ஸ்ரார்) த்த ddV# @@ -1678,6 +1725,7 @@ _சிறை) த்த (ண்டனை ddV ம) த்த (ிய dd வா) த்த (ிய dd வை) த்த (ிய dd + உபா) த்த (ிய dd _சா) த்த (ிய_ tt பு) த்த (ியி dd _சா) த்த (ியிரு tt @@ -1688,6 +1736,7 @@ _சிறை) த்த (ண்டனை ddV _சுப) த்த (ிர dd _ரு) த்த (ிர dd _ரௌ) த்த (ிர dd + _சூ) த்த (ிரச்சி dd _சூ) த்த (ிரன dd _சூ) த்த (ிரரி dd _சூ) த்த (ிரர் dd @@ -1721,10 +1770,12 @@ _வில்வி) த்த (ை dd _ஜெ) த் (மலானி t ச) த (்ய t நி) த (்ய t + ஆதி) த் (ய t இ) த் (யாதி t _மி) த் (ர t _காமசூ) த் (ர t ச) த்ரபதி trVpVti +_சி) த்ரலேக (ா trVle:k சி) த (்ரா t _சி) த் (ரா tti பவி) த (்ரா t @@ -1789,6 +1840,7 @@ _காமசூ) த் (ர t _) ப (கவான bV _) ப (காசுர bV _) ப (காசூரன bV + _) ப (காய bV _) ப (கிரங்க bV _) பக (ிரண்ட bVg _) ப (கிஷ்க bV @@ -1890,11 +1942,13 @@ _டீயும்_) ப (ன்னும்_ bV _) ப (லத்தினுட bV _) ப (லத்துட bV _) ப (லத்தை bV + _) ப (லத்தோடு bV _) ப (லப்பட bV _) ப (லப்படு bV _) ப (லப்பரீட்சை bV _) ப (லமணைத்த bV _) ப (லமாகC் bV + _) ப (லமாகவ bV _) ப (லமாகவே bV _) ப (லமாகி bV _) ப (லமாச்ச bV @@ -1937,6 +1991,7 @@ _டீயும்_) ப (ன்னும்_ bV _) ப (ஷீர bV _) ப (ஸ bV _) ப (ஹதூர bV + _) ப (ஹாய bV _) ப (ஹிரங்க bV _) ப (ஹிரண்ட bV _) ப (ஹ்ரெய bV @@ -1971,7 +2026,10 @@ _டெட்_) ப (ாடி b _) ப (ாட்டில்கள b _) ப (ாணங் b _) ப (ாணமு b + _) ப (ாணர b + _) ப (ாணாசுர b _) ப (ாணி b + _) ப (ாண்டேஜ b _) ப (ாதிக்கக்கூட b _) ப (ாதிக்கண் p _) ப (ாதிக்கப்பட b @@ -1979,26 +2037,34 @@ _டெட்_) ப (ாடி b _) ப (ாதிக்கலாம b _) ப (ாதிக்கவா b _) ப (ாதிக்கவில் b + _) ப (ாதிக்காத b _) ப (ாதிக்கால p + _) ப (ாதிக்கின்ற b _) ப (ாதிக்கு_ p _) ப (ாதிக்குமான b _) ப (ாதிக்குமாவ b _) ப (ாதிக்குமெ b + _) ப (ாதிக்கும்_ b + _) ப (ாதிக்கும்_L16 p _) ப (ாதிக்கும்_குறை p _) ப (ாதிக்கும்_மேற் p _) ப (ாதிக்கும்_மேற்பட்ட_ p _) ப (ாதிக்கும்_மேல p _) ப (ாதித்த b + _) ப (ாதிப்படை b _) ப (ாதிப்படைகி b _) ப (ாதிப்படையுமெ b _) ப (ாதிப்படைவ b _) ப (ாதிப்பதா b _) ப (ாதிப்பதை b + _) ப (ாதிப்பால b _) ப (ாதிப்பினால b _) ப (ாதிப்பிற்க b _) ப (ாதிப்பில b _) ப (ாதிப்புக் b + _) ப (ாதிப்புண்ட b _) ப (ாதிப்பும b + _) ப (ாதிப்புள்ள b _) ப (ாதிப்பேர p _) ப (ாதிப்பை b _) பாத (ிமா fa:t @@ -2011,6 +2077,7 @@ _டெட்_) ப (ாடி b _) ப (ானங்கள b _) ப (ானத்த b _) ப (ானமு b + _) ப (ானர்ஜி b _) ப (ானு b _) ப (ானெட் b _) பாப (ர ba:bV @@ -2025,6 +2092,7 @@ _டெட்_) ப (ாடி b _ஆடு_) ப (ாம்பே p _விளையாடு_) ப (ாம்பே p _ரூம்_) ப (ாய b + _) ப (ாய்லர b _) ப (ாரத b _) ப (ாரதி b _) ப (ாரத்த b @@ -2047,6 +2115,7 @@ _விளையாடு_) ப (ாம்பே p _) ப (ாலன b _) பாலப (ாட ba:lVp _) ப (ாலமுர b + _) ப (ாலம்மாள b _) ப (ாலய்யா b _) ப (ாலாஜி b _) ப (ாலாபிஷேக p @@ -2056,6 +2125,7 @@ _விளையாடு_) ப (ாம்பே p _) ப (ாலியத்த b _) ப (ாலிவுட் b _) ப (ாலுசாமி b + _) ப (ாலுசுவாமி b _) ப (ாலுடன் p _) ப (ாலும்_ p _) ப (ாலுவ b @@ -2063,7 +2133,9 @@ _விளையாடு_) ப (ாம்பே p _) ப (ால் p _) ப (ால்_தாக்கரே b _) பால்க (னி ba:lkV + _) பால்ட (ிமோர ba:lt. _) ப (ால்ய b + _) ப (ால்ஸ b _நேய_) ப (ாவ b _ராக_) ப (ாவ b _சகோதர_) ப (ாவ b @@ -2095,6 +2167,7 @@ _ராகத்தின்_) ப (ாவ b _) ப (ாவேய b _) ப (ாஷாக்கள b _) ப (ாஷாவ b + _) ப (ாஷிய b _) ப (ாஷை b _) ப (ாஷ்ய b _) ப (ாஸ்கர b @@ -2124,6 +2197,7 @@ _ராகத்தின்_) ப (ாவ b _) பிப (ி bip _) ப (ிபிசி b // bbc _) ப (ிம்ப b + _) ப (ியர b இயற்) ப (ியல b _) பி (யூனஸ்_ b _) ப (ிரகதீ b @@ -2223,6 +2297,7 @@ _ராகத்தின்_) ப (ாவ b _) பி (ராமிக் b _) பி (ராமின்_ b _) பி (ராமிஸ p + _) பி (ராய்லர b _) பி (ரார்தன p _) பி (ரார்தி p _) பி (ரார்த்த p @@ -2236,6 +2311,7 @@ _ராகத்தின்_) ப (ாவ b _) பி (ரிட b _) பிரிட (ோரிய prit. _) பி (ரிட்டோரிய p + _) பிரிண்ட prin.t.V# _) பிரிண்ட (ர prin.t.V _) ப (ிரித்தானி b _) பி (ரித்தானி b @@ -2276,6 +2352,7 @@ _ராகத்தின்_) ப (ாவ b _) பி (ரௌச b _) பி (ரௌன b _) ப (ிலாஸ்பூர b + _) ப (ில்கள b _) ப (ில்டப் b _) ப (ில்டிங் b _) ப (ில்லியன b @@ -2283,6 +2360,7 @@ _ராகத்தின்_) ப (ாவ b _) பி (ளஸ p _) பி (ளஸ்_ p _) பி (ளா p + _) பிளாக் bla:k _) பி (ளாட்பார p _) பி (ளாஸ்க் f // flask _) பி (ளீஸ p @@ -2336,6 +2414,7 @@ _ராகத்தின்_) ப (ாவ b _) ப (ுஜ b _) ப (ுட்டி b _பெனசீர்_) ப (ுட்டோ b + _) புட்ப (ால fut.b _) ப (ுதன b _) புத்த(K buddV _) புத் (தJ_புத+ put @@ -2391,6 +2470,7 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ூத்துக்குப் b _) ப (ூத்தை b _) பூப (தி bu:pV + _) ப (ூபனே b _) ப (ூபாள b _) ப (ூமத்திய b _) ப (ூமாதா b @@ -2445,13 +2525,17 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ேல் b _) ப (ேஷன f _) ப (ேஷா b + _) ப (ைகுக்கு b + _) ப (ைக்கிற்க b _) ப (ைக்குகள b + _) ப (ைக்கும b _) ப (ைசன b _) ப (ைண்ட b _) ப (ைனாக b _) ப (ைனாமி b _) ப (ைபிள b _) ப (ைரவ b + _) ப (ைராகி b _) ப (ொம்மன b _) ப (ொம்மனாட்டி p _) ப (ொம்மல b @@ -2464,6 +2548,7 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ோகத்தில b _) ப (ோகத்துக்க b _) ப (ோகத்தை b + _) ப (ோகன்வில்லா b _) ப (ோகர b _) ப (ோகித் b _) ப (ோகிப் b @@ -2492,6 +2577,7 @@ _பெனசீர்_) ப (ுட்டோ b _) ப (ோன்ஸ்லே b _) போப (ால bo:p _) போப (ோர் bo:f + _) ப (ோரடி b _) ப (ோரடிக்காமலா b _) ப (ோரடிக்குத b _) ப (ோரடிக்கும b @@ -2634,6 +2720,7 @@ _சொந்த) ப (ந்த bV அனு) ப (மா pV _க) ப (ம்_ bV _ஊடு) ப (யிர pV + _நடை) ப (யிற்சி pV கா) ப (ர bV நாகா) ப (ரண bV _ஒலி) ப (ரப் pV @@ -2644,6 +2731,7 @@ _சொந்த) ப (ந்த bV ஆ) ப (ரேஷன pV _கார்) ப (ரேஷன pV _பம்) ப (ர்_ pV + _கன்) ப (ர்ம fV கரம்) ப (ற் pV ப (ற்றி_ pV _தேக) ப (ல bV @@ -2656,10 +2744,13 @@ _முனிசி) ப (ல pV ஆயுதப்) ப (ல bV _மகா) ப (லி bV _மூடு) ப (ல்லக் pV + _மணி) ப (ல்லவ pV + அனு) ப (ல்லவி pV _க) ப (ளிகர bV வேலைப்) ப (ளு bV வட) ப (ழ pV வீண்) ப (ழி pV + _முத்து) ப (வள pV _வா) ப (ஸ pV _தீ) ப (ா p _கலி) ப (ா f @@ -2683,7 +2774,10 @@ _வெளிப்) ப (ாக b _பிக்) ப (ாக்க+ p உ) ப (ாசனை p ஈடு) ப (ாட p + _கட்டு) ப (ாட p _வழி) ப (ாட p + _குறை) ப (ாட p + _பட்ட) ப (ாட p _வேறு) ப (ாட p சமன்) ப (ாட p முரன்) ப (ாட p @@ -2702,6 +2796,8 @@ _வெளிப்) ப (ாக b அL06மதா) ப (ாத b ஒளரங்கா) ப (ாத b ஔரங்கா) ப (ாத b + _சிறு) ப (ாதை p + _நடை) ப (ாதை p ஜிந்தா) ப (ாத் b _பஞ்ச) ப (ாத்திர p ச) பாபதி ba:pVti @@ -2713,6 +2809,7 @@ _வெளிப்) ப (ாக b _சரி) ப (ார p எதிர்) ப (ார p _பிளாட்) ப (ார f + இன்) ப (ார்ம f அ) பார்மெண்ட pa:rment.V# கண்) ப (ார்வை p இம்) ப (ால f @@ -2739,6 +2836,7 @@ _ப்ரின்சி) ப (ால p _தமிழ்ப்) ப (ாஷ _b வாதா) ப (ி p _கடா) ப (ி f + _யுஎஸ்) ப (ி b சித்தப்) பி(ரமை b _கன்) ப (ிகர f வாலி) பிக (ேஷன fik @@ -2746,6 +2844,7 @@ _தமிழ்ப்) ப (ாஷ _b _கா) பிட(ல pit.V கண்டு) ப (ிடி p திமிர்) ப (ிடி p + _கடை) ப (ிடி p ராவல்) ப (ிண்டி p _டால்) ப (ின f ஒ) ப (ினியன p @@ -2764,13 +2863,14 @@ _கன்னா) ப (ின்னா p @) ப (ின்னால்_ p _) ப (ிப்ரவரி f _லெஸ்) ப (ியன b + _கா) ப (ியோ f _வரப்) பி (ரL04ாத p _ஞான) பிரக (ா prVk _ஞானப்) பிரக (ா prVk ஆ) பி (ரகாம b பிரக (ாஷ prVk மதப்) பிரச (ார prVtS - பி (ரத p + பி (ரதர b ராஜப்) பி (ரதிநிதி p அரசுப்) பி (ரதிநிதி p _தர்மப்) பி (ரப p @@ -2802,10 +2902,12 @@ L03ந்தப்) பி (ராய p ஆண்) ப (ிள்ளை p பெண்) ப (ிள்ளை p விக்கி) ப (ீடியா p + இம்) ப (ீரியல p _திம்) ப (ு p _அன்) ப (ுட b _மார்) ப (ுட b _) புத்தம்ப (ுத puttVmp + ராஜ) ப (ுத்திர p வாயு) ப (ுத்திர p அக்னி) ப (ுத்திர p பாடலி) ப (ுத்திர p @@ -2817,6 +2919,7 @@ L03ந்தப்) பி (ராய p இன்) ப (ுற b _துன்) ப (ுற b ப (ுறK p + _பா) ப (ுலர p _) பு (ளோரன்ஸ f மண்) ப (ுழு p ப (ூச்சி p @@ -2894,6 +2997,7 @@ _கோலாலம்) ப (ூர p ப (ோன்ற+ p // ?? end-of-word + suffix ?? ப (ோயிரு p ப (ோய் p + எம்) ப (ோரியல p ஏர்) போர்ட po:rt.V# கலி) ப (ோர்னிய f ப (ோல_ p @@ -2929,6 +3033,7 @@ _மைக்ரோசா) ப் (ட f ஆ) ப்ப (ரிக்க fV தென்னா) ப்ப (ரிக்க fV உயிர்) ப்ப (லி bbV + L03) ப்ப (ஸ bbV அடி) ப்ப (ாக bb இறுதி) ப்ப (ாக bb துர்) ப்ப (ாக்கிய bb @@ -2959,12 +3064,14 @@ _ஒL10ி) ப்பி (ரவாக pp ஆ) ப்பி (ரிக்க f தென்னா) ப்பி (ரிக்க fV _ஹ) ப்ப (ிள bb + _க்ள) ப்ப (ுகள bb உ) ப்ப (ுசத்த bb உ) ப்ப (ுசம bb _சந்தேக) ப்ப (ுத்தி bb இ) ப்ப (ூமி bb _ல) ப்ப (ை bb துர்) ப்ப (ோதனை bb + _கே) ப் (மாரி p கம்) ப்யூட (ர pjU:t.V _சு) ப் (ரீம p _) ப் (ரீயா f @@ -3131,7 +3238,7 @@ _சந்தேக) ப்ப (ுத்தி bb இ i இ (யேச இ (ரகசிய // silent - இ (ரகுமான + இ (ரகு இ (ரகுராம இ (ரசனை இ (ரசாயன @@ -3147,6 +3254,8 @@ _சந்தேக) ப்ப (ுத்தி bb இ (ரம்மிய இ (ரயில இ (ரவீந்திர + இ (ரவைகள + இ (ரவையை இ (ராக இ (ராச இ (ராஜ @@ -3261,9 +3370,9 @@ _சந்தேக) ப்ப (ுத்தி bb ௗ : // aU length mark .group 0xe0a4 // devanagari - \340\244 _^_HI // switch to hindi voice + 0xe0a4 _^_HI // switch to hindi voice .group 0xe0a5 // devanagari - \340\245 _^_HI + 0xe0a5 _^_HI .group ் // virama diff --git a/dictsource/te_rules b/dictsource/te_rules index e0c5c825..4b18cdb5 100644 --- a/dictsource/te_rules +++ b/dictsource/te_rules @@ -266,9 +266,9 @@ .group 0xe0a4 // devanagari - \340\244 _^_HI // switch to hindi voice for devanagari characters + 0xe0a4 _^_HI // switch to hindi voice for devanagari characters .group 0xe0a5 // devanagari - \340\245 _^_HI + 0xe0a5 _^_HI .group diff --git a/phsource/compile_report b/phsource/compile_report index e044fd75..caf2575b 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -77 phoneme tables +79 phoneme tables new total base 107 107 consonants 10 116 @@ -77,6 +77,8 @@ consonants 10 116 tn 27 119 mt 32 127 bo 10 152 + kk 20 117 + fa 9 110 Data file Used by b/b [b] base @@ -400,8 +402,8 @@ l/l_ [l] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [h¡ý] base - [l#] base +l/l@ [l#] base + [”¦] base [l] fr [l/2] fr [K] nso @@ -434,16 +436,16 @@ l/L2_oL [l/2] base l/L2_uL [l/2] base l/l_3 [l/] de l/l_4 [ll] sq -l/la [h¡ý] base - [l#] base +l/la [l#] base + [”¦] base [l] fr [l/2] fr [K] nso [K] tn l/l_a [l/3] base [l/] fr -l/le [h¡ý] base - [l#] base +l/le [l#] base + [”¦] base [l] fr [l/2] fr [K] nso @@ -454,8 +456,8 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [h¡ý] base - [l#] base +l/li [l#] base + [”¦] base [l] fr [l/2] fr [l] zh @@ -468,8 +470,8 @@ ll/ll [L] bg ll/_ll [L] bg l/l_long [l] base [l] fr -l/lo [h¡ý] base - [l#] base +l/lo [l#] base + [”¦] base [l/2] fr [K] nso [K] tn @@ -478,8 +480,8 @@ l/l_o [l/3] base l^/l_rfx [l.] base [l] ru [l^] ru -l/lu [h¡ý] base - [l#] base +l/lu [l#] base + [”¦] base [l] fr [l/2] fr [K] nso @@ -786,6 +788,7 @@ ufric/x [x] base [kh] vi ufric/x2 [x2] af [x] ku + [X] kk ufric/x_hr [x] base [x] hr [x] ru @@ -1017,6 +1020,7 @@ vdiph2/ii@ [i@] en [i@3] en [i@] en-us [ja] ru +vdiph2/ii@_2 [e] kk vdiph2/ii@_3 [i@] vi vdiph2/iioo [io] zh vdiph2/iu [iU] base2 @@ -1049,6 +1053,7 @@ vdiph2/uw [u:] en-us vdiph2/uw_2 [u:] en vdiph2/uw_3 [yU] ro vdiph2/uw_4 [u:] en-n +vdiph2/uw_6 [u#] kk vdiph2/y@ [y@] zh vdiph2/y#@ [Y@] af vdiph2/ye [yE] sq @@ -1147,6 +1152,7 @@ vdiph/eei_2 [eI] eo [ei] lv [eI] id [ei] mt + [eI] fa vdiph/eei_3 [eI] sk [eI] ku vdiph/eeu [EU] pt @@ -1229,6 +1235,7 @@ vdiph/ou [ou] fi [ou] mt vdiph/ou_2 [oU] sk [oU] ro + [oU] fa vdiph/ou_3 [oU] is [oU:] is vdiph/ou_4 [o:] nl @@ -1409,6 +1416,7 @@ vowel/& [a] en-rp [&] sv [&#] da [&] az + [a] fa vowel/0 [0] en [O] hi [O] pt @@ -1422,6 +1430,7 @@ vowel/0_3 [O:] en-us [O] en-sc [0] en-rp [A] hu + [A] fa vowel/@_2 [@] vi [@:] vi [@] sq @@ -1450,6 +1459,7 @@ vowel/@_6 [@] en [W] fr [W2] fr vowel/8 [o-] zh + [8] kk vowel/8_2 [U] en-us [8] sv vowel/8_3 [eo] zhy @@ -1554,6 +1564,7 @@ vowel/a_4 [a] es [a] vi vowel/a#_4 [a:] nl [a] bg + [a/] it [a] tr vowel/a_5 [a:] ta [a:] ml @@ -1563,6 +1574,7 @@ vowel/a_5 [a:] ta [a] sw [a:] te [a] tn + [a] kk vowel/a_6 [a] ca [a:] vi [a] am @@ -1611,6 +1623,7 @@ vowel/aa_9 [a] fi [a] pa [a] ak [a] mt + [A] kk vowel/@_bck [@] hi [@] bg [@] zh @@ -1693,6 +1706,7 @@ vowel/ee_2 [E] cy [E#] ku [&] da [E] pa + [&] kk vowel/ee#_2 [E1] et [E-] sv [E#] sq @@ -1766,9 +1780,11 @@ vowel/e_mid2 [E] af [e:] si [e] mt [e] bo + [e] fa vowel/@_fnt [@] en-wi [@2] en-wi [@2] hr + [E] kk vowel/@_fr [3] en-n vowel/@_hgh [@] fr [@-] fr @@ -1807,6 +1823,7 @@ vowel/i [i] base [i:] te [i:] si [i] bo + [i] fa vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de @@ -1874,6 +1891,7 @@ vowel/ii# [Y] cy [Y] ru [I] ku [i] sq + [I] kk vowel/ii_2 [I] en [i] zh [I] mt @@ -1912,6 +1930,7 @@ vowel/ii_6 [I] en-wm [i] wo vowel/ii_7 [i] en [i] sq +vowel/ii_8 [i] kk vowel/ii_final [i] en-us [i] en-rp vowel/@_low [@] en-rp @@ -1977,6 +1996,7 @@ vowel/o_2 [o:] cy vowel/o-_2 [V] en-n [V] en-wm vowel/o_3 [oU] en-sc + [o] kk vowel/o-_3 [U] en-rp vowel/o-_4 [o] ro [o] am @@ -2002,6 +2022,7 @@ vowel/o_mid [U@] en-rp [o] az [o] dv [o:] dv + [o] fa vowel/o_mid2 [O] fr [O] ht vowel/oo [o] base @@ -2172,7 +2193,9 @@ vowel/u_bck2 [u] et [u:] la [u] es [u] ht + [u] fa vowel/u_bck3 [u:] et + [u] kk vowel/uu [U] en [U] en-n [U] en-wm @@ -2182,6 +2205,7 @@ vowel/uu_2 [U] base2 [U] de [U] ca [U] tr + [U] kk vowel/uu_3 [u] af [y] zh vowel/uu_4 [U] fi @@ -2254,6 +2278,7 @@ vowel/y_3 [y] af vowel/y#_3 [W] is [W:] is vowel/y_4 [y:] no +vowel/y#_4 [Y] kk vowel/y_5 [y:] sv [y] tr [y] ku diff --git a/phsource/ph_french b/phsource/ph_french index 46affef7..bd65828e 100644 --- a/phsource/ph_french +++ b/phsource/ph_french @@ -288,7 +288,7 @@ phoneme a length 170 ENDIF - FMT(vowel/a_7, 80) + FMT(vowel/a_7) endphoneme @@ -297,7 +297,7 @@ phoneme a- unstressed length 130 - FMT(vowel/a_7, 80) + FMT(vowel/a_7, 85) endphoneme @@ -984,7 +984,7 @@ endphoneme // translate from English to French phonemes equivalents en -remove_stress +//remove_stress 0 O 3 W r 3: W : r diff --git a/phsource/ph_italian b/phsource/ph_italian index 7a4c8def..b3564b7f 100644 --- a/phsource/ph_italian +++ b/phsource/ph_italian @@ -20,6 +20,9 @@ endphoneme phoneme a/ vowel starttype #@ endtype #@ length 180 + IF thisPh(isWordEnd) THEN + FMT(vowel/a#_4) + ENDIF FMT(vowel/a_5) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 358136f6..deea225e 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1884,3 +1884,10 @@ include ph_maltese phonemetable bo hi include ph_tibetan + +phonemetable kk base +include ph_kazakh + +phonemetable fa base +include ph_farsi + diff --git a/phsource/vdiph/ou_2 b/phsource/vdiph/ou_2 index 36208f130f4fcc558175058b1bcd8eab01807534..125eecc2cb881c09a6ef1c75c5d0af24e8dca16b 100644 GIT binary patch literal 1988 zcmb_dOKTHR7(Fw|)Jc=3N!rFHnY3w})~L1B78F`AgQ6%_un(b%5AXrCv=m?9LNp7h zQtZOoAK*eo#n(a*L}YZ`g)0%QnxEjpg}U;5H>sJa8?nyi&i(G0d+!YAeCM0teLJ>~ z3=j7B0Zg4g+GF4lBll$+U+mJ{_CG5>s9*y`c9l`!9uSz<=k)_bqyt|yr@_)K{UBrM zz!jg}I7;L?W9h*AfD?SI88l%vqKKg$jYz@byam13%Qc%ZjzP4uwGy?E zMF+ZlRgG(`+fk`OXGDt4IF( z4d z$ht*7Vv3and1}TQ^k5HHZox_HM~;Z7Wnn!!$zB8r&J*M_1OuzsOa#ez4d+3&5ULO$ zTE$4PD0OaEC$vycQB+QAq7n(EP!jncb2}ZyuWfuPr~tNqu@q2;B~1Kqw2T4|0CUdc zhoWXT#9e;yVaDgghdh3G5x_D(+zS>$lG#fR5kC|>e&{v_QjXu7{VVZ99;2AT8(bpC z%*`R-60Np=g1VJfnk+H_(!PE&^o3{jP=VlPb{)~cM3a7~EaPqwSsOzII(`(^H9 zEIJ4-XGX}jcq+?N+j&}=ckx`DC)872(P6RooZ{CuJ{C(v+y1X*#w*xfA`@j4aDb{A z{hd~+OBXamirSb~sY@B36R`BRuDbNlTwZe)f(6C#k`BOZ7#<{N7ANZ!R!#3)0 zhJLt+G2F!y*4hnZI88pHtR9lLDYi7(?xhZ6%)QgBWBueVNiI{=Y$G|W=gI(c+9JzQ zRe!__K~;fb$^j-7Sj8G*C}qVzt=!wjCSz8OZOVBGo@%k@f8HG4s2H}54VF$|Frb)iC992OG|Fs`QH@4s>jv~uhjE<6Vg5(f(I*z4v@@r(%w(zUSt?RT r_C*D$Kk`QqHDl`kP|bOW&EzQFNK%0uebA|*BzLFz*0`!oEyR8SpqBeC delta 607 zcmX@YKaGbYIKb68B-k}@B8OA`3Wfz-Q<$bOF#y2_#s{J@Ofq103v+@*1eAS)^9J7o z#s`cbHA}c>@Iu)79KC!G*kIxc(i*HVc7>c86O65)3}IU_L@^{WY-i|Y$YfZ{u#&-n z!H_|LL2j}<;^p~H|TK?a>L{aOsDEsF)(mWhI;q`qmQT<*pti*UCeL9 zf}kGW#mNKr@CxoNJO~fZfO=S;!$}Sb1*3$(1I7$6TY>oorwr2ta0IO3Km_g??hSCedieyPYz>YF zG6v9q*5|sPS_ifugK-1UV=&7$aJDhFfyHAu7Qkcg4EGCWn8$kg S6yWR!G7<1t#cG)r`z!!^P>Wjt diff --git a/phsource/vowel/a_7 b/phsource/vowel/a_7 index 750d678848ca37873a59a75c9e3f87272b7675f4..762231250cb2888a47a404d37a6ea5786be4b37e 100755 GIT binary patch literal 6755 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 literal 1628 zcmd^0w85Qd*5H=j1KX={uUYSY>@)mm%%rK0UMv9&4@YpS3Kwk`zGMK@wMVsImf z(3QodAnx5M;>v{^{ReKkR_IDZiV)v(a?`{gkd7)Q%!&J zW&9i3J-5iy7|BiFrqA(#QCN)=Z$)ag-w8L;is-*GI0pHt6GmaJ7yrLVejwL^OqnFR z3Jqt+PH_>J1&Ul_gD*T{op*d-RoHP#TwqQzE4{*9eaTtoIiW8PBAhn5z^N8fM zQ89gh{g%Vs;;}RS91$|4 z?389qrUm)y28$^(>WPUsUcMvmF9>AC AwEzGB diff --git a/phsource/vowel/o_3 b/phsource/vowel/o_3 index 4f704a98b4c84656e530d3f2d145c3d906df7a53..8091c8726907610df9ec1176a085a881221efb96 100644 GIT binary patch literal 11303 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 literal 7275 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 T%vXlGa};^f9^^Y$$V2j9n)H&6 diff --git a/phsource/vowel/o_mid2 b/phsource/vowel/o_mid2 index 077cb61ac4cdcb55ef7fbb6c00a5fa3ae5cfa8ff..474fe651bccf1d5b881da3c4b03a37524b7ccad0 100755 GIT binary patch literal 6755 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 Pn2l#+*EJtGqNw_N{9}44%EX9qhXi^ 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 '0') && (c <= '9')) + return(c - '0'); + if((c >= 'a') && (c <= 'f')) + return(c - 'a' + 10); + if((c >= 'A') && (c <= 'F')) + return(c - 'A' + 10); + return(-1); +} + + static void copy_rule_string(char *string, int &state) {//=================================================== // state 0: conditional, 1=pre, 2=match, 3=post, 4=phonemes @@ -889,9 +901,11 @@ static void copy_rule_string(char *string, int &state) int ix; int len; char c; + int c2, c3; int sxflags; int value; int literal; + int hexdigit_input = 0; MNEM_TAB *mr; if(string[0] == 0) return; @@ -911,18 +925,38 @@ static void copy_rule_string(char *string, int &state) { literal = 0; c = *p++; + if((c == '0') && (p[0] == 'x') && (isHexDigit(p[1]) >= 0) && (isHexDigit(p[2]) >= 0)) + { + hexdigit_input = 1; + c = p[1]; + p+= 2; + } if(c == '\\') { c = *p++; // treat next character literally +//#ifdef deleted if((c >= '0') && (c <= '3') && (p[0] >= '0') && (p[0] <= '7') && (p[1] >= '0') && (p[1] <= '7')) { // character code given by 3 digit octal value; c = (c-'0')*64 + (p[0]-'0')*8 + (p[1]-'0'); p += 2; } +//endif literal = 1; } - + if(hexdigit_input) + { + if(((c2 = isHexDigit(c)) >= 0) && ((c3 = isHexDigit(p[0])) >= 0)) + { + c = c2 * 16 + c3; + literal = 1; + p++; + } + else + { + hexdigit_input = 0; + } + } if((state==1) || (state==3)) { // replace special characters (note: 'E' is reserved for a replaced silent 'e') diff --git a/src/espeak.cpp b/src/espeak.cpp index b9add838..aa49195d 100644 --- a/src/espeak.cpp +++ b/src/espeak.cpp @@ -313,6 +313,17 @@ static int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) } +static void PrintVersion() +{//======================= + const char *version; + const char *path_data; + espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 0, NULL, espeakINITIALIZE_DONT_EXIT); + version = espeak_Info(&path_data); + printf("eSpeak text-to-speech: %s Data at: %s\n", version, path_data); +} + + + #ifdef NEED_GETOPT struct option { char *name; @@ -352,6 +363,7 @@ int main (int argc, char **argv) {"phonout", required_argument, 0, 0x108}, {"pho", no_argument, 0, 0x109}, {"ipa", no_argument, 0, 0x10a}, + {"version", no_argument, 0, 0x10b}, {0, 0, 0, 0} }; @@ -473,15 +485,10 @@ int main (int argc, char **argv) break; case 'h': - { - const char *version; - const char *path_data; - espeak_Initialize(AUDIO_OUTPUT_SYNCHRONOUS, 0, data_path, espeakINITIALIZE_DONT_EXIT); - version = espeak_Info(&path_data); - printf("\n"); - printf("eSpeak text-to-speech: %s Data at: %s\n%s", version, path_data, help_text); - exit(0); - } + printf("\n"); + PrintVersion(); + printf("%s", help_text); + exit(0); break; case 'k': @@ -599,6 +606,10 @@ int main (int argc, char **argv) option_phonemes = 3; break; + case 0x10b: // -version + PrintVersion(); + exit(0); + default: exit(0); } diff --git a/src/fifo.cpp b/src/fifo.cpp index 39e314d6..bf9cc83f 100644 --- a/src/fifo.cpp +++ b/src/fifo.cpp @@ -60,7 +60,7 @@ static void* say_thread(void*); static espeak_ERROR push(t_espeak_command* the_command); static t_espeak_command* pop(); -static void init(); +static void init(int process_parameters); static int node_counter=0; enum {MAX_NODE_COUNTER=400, INACTIVITY_TIMEOUT=50, // in ms, check that the stream is inactive @@ -75,7 +75,7 @@ void fifo_init() // security pthread_mutex_init( &my_mutex, (const pthread_mutexattr_t *)NULL); - init(); + init(0); assert(-1 != sem_init(&my_sem_start_is_required, 0, 0)); assert(-1 != sem_init(&my_sem_stop_is_acknowledged, 0, 0)); @@ -457,7 +457,7 @@ static void* say_thread(void*) { // no mutex required since the stop command is synchronous // and waiting for my_sem_stop_is_acknowledged - init(); + init(1); // purge start semaphore SHOW_TIME("say_thread > purge my_sem_start_is_required\n"); @@ -569,14 +569,24 @@ static t_espeak_command* pop() } -static void init() +static void init(int process_parameters) { - ENTER("fifo > init"); - while (delete_espeak_command( pop() )) - {} - node_counter = 0; + // Changed by Tyler Spivey 30.Nov.2011 + t_espeak_command *c = NULL; + ENTER("fifo > init"); + c = pop(); + while (c != NULL) { + if (process_parameters && (c->type == ET_PARAMETER || c->type == ET_VOICE_NAME || c->type == ET_VOICE_SPEC)) + { + process_espeak_command(c); + } + delete_espeak_command(c); + c = pop(); + } + node_counter = 0; } + //> //= 7) { // tonic syllable, include a constant component so it doesn't decrease directly with speed - length_mod += 20; + length_mod += tr->langopts.lengthen_tonic; if(emphasized) - length_mod += 10; + length_mod += (tr->langopts.lengthen_tonic/2); } else if(emphasized) { - length_mod += 20; + length_mod += tr->langopts.lengthen_tonic; } if((len = tr->stress_lengths[stress]) == 0) @@ -739,7 +739,8 @@ if(stress <= 1) } } - if(end_of_clause == 2) + + if((end_of_clause == 2) && !(tr->langopts.stress_flags & S_NO_EOC_LENGTHEN)) { // this is the last syllable in the clause, lengthen it - more for short vowels len = (p->ph->std_length * 2); diff --git a/src/speak.cpp b/src/speak.cpp index e74208f4..deccfbf7 100644 --- a/src/speak.cpp +++ b/src/speak.cpp @@ -444,6 +444,8 @@ static void StopSpeak(int unused) signal(SIGINT,StopSpeak); } // end of StopSpeak() + + #ifdef NEED_GETOPT struct option { char *name; @@ -483,6 +485,7 @@ int main (int argc, char **argv) {"phonout", required_argument, 0, 0x108}, {"pho", no_argument, 0, 0x109}, {"ipa", no_argument, 0, 0x10a}, + {"version", no_argument, 0, 0x10b}, {0, 0, 0, 0} }; @@ -601,7 +604,6 @@ int main (int argc, char **argv) init_path(argv[0],data_path); printf("\nspeak text-to-speech: %s Data at: %s\n%s",version_string,path_home,help_text); exit(0); - break; case 'k': option_capitals = atoi(optarg2); @@ -722,6 +724,11 @@ int main (int argc, char **argv) option_phonemes = 3; break; + case 0x10b: // --version + init_path(argv[0],data_path); + printf("speak text-to-speech: %s Data at: %s\n",version_string,path_home); + exit(0); + default: exit(0); } diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 5200243b..fe2148c0 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.01 22.Nov.11"; +const char *version_string = "1.46.10 21.Dec.11"; const int version_phdata = 0x014600; int option_device_number = -1; diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 8216f38a..81d8665d 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -141,7 +141,7 @@ static Translator* NewTranslator(void) memset(tr->letter_bits,0,sizeof(tr->letter_bits)); memset(tr->letter_groups,0,sizeof(tr->letter_groups)); - // 0-5 sets of characters matched by A B C H F G Y in pronunciation rules + // 0-6 sets of characters matched by A B C H F G Y in pronunciation rules // these may be set differently for different languages SetLetterBits(tr,0,"aeiou"); // A vowels, except y SetLetterBits(tr,1,"bcdfgjklmnpqstvxz"); // B hard consonants, excluding h,r,w @@ -164,6 +164,7 @@ static Translator* NewTranslator(void) } memset(&(tr->langopts),0,sizeof(tr->langopts)); tr->langopts.max_lengthmod = 500; + tr->langopts.lengthen_tonic = 20; tr->langopts.stress_rule = STRESSPOSN_2R; tr->langopts.unstressed_wd1 = 1; @@ -274,11 +275,13 @@ static const unsigned int replace_cyrillic_latin[] = 0x45c,0x107, 0}; // ѓ ѕ ќ + +static const unsigned char ru_vowels[] = {0x10,0x15,0x31,0x18,0x1e,0x23,0x2b,0x2d,0x2e,0x2f, 0xb9,0xc9,0x91,0x8f,0x36,0}; //also kazakh +static const unsigned char ru_consonants[] = {0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2c, 0x73,0x7b,0x83,0x9b,0}; + static void SetCyrillicLetters(Translator *tr) {//=========================================== // character codes offset by 0x420 - static const char ru_vowels[] = {0x10,0x15,0x31,0x18,0x1e,0x23,0x2b,0x2d,0x2e,0x2f,0}; - static const char ru_consonants[] = {0x11,0x12,0x13,0x14,0x16,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2c,0}; static const char ru_soft[] = {0x2c,0x19,0x27,0x29,0}; // letter group B [k ts; s;] static const char ru_hard[] = {0x2a,0x16,0x26,0x28,0}; // letter group H [S Z ts] static const char ru_nothard[] = {0x11,0x12,0x13,0x14,0x17,0x19,0x1a,0x1b,0x1c,0x1d,0x1f,0x20,0x21,0x22,0x24,0x25,0x27,0x29,0x2c,0}; @@ -291,14 +294,14 @@ static void SetCyrillicLetters(Translator *tr) tr->letter_bits_offset = OFFSET_CYRILLIC; memset(tr->letter_bits,0,sizeof(tr->letter_bits)); - SetLetterBits(tr,LETTERGP_A,ru_vowels); + SetLetterBits(tr,LETTERGP_A,(char *)ru_vowels); SetLetterBits(tr,1,ru_soft); - SetLetterBits(tr,2,ru_consonants); + SetLetterBits(tr,2,(char *)ru_consonants); SetLetterBits(tr,3,ru_hard); SetLetterBits(tr,4,ru_nothard); SetLetterBits(tr,5,ru_voiced); SetLetterBits(tr,6,ru_ivowels); - SetLetterBits(tr,LETTERGP_VOWEL2,ru_vowels); + SetLetterBits(tr,LETTERGP_VOWEL2,(char *)ru_vowels); } // end of SetCyrillicLetters @@ -893,6 +896,30 @@ SetLengthMods(tr,3); // all equal } break; + case L('k','k'): // Kazakh + { + static const unsigned char stress_amps_tr[8] = {18,16, 20,21, 20,21, 21,20 }; + static const short stress_lengths_tr[8] = {190,180, 230,230, 0,0, 250,250}; + + tr->letter_bits_offset = OFFSET_CYRILLIC; + memset(tr->letter_bits,0,sizeof(tr->letter_bits)); + SetLetterBits(tr,LETTERGP_A,(char *)ru_vowels); + SetLetterBits(tr,LETTERGP_C,(char *)ru_consonants); + SetLetterBits(tr,LETTERGP_VOWEL2,(char *)ru_vowels); + + SetupTranslator(tr,stress_lengths_tr,stress_amps_tr); + + tr->langopts.stress_rule = 7; // stress on the last syllable, before any explicitly unstressed syllable + tr->langopts.stress_flags = S_NO_AUTO_2 + S_NO_EOC_LENGTHEN; //no automatic secondary stress, don't lengthen at end-of-clause + tr->langopts.lengthen_tonic = 0; + tr->langopts.param[LOPT_SUFFIX] = 1; + + tr->langopts.numbers = NUM_OMIT_1_HUNDRED | NUM_DFRACTION_6 ; + tr->langopts.max_initial_consonants = 2; +SetLengthMods(tr,3); // all equal + } + break; + case L('k','o'): // Korean, TEST { static const char ko_ivowels[] = {0x63,0x64,0x67,0x68,0x6d,0x72,0x74,0x75,0}; // y and i vowels diff --git a/src/translate.cpp b/src/translate.cpp index 731a9e5a..3ac2de4b 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -334,16 +334,16 @@ static unsigned char length_mods_en0[100] = { static unsigned char length_mods_equal[100] = { /* a , t s n d z r N <- next */ - 110,110,110,110,110,110,110,110,110, 110, /* a <- next2 */ - 110,110,110,110,110,110,110,110,110, 110, /* , */ - 110,110,110,110,110,110,110,110,110, 110, /* t */ - 110,110,110,110,110,110,110,110,110, 110, /* s */ - 110,110,110,110,110,110,110,110,110, 110, /* n */ - 110,110,110,110,110,110,110,110,110, 110, /* d */ - 110,110,110,110,110,110,110,110,110, 110, /* z */ - 110,110,110,110,110,110,110,110,110, 110, /* r */ - 110,110,110,110,110,110,110,110,110, 110, /* N */ - 110,110,110,110,110,110,110,110,110, 110 }; // SPARE + 110,120,100,110,110,110,110,110,110, 110, /* a <- next2 */ + 110,120,100,110,110,110,110,110,110, 110, /* , */ + 110,120,100,110,100,110,110,110,100, 110, /* t */ + 110,120,100,110,110,110,110,110,110, 110, /* s */ + 110,120,100,110,110,110,110,110,110, 110, /* n */ + 110,120,100,110,110,110,110,110,110, 110, /* d */ + 110,120,100,110,110,110,110,110,110, 110, /* z */ + 110,120,100,110,110,110,110,110,110, 110, /* r */ + 110,120,100,110,110,110,110,110,110, 110, /* N */ + 110,120,100,110,110,110,110,110,110, 110 }; // SPARE static unsigned char *length_mod_tabs[6] = { diff --git a/src/translate.h b/src/translate.h index 49d8f013..0f0a9826 100644 --- a/src/translate.h +++ b/src/translate.h @@ -355,6 +355,7 @@ typedef struct { #define S_INITIAL_2 0x2000 #define S_NO_AUTO_DIM 0x10000 #define S_HYPEN_UNSTRESS 0x100000 +#define S_NO_EOC_LENGTHEN 0x200000 // bit0=don't stress monosyllables, except at end of clause // bit1=don't set diminished stress, // bit2=mark unstressed final syllables as diminished @@ -373,6 +374,7 @@ typedef struct { // bit18= don't lengthen short vowels more than long vowels at end-of-clause // bit19=stress on final syllable if it has a long vowel, but previous syllable has a short vowel // bit20= hyphenated words, 2nd part is unstressed +// bit21= don't lengthen vowels at end-of-clause int stress_flags; int unstressed_wd1; // stress for $u word of 1 syllable @@ -398,6 +400,7 @@ typedef struct { #define NUM_DFRACTION_3 0x6000 #define NUM_DFRACTION_4 0x8000 #define NUM_DFRACTION_5 0xa000 +#define NUM_DFRACTION_6 0xc000 #define NUM_ORDINAL_DOT 0x10000 #define NUM_NOPAUSE 0x20000 #define NUM_AND_HUNDRED 0x40000 @@ -476,7 +479,8 @@ typedef struct { const unsigned int *replace_chars; // characters to be substitutes const char *ascii_language; // switch to this language for Latin characters int max_lengthmod; - int suffix_add_e; // replace a suffix (which has the SUFX_E flag) with this character + int lengthen_tonic; // lengthen the tonic syllable + int suffix_add_e; // replace a suffix (which has the SUFX_E flag) with this character } LANGUAGE_OPTIONS; diff --git a/src/wave_pulse.cpp b/src/wave_pulse.cpp index 64e15376..a5db6389 100644 --- a/src/wave_pulse.cpp +++ b/src/wave_pulse.cpp @@ -745,19 +745,32 @@ size_t wave_write(void* theHandler, char* theMono16BitsWaveBuffer, size_t theSiz int wave_close(void* theHandler) { SHOW_TIME("wave_close > ENTER"); + static int aStopStreamCount = 0; - int a_status = pthread_mutex_lock(&pulse_mutex); - if (a_status) { - SHOW("Error: pulse_mutex lock=%d (%s)\n", a_status, __FUNCTION__); - return PULSE_ERROR; - } - - drain(); + // Avoid race condition by making sure this function only + // gets called once at a time + aStopStreamCount++; + if (aStopStreamCount != 1) + { + SHOW_TIME("wave_close > LEAVE (stopStreamCount)"); + return 0; + } - pthread_mutex_unlock(&pulse_mutex); - SHOW_TIME("wave_close (ret)"); + int a_status = pthread_mutex_lock(&pulse_mutex); + if (a_status) + { + SHOW("Error: pulse_mutex lock=%d (%s)\n", a_status, __FUNCTION__); + aStopStreamCount = 0; // last action + return PULSE_ERROR; + } - return PULSE_OK; + drain(); + + pthread_mutex_unlock(&pulse_mutex); + SHOW_TIME("wave_close (ret)"); + + aStopStreamCount = 0; // last action + return PULSE_OK; } //>