From eb7b132e9af5ee6fedb185ad775f6004556c2c95 Mon Sep 17 00:00:00 2001 From: jonsd Date: Sat, 14 Aug 2010 09:07:11 +0000 Subject: [PATCH] [1.44.02] Fix: crash with very long numbers. Very long nubers ( > 14 digits) now spoken as individual digits. Fix: bracket was interfering with recognizing last-word in a clause. Lang=el fix: all words were spoken as individual letters. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@252 d46cf337-b52f-0410-862d-fd96e6ae7743 --- dictsource/af_list | 15 +- dictsource/af_rules | 10 +- dictsource/da_list | 138 ++++-- dictsource/da_rules | 459 +++++++++++++++---- dictsource/dict_phonemes | 41 +- dictsource/en_list | 23 +- dictsource/en_rules | 4 +- dictsource/fr_rules | 6 +- dictsource/hu_list | 139 +++++- dictsource/hu_rules | 9 + dictsource/nl_list | 215 ++++++++- dictsource/nl_rules | 17 +- dictsource/ta_list | 1 - dictsource/ta_rules | 24 +- docs/add_language.html | 2 +- docs/commands.html | 22 +- docs/dictionary.html | 26 +- docs/docindex.html | 4 +- docs/intonation.html | 101 ++++ docs/mbrola.html | 29 +- docs/phontab.html | 12 +- docs/speak_lib.h | 38 +- docs/ssml.html | 5 + phsource/compile_report | 49 +- phsource/ph_german | 44 +- phsource/ph_greek | 10 + phsource/ph_polish | 15 +- phsource/ph_tamil | 6 +- phsource/phonemes | 5 + platforms/big_endian/espeak-phoneme-data.c | 38 +- platforms/windows/make_espeak.iss | 24 +- platforms/windows/make_espeakedit.iss | 5 +- platforms/windows/windows_sapi/ttsengobj.cpp | 5 +- platforms/windows/windows_sapi/version.rc2 | 10 +- src/compiledata.cpp | 9 +- src/dictionary.cpp | 5 +- src/espeakedit.cpp | 2 +- src/numbers.cpp | 2 +- src/readclause.cpp | 3 +- src/speak_lib.h | 3 +- src/synth_mbrola.cpp | 4 +- src/synthdata.cpp | 4 +- src/synthesize.cpp | 7 +- src/tr_languages.cpp | 20 +- src/translate.cpp | 38 +- src/translate.h | 26 +- src/vowelchart.cpp | 2 +- 47 files changed, 1317 insertions(+), 359 deletions(-) create mode 100644 docs/intonation.html diff --git a/dictsource/af_list b/dictsource/af_list index ac11d349..e4caffa3 100755 --- a/dictsource/af_list +++ b/dictsource/af_list @@ -222,6 +222,7 @@ antwerpen antv&rp@n avignon _^_FR babilon babilOn babilonië babil'o@ni;@ +bainskloof beInsklo@f bangladesj baNglad'ES barcelona bars@l'o@na barkly _^_EN @@ -314,6 +315,7 @@ mpumalanga mpu:mal'aNga montagu mOnt@ky moreletapark mOr@l,Etap'ark moorreesburg mur'e@sbWrx2 +mouillepunt mulipWnt (thaba nchu) tab'A:||ntSu europa Y@r'o@pa nigel _^_EN @@ -363,6 +365,7 @@ wimbledon _^_EN wolseley wulsli uganda ug'anda uruguay urugwaI +wakloof vA:klo@f zimbabwe zI:mb'ab_wE zulu zulu // Kwazulu-Natal @@ -409,6 +412,7 @@ beyers beI@rs blignault blIx2n@Ut blomerus blum'e@rWs blum blum +borodin bOrud'in botha bo@ta bouwer b@U@r braham brA:m @@ -477,6 +481,7 @@ duncan daNk@-n (du toit) d@||toI dustin _^_EN duvenage dyv@nA:x2@ +dvorak d@-v'O:Zak einstein aInstaI:n eksteen $1 elana il'A:na @@ -519,6 +524,7 @@ gordon _^_EN grange x2rA:nsi gregory _^_EN greta gre@ta +grieg gri:g grové x2ruv'e@ gulliver _^_EN gustav gustaf @@ -548,6 +554,7 @@ james _^_EN jane _^_EN Jean ZA~n $capital jesebel je@s@b&l +jessica _^_EN jimmy _^_EN joachim juw'A:x2@m joan _^_EN @@ -592,6 +599,7 @@ lukas lukas lulu lulu mabalêl mabal'&l mabel _^_EN +macgill m@gjil mackintosh _^_EN madelene mad@l'e@n mbeki mbE:ki @@ -639,7 +647,6 @@ mouton mut'On mozart mo@tsart myburgh meIbWrx2 naomi na_'o@mi -napoleon nap'o@liOn natasha n%at'aSa naudé nOd'e@ nefertiti nEf@rt'iti @@ -675,6 +682,7 @@ renée r@neI retha re@ta retief r@tif rhodes _^_EN +richard _^_EN riekert rik@rt robert _^_EN robin _^_EN @@ -1131,6 +1139,7 @@ jupiter jupit@r kafee kaf'e@ kaliefa kal'ifa kameraderie kam@rA:d@r'i +kapittel kap'It@l katswink katsv@nk kaviaar kavi'A:r kennisvaardig $1 @@ -1255,6 +1264,7 @@ onvermoë $1 oorkom $2 oorle o@rl@ oorleef $2 +oorry o@reI oorsee $2 oorsese $2 oorval $2 $verb @@ -1282,6 +1292,7 @@ pirouette p@ru:'Et plaasjaap plA:sjA:p plasenta plas'Enta poinsettia pOIns'Etia +pond po~nt potpourri pOtpur'i primate $2 profetes prOf@t'Es @@ -1408,6 +1419,7 @@ voluit fOl_Yyt voorgee fo@rx2e@ voorkeer $1 voorkom $2 $only +voorlente $1 voormalige fo@rm'A:l@x2@ voornemens fo@rne@m@ns //voorsien $2 @@ -1428,5 +1440,6 @@ weggewens v&x2@v'E:ns welaf v&l_af weleer v&l_'e@r wentaktiek $1 +willens vIl@ns wysgere veIsx2e@r@ diff --git a/dictsource/af_rules b/dictsource/af_rules index ece60904..243da88c 100755 --- a/dictsource/af_rules +++ b/dictsource/af_rules @@ -430,6 +430,7 @@ bonde (C bOnd@ // verbondenheid/bondeldraer/gebondene/saambondelend boos (aardig b%o@s_ // move default stress: boosaardig/-e/-heid _) bor (dA@ b%Or // geborduur/bordeel/bordele + borde (r bOrd@ // fix stress and e sound: borderak/-ke bos (A@ bOs? // bosaap/bosoorlog/bosuil bo (v bo@ // fix o sound: bovlak/-e and similar bowen bo@v@n' // bowenal/bowendien @@ -587,6 +588,7 @@ bene (dy b%e@n@ // fix stress and e sounds: gebenedy/-de _) ben (ga b%EN // fix stress and n/g sounds: Bengaalse/Bengale beni (g be@n@ // fix stress and e sound: (swaar/twee/vier)benig, etc. + _) ben (Cien b%En // fix 1st e sound: bensien/benzien and compounds ber (lyn b%&r // move default stress: Berlyn/-er/-se ber (serk b@r // fix stress and 1st e sound: berserk/-er C) be (rsie b'&: //kombersie etc. @@ -718,6 +720,7 @@ d (d dd d // gladde/midde/kudde/opskudding ddh d // Boeddha/boeddhisme + @) d (raam t // fix d sound: draad-/skilpad-/standaardraam and compounds daad (werk d%A:t // move default stress: daadwerklik/-e daaren (te d%A:r@n // fix stress and e sound: daarenteen/daarenteë daarop (v d%A:r%Op // move default stress: daaropvolgend/-e @@ -727,6 +730,7 @@ dani (gh d'A:n@ // -hoedanigheid/hoedanighede/onderdanigheid @) dant d'ant // dant takes stress: kommandant/pruimedant @) dderd (_ d@rt // ontredderd, se rule: dd d + @) d (einde_ t_ // fix d sound: maand-/noord-/suideinde @) d (eis t_ // fix d sound, insert pause: skuldeiser/grondeise and many compounds dge (_ _^_EN // words ending in -dge are English: Cambridge/Hambidge... dia (C d%i%a // diabeet/diafragma/diagnose/dialek/dialoog/diamant @@ -1756,7 +1760,7 @@ geldi x2&ld@ geld (inC x2<_ // fix d sound, pause: geldinkomste/-insamelaar/-insameling, etc. geld (ing x2&ld // but: ver-/ontgelding and similar - geldjie x2'&lci + geldjie x2&lci // spaargeldjies _) gelykeni (s x2@l'eIk@n@ // gelykenis/se gemmer x2'Em@r ge (ogra x2i //geografie etc. @@ -2947,12 +2951,14 @@ _) na (latig n%A: // move default stress: nalatig/-e/-heid names nA:m@s // fix e sound: afnames/opnames napole (ont n%ap%o@l%i // fix stress and vowel sounds: Napoleonties/-e + napo (leon n%apo@ // fix stress and a sound: Napoleon(magte/-troepe...) _) na (rC na // nartjie/nardus/narsing _) na (rk n%a // narkose/narkotiseer/narkoties/narkotika _) na (skeer n''A: // restore default stress: naskeermiddel/-room _) na (speur n%A: // fix stress and a sound: (on)naspeurbaar/-lik/-e _) na (speur_N nA: // but default stress: naspeur _) na (tC na // many compounds beginning with nat + _) na (trekK nA: // fix stress and a sound: natrek/-ke na (trium nA: // lengthen a sound: natrium and compounds na (trosK nA: // lengthen a sound: natros/-se/-sies na (tuur n%a // natuur and compounds and derivatives @@ -3053,6 +3059,7 @@ o (terap u // psigo-/fisioterapeut _) ob (s %Op // obskuur/obskure/obskuriteit/obsessie/obseen obser (veer %Ops%&r // fix stress, b sound: (ge)observeer(d/-e) + obsti (na %Opst@ // fix stress and i sound: obstinaat/-nate/-naatheid C) o (dium o@ // fix stress and o sound: jodium/podium/rodium and their compounds oe u oe (r u: //long oe sound before r in most cases, but see flg. exceptions: @@ -3603,6 +3610,7 @@ pa (trA p%a // patrollie/patroon/patrys patri (@ p%atr%i // move default stress: patriarg/patriot/-te and derivatives patriar (ga p%atr%i%ar // move default stress: patriargaal/-gale + patro (lle p%atr%u // fix stress and o sound: patrolleer and compounds paté p%ate@ // fix stress and vowel sounds: (lewer)paté, etc. pavil (joe p%av@l // fix stress and v sound: paviljoen and compounds pawil (joe p%av@l // fix stress: pawiljoen and compounds diff --git a/dictsource/da_list b/dictsource/da_list index b13db194..7e62d605 100755 --- a/dictsource/da_list +++ b/dictsource/da_list @@ -1,6 +1,4 @@ -// PB = Peter Bjarkov - pbj1234@hotmail.com - -iv $abbrev +// PB = Peter Bjarkov - pbj1234@hotmail.com // This file is UTF8 encoded // Spelling-to-phoneme words for Danish @@ -92,15 +90,15 @@ __ b'Onsdrai // numbers _0 'nOl _1 'e:n -_2 t'o: -_3 tR'&: +_2 t'o +_3 tR'e _4 f'i:V _5 f'Em _6 s'Egs _7 s'yw _8 'O:d@ -_9 n'i: -_10 t'i: +_9 n'i +_10 t'i _11 'Elv@ _12 t'Vl _13 tR'&#d@-n // PB & changed to &# @@ -119,6 +117,7 @@ _7X h&lfj'&rs // PV a changed to & _8X f'irs _9X h&lf'Ems // PB a changed to & _0C h'un*@:D +_1C ed||h'unR@:D // PB addet 'et hundrede' _0M1 t'u:s@-n _1M1 ed||t'u:s@-n // PB added 'et' to tusind _1M2 'e:n||milij'o:n @@ -130,8 +129,6 @@ _0M4 bilij'o:n3 _0and 3 _dpt _k,Vm&: -_roman d%En - // PB a number followed by dot // ordinals are followed by a dot in Danish @@ -178,7 +175,6 @@ mens $pause // while for fV fordi fVd'i $pause // because - PB: changed stress når nVr $pause // while -som $u+ $pause // who (relative) der d&r $u+ $u // PB changed from [d]A hvor v'Vr // where hvorfor vVf'V // why - firan r deleted @@ -196,7 +192,7 @@ ad &: // PB added 'ad' ad &D $atend $sentence // PB "Det må ikke skille os ad." at &: $u // PB changed from [at] to [&:] hos // at - PB: removed [$u+] -som sVm // which / that - PB: removed [$u+] +som sVm $u // which / that - PB: removed [$u+] // pronouns jeg jai $u+ // I @@ -209,13 +205,13 @@ dét de vi $u i _i $u+ mig maj $u // me -dig daj $u +dig daj $u+ dem $u ham $u hende $u sig $u -os Vs $u -jer +os Vs $u+ +jer $u denne $u+ // this dette $u+ disse $u+ // these @@ -256,12 +252,12 @@ må $u+ // may bør $u+ // ought // letter names -b be: -c se: -d de: +b be +c se +d de _e e: f Ef -g ge: +g ge h hO: _i i: j jVD // PB changed from [o] @@ -270,13 +266,13 @@ l El m Em n En o o -p pe: -q ku: +p pe +q ku r Er s es //t te: mooved to da_rules because of clash with T-shirt u u? -v ve: +v ve w d'Vbeltve: x Eks y Y? @@ -286,7 +282,6 @@ z sEt // PB English words bacon _^_EN bondage _^_EN -baseball _^_EN volleyball _^_EN dj _^_EN deadline _^_EN @@ -2761,6 +2756,52 @@ vanadium $alt vivarium $alt vokabularium $alt +// PB nouns with final -um - stress on previous syllable +basilikum $alt +curriculum $alt +dekorum $alt +depositum $alt +desideratum $alt +epicentrum $alt +erratum $alt +faktotum $alt +filosofikum $alt +futurum $alt +gummiarabicum $alt +interregnum $alt +jubilæum $alt +karakteristikum $alt +karbolineum $alt +karborundum $alt +kemoterapeutikum $alt +kompositum $alt +konsum $alt +kuriosum $alt +linoleum $alt +mausoleum $alt +memorandum $alt +momentum $alt +museum $alt +narkotikum $alt +neolitikum $alt +opossum $alt +palæolitikum $alt +perfektum $alt +perikum $alt +periodikum $alt +petitum $alt +petroleum $alt +postscriptum $alt +præteritum $alt +psykofarmakum $alt +pædagogikum $alt +referendum $alt +responsum $alt +supinum $alt +tedeum $alt +ultimatum $alt +vademecum $alt + // PB nouns with final -ie - stress on previous syllable // unofficial suffix for the "ium" words above adverbie $alt @@ -2935,6 +2976,24 @@ rimesse $alt stewardesse $alt tristesse $alt +final -ese - stressed e +anamnese $alt +askese $alt +diatese $alt +diurese $alt +eksegese $alt +fylogenese $alt +genese $alt +hypotese $alt +katakrese $alt +kinese $alt +ontogenese $alt +parese $alt +partenogenese $alt +patogenese $alt +protese $alt +syntese $alt + PB final -id - stressed i adenoid $alt alkaloid $alt @@ -5176,7 +5235,7 @@ bivuaker $alt blamer $alt blancher $alt bloker $alt -bogstaver $alt +bogstavere $alt bombarder $alt bonbonniere bVNbVNj'E:r $alt boniter $alt @@ -5836,7 +5895,7 @@ konvojere $alt konvoluter $alt kooperer $alt koordiner $alt -kopier $alt +kopiere $alt kopuler $alt koreografer $alt korreler $alt @@ -5872,7 +5931,7 @@ kurer $alt kursere $alt kursiver $alt kurtiser $alt -kuverter $alt +kuvertere $alt kvadrer $alt kvaksalverer $alt kvalificer $alt @@ -6090,7 +6149,7 @@ patruljere $alt pausere $alt pelleter $alt pendulere $alt -pensioner $alt +pensionere $alt perciper $alt perfektioner $alt perforer $alt @@ -6108,7 +6167,7 @@ perverter $alt petitioner $alt pigmenter $alt piker $alt -piloter $alt +pilotere $alt pioner $alt pipetter $alt pirater $alt @@ -6264,7 +6323,7 @@ rekommander $alt rekompenser $alt rekonvalescer $alt rekreer $alt -rekrutter $alt +rekruttere $alt rektificer $alt rektoskoper $alt rekurrer $alt @@ -6538,7 +6597,7 @@ triumfere $alt trivialiser $alt trompeter $alt trunker $alt -trænere $alt +//trænere $alt tunneler $alt turner $alt tuscher $alt @@ -6550,7 +6609,6 @@ uniformer $alt urbaniser $alt urger $alt uriner $alt -urpremier $alt usurper $alt vacciner $alt vagabonder $alt @@ -10385,10 +10443,10 @@ chevrolet sjEvrol'e saigon sajg3-n // PB Saigon managua m&n'&:gw& (deja-vu) deSja||'vy -(il duce) il||d'u:tSj@ // PB Italian faschist +(il duce) il||d'u:tSj@ // PB Italian Fascist // Abbreviations -pga pOgR'O?n'a? $hasdot // PB short for 'på grund af' +pga pO||gR'O?n||& $hasdot // PB short for 'på grund af' hr h&r $hasdot // PB hr. - short for mister (Mr) in Danish mr mestV $hasdot // PB mister mrs meses $hasdot // PB Mrs. @@ -10397,14 +10455,21 @@ fx fVegsemp@l // PB "fx" is short for 'for eksempel' (f.eks) fVegsemp@l $hasdot // PB "f.eks" is short for 'for eksempel' (dj'en) di:'dje:j3n // *PB dj'en - the dj (dj'er) di:'dje:jV // *PB dj'er -(tv'et) te:ve:@d // PB -(tv'er) te:ve:V // PB (cd'en) se:de:3n // PB (cd'er) se:de:V // PB emp $abbrev usa $abbrev +who $abbrev $allcaps // PB World Health Organization +vsop $abbrev eu $abbrev +co $abbrev $allcaps // PB for CO2-kvote +ngo $abbrev edb $abbrev +wc v'ese // w is pronounces as v in Danish +(wc'et) v'ese@d +(wc'er) v'eseV +(wc'erne) v'eseVn@ +(wc'ernes) v'eseVn@s it $abbrev id $abbrev dna $abbrev @@ -10476,7 +10541,7 @@ legenderne leg'EndVn3s (så langt) sV||l'ANt (så vil) sV||v'el (så højt) sV||h'Vjt - (så var) sV||v'Ar +(så var) sV||v'Ar (så længe) sV||l'EN3 (så må) sV||m'O (så har) sV||har @@ -10484,4 +10549,5 @@ så sV $sentence $atstart (virkede så) v'irkeD@||sV (kom så) kVm||sV (koste med) kosd@||mED - (en kanoner) en||k&non'er +(en kanoner) en||k&non'er +nå nV $atstart // PB Nå, der er du diff --git a/dictsource/da_rules b/dictsource/da_rules index 53287628..13fc3e8d 100755 --- a/dictsource/da_rules +++ b/dictsource/da_rules @@ -46,10 +46,12 @@ torn) ad (o '&d // PB stressed kn) a (p A // PB manchetknap sn) a (p a // PB snappe + sn) a (vs A // PB m) a (p a // PB mappe L09) a (j a // PB maj // PB general rule: [a] after n before vn n) a (vn a // navn + gn) a (vne & // PB // PB general rule: [a] after l before n l) a (n & // land l) an (ce AN // PB lancere @@ -63,9 +65,11 @@ C) a (mi & // PB vitamin alab) a (m '& // PB Alabama // PB general rule: [&] after l before m + vowel - l) a (mA & // PB ham, gamle, lam + l) a (mA & // PB lama + _rekl) a (me '& // PB stressed // PB general rule: [&] after before m/n f) a (L09 & // PB familie, fane + f) a (mle A // PB // PB general rule: [&] after k k) a (+ & // PB kage, kaste sk) a (k A // PB skak @@ -89,6 +93,7 @@ // PB general rule: [&] after d d) a (+ & // PB dame, dag d) a (g@ a // PB dagbog + dd) a (g & // PB middagstid _d) a (m_ a // PB dam _d) a (mm a // PB dammen // PB general rule: [A] after d before mp @@ -121,6 +126,8 @@ // PB general rule: [a] after sp/st/sk before m L08) a (m a // skam _) a (mb A // PB ambition + a (mt A // PB amtskommune + test) a (m & // PB testamente // PB general rule: [A] after sp/st/sk before v L08) a (v & // stav // PB general rule: af = [Au] before s @@ -146,8 +153,7 @@ t) av (s Au // tavshed // PB general rule: [A] before r a (r+ A // skar -// are A3 // klarede -// arer AV // klarer + // PB general rule: [A] before nk a (nk+ A // planke, slanke, anke, flanke a (nklag+ & // PB anklage @@ -159,9 +165,6 @@ ang (reb &ng // PB angreb a (gt A // agt l) a (gt+ A // PB lagt - l) ag (_ &j // lag - f) ag (s au // PB fagsnak - l) ag (C au // PB flagstang, lagkage // PB general rule: [A] before vn after consonant C) a (vn A // favn, savn // PB general rule: [a] after kl before consonant @@ -170,8 +173,15 @@ a (ngC A // PB angst b) a (L06 A // PB baptist a (mp %A // PB ampul + a (men_ A // PB + amager AmAr // PB Amager a (ngri & // angribe a (ppar a // PB apparat + r) a (cerbil E // PB + r) a (cercyk E // PB + r) a (cerbane E // PB + r) a (cervogn E // PB + r) a (cerkør E // PB _okt) a (v '& // stressed _konk) a (v '& // stressed _det) a (lje '& // PB stressed @@ -181,6 +191,7 @@ _milli) a (r 'A // PB stressed - milliard _trilli) a (r 'A // PB stressed - trilliard _sejl) a (ds '& // PB stressed + _sah) a (ra 'A // PB stressed L08) av (C Au // stavn st) av (nin &v // PB stavning h) av (_ & // PB hav - problem with the noun "hav" [hAu] @@ -188,24 +199,39 @@ _trilli) a (r 'A // PB stressed - trilliard h) av (C Au // PB havbund h) av (over Au // PB havoverfladen h) a (vn A // PB havn + h) av (is Au // PB + H) av (aborr Au PB havaborre h) ag (l Au // PB hav) a (nna '& // PB Havanna h) a (ck & // PB hacke color) ado 'Ado // PB US state _) av (_ Au // PB av C) a (k a // PB makværk + _f) akultet &kult'et // PB fakultet + _) absolution AbsoluS'on // PB + absolution AbsoluSon // PB + _) attribution &tRibuS'on // PB + attribution &tRibuSon // PB C) a (x a // PB fax st) a (ki & // PB stakit m) a (ka & // PN makaber + klim) a & // PB klimarelateret C) a (ck a // PB tackle + sn) a (ck & // PN s) a (x a // PB saxofon l) a (kA & // PB lakune @l) a (g &j // PB nederlag gr) ape Eb // PB grapefrugt + astaire &sd'E:r // PB name + l) arge AdZ // PB + a (merikan a // PB amerikansk + aids Eids // PB + aubrey V:bri // PB name // PB stressed a in final -al in $alt words in da_list &) al ($p_alt+ ''&l // the double '' enforces primary stress - fatal, monumental r) al ($p_alt+ 'Al // [A] after "r" - general, neutral + &) al (is$p_alt+ &l' // PB socialisme // exception - no stress because of stress on -ion r) a (l@@+ A // PB centralisation NEEDS MORE WORK @@ -215,12 +241,17 @@ _trilli) a (r 'A // PB stressed - trilliard // PB stressed a in final -at - words in da_list &) at ($p_alt '&t // attentat + &) ation ($p_alt &S'on // delegation + &r) ation ($p_alt AS'on // koncentration &r) at ($p_alt 'At // [A] after "r" - kammerat &r) at (ur$p_alt At' // [A] after "r", stressed u - littteratur intern) atio (nal &So // clash with "internat" +_oblig) atio (n &S'o // PB clash with "obligat" in da_list + oblig) atio (n &S'o // PB statsobligation // PB (stressed a in final -ar - words in da_list &) ar ($p_alt ''Ar // antikvar, dinar + &) ar (iat$p_alt Ar // antikvariat // PB nouns with final -ade in da_list - stressed a &) ade ($p_alt '&:D@ // hystade @@ -290,7 +321,7 @@ _kontr) a (kt 'a kast) a (nje '& // PB stressed foranst) a (lt '& // PN stressed - foranstaltning org) a (s '& // PB orgasme - stressed -_psyki) a (t '& // PB psykiater - stressed +_psyki) a (t ''& // PB psykiater - stressed _bratisl) a (v '& // PM Bratislava _vatik) a (n '& // PB Vatikanet lumb) a (go '& // PB stressed - lumbago @@ -301,6 +332,7 @@ _radio) a (kti 'A // PB stressed - radioaktiv _impres) a (rio 'A // PB stressed _rab) a (rber 'A // PB stressed _ar) a (ber 'A // PB stressed + eng) a (ng 'a // PB stressed bl) a (d & // PB blad h) a (n & // PB han j) a & // PB ja @@ -346,6 +378,9 @@ interf) a (ce ei // PB interface cockt) ail Ejl // PB cont) ai (n 'Ej // PB container d) ay Ej // PB holyday, Holliday + h) a (sting Ej // PB Hasting + w) al (k V: // PB walkie-talkie, walkman + w) all V:l // PB WQall street aise 'E:s@ // PB mayonnaise k) ai (n &|'i: // PB kokain ld) a (k & // PB baldakin @@ -367,12 +402,13 @@ interf) a (ce ei // PB interface sp) a (m &: // PB isl) a (m 'a: // PB islam, islamisk j) a (m+ a // PB fjams + j) a (men & // PB exception jamen = ja men pl) a (m+ & // PB plamage CHECK THIS ONE d) a (me+ &: // PB dame - j) a (men a // PB exception jamen = ja men f) a (n+ & // PB fanden av) a (nc 'V // PB avance ch) a (n a // PB chance + sv) a (j a // PB svajende L06) a (n & // PB tand, tante, band, bande, spand, spade ban) a (n '& // PB banan hvord) a (n '& // PB stressed a in 'hvordan' @@ -411,13 +447,15 @@ restaur) ant 'AN // PB added stress attention at'EnS@n athen &t'en // PB Athen andrews &ndRu:z // PB - angeles &ndZ3lEs + angeles &ndZ3lEs // PB + arrow &Rou // PB abilene &bili:n // PB str) abads Ab'&s // PB stressed a, silent d disput) a (ts '& // PB stressed amsterd) a (m 'a // PB seb) a (stian '& // PN stressed _te) a (ter '& // PB stressed +_domin) a (n '& // PB stressed - dominans aw (K aw ay (K Ej // PB a changed to E @@ -475,6 +513,12 @@ amsterd) a (m 'a // PB p) age (++ &:S@ // PB page, pagehår band) age &:S@ // PB gipsbandage sC) ag &j // PB slag, slaget, Skagen, smag + sl) ag (C@ au // PB slagskib + l) ag (_ &j // lag + opsl) ag &j // PB + f) ag (s au // PB fagsnak + l) ag (C au // PB flagstang, lagkage + l) ag (re &j // PB oplagres esl) ag (lA Au // PB beslaglægge sC) ag (t ag // PB universitetsvagt sv) ag (t &j // PB svagt @@ -540,7 +584,6 @@ _trienn) ale '&:l@ b b bb b ko) bb (er w // PB - b (il 'b beagle bi:g@l //PB beagle - dog bloody blVdi // PB beat b'i:t // PB beat - music @@ -554,65 +597,67 @@ _trienn) ale '&:l@ brown _^_EN // PB name bellevue bEl@v'y // PB _) backup b&k'Vb // PB - bourgogne burg'Vnj@ + bourgogne burg'Vnj@ // PB pe) b (er w // PB peber _) buffet byf'e // PB @) buffet byf'e // PB &) bassin b&s'EN // svømmebassin - basketball BAsgetbO:l + basketball BAsgetbO:l // PB + baseball bejsBO:l/2 // PB butterfly bVtVflaj // PB + beach bi:tS // PB Beach Boys .group be // PB words beginning with "be" with stress on the second syllable (850) // They have secondary stress on the second syllable with a preceeding syllable - _) be (@ b%E // PB besta'and + _) be (@ b%e // PB besta'and //&) be (@ bE, // PB hv'alrosbest,and // PB exceptions to the "be" rule _) be (dste bE // bedstefar, bedstemor - _) be (nmel bE - _) be (narbejde bE - _) be (nbrud bE + _) be (nmel be + _) be (narbejde be + _) be (nbrud be _) be (nbræk bE - _) be (nbbuk bE + _) be (nbbuk be _) be (nchmark bE - _) be (nedder bE + _) be (nedder be _) be (nende bE _) be (net be - _) be (nfisk bE - _) be (nfedt bE - _) be (nfri bE + _) be (nfisk be + _) be (nfedt be + _) be (nfri be _) be (ngel bE _) be (ngna bE _) be (nh bE _) be (njamin bE - _) be (nkl bE + _) be (nkl be _) be (nl bE - _) be (nmel bE - _) be (npibe bE - _) be (nplads bE - _) be (nrad bE - _) be (nskinne bE - _) be (ntøj bE - _) be (nspænd bE + _) be (nmel be + _) be (npibe be + _) be (nplads be + _) be (nrad be + _) be (nskinne be + _) be (ntøj be + _) be (nspænd be _) be (nv bE - _) be (de bE + _) be (de be _) be (dre bE - _) be (dding bE + _) be (dding be _) beg (blende baj _) beg (mand baj _) beg (ning baj _) be (jds bE - _) be (jle bE + _) be (jle be _) be (lgi bE _) be (rb bE _) be (rgen_ bE - _) be (tastrål bE - _) be (eta_ bE - _) be (tatron bE - _) be (taversion bE - _) be (tel bE - _) be (tl bE + _) be (tastrål be + _) be (eta_ be + _) be (tatron be + _) be (taversion be + _) be (tel be + _) be (tl be .group c @@ -629,8 +674,10 @@ _trienn) ale '&:l@ ce (rt s'E // PB koncert c (i s frederi) c (ia =ks // PB + ch (loe k // PB Chloe c (k ch (+ S // PB check, chokolade + te) ch (no k //& PB mi) ch (a k S ch (r k c (ha S @@ -668,9 +715,12 @@ frederi) c (ia =ks // PB a) d D // PB ad, udenad - dangerously broad a) de (Cr D3 // PB badedragt - not testet y) de D3 // PB brydehold + y) der DV // PB betyder Coe) de @-D // PB boede @) d (elt d // PB udelt, tildelt - l) d // PB omit d after l - hold, skjold + l) d // PB silent d after l - hold, skjold +turtel) d (ue d // PB + l) d (ug d // PB meldug l) d (et // PB spjældet d (ør d // PB bildør d (et d // PB metaldetektor @@ -681,6 +731,7 @@ frederi) c (ia =ks // PB l) d (a d // PB keep d in "baldakin" hel) d (i d // PB keep d in "heldig" fær) d // silent d in færd, færdsel + fær) d (e d // PB færdes, færden fær) d (i d // PB keep d in "færdig" &) d (yr d // PB keep d in "muldyr" o) dds ds // PB odds @@ -698,6 +749,7 @@ stikor) d // PB exception - silent d in 'stikord' A) d (C D A) dd D // PB hedder - "er" removed by &) er (_NS2 [V] A) d (s@ // PB fødsel - deleted 30+ rules, this one does the work + blø) d (+ D // PB blødsøden ræ) d (sel D // PB me) d (+ D // PB medspiller A) ds (_ s // PB silent d - palads, trods @@ -781,6 +833,7 @@ stikor) d // PB exception - silent d in 'stikord' An) d (rA d ma) d (ras d An) d (re d + bu) ddh (ist d // PB silent h - buddhist or) d (re d æl) d (re d æn) d (re d @@ -788,6 +841,7 @@ stikor) d // PB exception - silent d in 'stikord' hon) d (ura d // PB Honduras æn) d (ri d ti) d (s D + ti) d (sel // PB silent d sli) d (so D A) d (t // PB silent d - forbudt, skudt, ladt fjer) d (e // PB silent d - fjerde @@ -808,6 +862,7 @@ stikor) d // PB exception - silent d in 'stikord' daiquiri d&k@ri // PB drink _) duke dZu:k // PB Duke - name _) drive (- dRAjv // PB drive-in + _) dean (_ di:n // PB name .group é // added by PB é 'e // idé, entré @@ -818,9 +873,10 @@ stikor) d // PB exception - silent d in 'stikord' // Secondary stress after a syllable &b) e (@ E, // PB hv'alrosbest,and // PB general rules - l) e e +// l) e e val) e (ncia 'E // PB al) er V // PB maler + mal) e (ri V // PB perl) e @ // PB _dil) e (mma 'E // PB ll) e (de // PB silent e - billede @@ -828,9 +884,14 @@ stikor) d // PB exception - silent d in 'stikord' elleve elv@ // PB _koll) e (ga 'e // PB stressed _koll) eg (e 'ej // PB stressed kolleger + _sem) e (ster 'E // PB stressed r) e E // PB general rule: [E] after r + r) e (nte &# // PB + r) e (st & // PB restlager klatr) e V // PB - gr) e (s & // PB kongres + hor) e V // PB horeunge + kongr) e (s & // PB kongres + regr) e (s & // PB // dr) e (C@ @ // PP sladresøster - not tested r) e (vn &# // PB revne r) e (kto &# // PB rektor @@ -838,25 +899,26 @@ stikor) d // PB exception - silent d in 'stikord' ur) e (ne @ // PB murene r) e (s_ @ // PB forhindres pr) e (+ &# // PB general rule: [&] after pr - presse + opr) e (v E // PB oprevet + pr) e (m E // PB premiere spr) e (d E // PB spredt - r) er (_ V // PB final "er": V after r - murer - t) er (_ V // PB final "er": V after t - frygter - r) ere (_ 3V // PB general rule: plural ending - murere r) e (L09s &# //PB general rule: [&#] after r before ns/ms - rensetøj r) e (m &# //PB general rule: [&#] after r before m - rem, frem r) e (ng aj //PB general rule: [&#] after r before ng - streng, dreng r) e (ngø E // PB rengøre r) e (t &# //PB general rule: [&#] after r before t - ret + teor) e (t e // PB teoretisk _tr) e (t e // PB tretal fr) e (l &# // frelse yr) e (+ @ // PB myretue, dyrehold r) e (h @ // PB general rule: [@] after r before h - fårehyrde, varehus @n) e (d @ // PB general rule: [@] after @+n before d - måned + men) e (d e // PB n) e (dgang e // PB m) e (di+ e // PB medicin rn) e (d+ e // PB derned an) e (r @ // PB anerkende - L09) e (de E // nede, nederlag + L09) e (de e // nede, nederlag mus) e (um 'E // PB stressed mån) e (d @ // PB L09) e (t e // metal @@ -865,6 +927,7 @@ stikor) d // PB exception - silent d in 'stikord' ed) e (r @ // nederlag tr) e (ma E' // trema s) e (dd E // PB seddel + s) ek (sten aj // PB seksten, sekstende ell) e (r V // ellers fr) edag Ed& // PB fredag - not [d&j) nov) e (mber 'e // PB @@ -883,6 +946,9 @@ stikor) d // PB exception - silent d in 'stikord' Ar) e (s_ 3_: // PB gøres r) eau o // PB bureaukratiske ee 'e: // PB ideer, cafeer + gr) ee (n i: // PB evergreen + gr) ea (t Ej // PB English word + ch) eese i:s // PB cheeseburger fr) ee (lan i: // PB freelance b) ee (d ee // PB beedige en) e @ // PB ene, eneste @@ -923,6 +989,7 @@ provenc) e // PB Provence - skip the e prov) e (nce 'A: // PB Provence e (gsot &# // PB blegsot e (gfi &# // PB blegfis + egen (rådig aj@n // PB r) e (ste &# // PB resten, restaurant e (gansigt &# // PB blegansigt _kongr) e (s '& // PB kongres - stressed but not after a syllable @@ -932,6 +999,7 @@ _aller) e (de_ E // PB allerede - otherwise the E is changed by anot _im) e (ns+ 'e // PB stressed _magn) e (t 'e // PB stressed lar) e (do 'e // PB + l) ew (is u: // PB name // PB final -em - stressed e _probl) e (m 'e @@ -1073,6 +1141,7 @@ _sakram) e (nte 'e n) egl ajl // PB negl r) egel Ejl // PB regel r) egl Ejl // PB regler + br) ea (k Ej // PB breakdance res) e (rve 'e // PB reserve - stressed m) eg (a eg // mega, omega _) eget (_ a:j@D // PB eget @@ -1109,12 +1178,14 @@ underl) eg ej // PB underlegen _offic) e (_ // office (officepakke) fl) e (de+ e // PB aflede &) edet (_ @D3d // PB hovedet + l) edet (+ eD@t // PB håndledet r) edet (_ ED3d // PB helbredet st) edet (_ ED3d // PB værkstedet Ad) en (@ @-n // udenlandsk, udenad Ad) en (t en // PB identificere &) ene (_ @-n@ gr) ene En@ // PB grene + fingr) ene Vn@ // PB ucc) es 'e nog) et (_ D // PB noget ir) e (n 'e @@ -1127,6 +1198,8 @@ _offic) e (_ // office (officepakke) _terap) eut 'Wwd // PB stressed _torp) e (do 'e // PB stressed _cel) e (ber 'e // PB stressed +_parent) e (s 'e PB stressed + _kat) e (der 'e // PB stressed // PB a few words with final -es - stressed e abc) e (s 'e @@ -1148,6 +1221,7 @@ _terap) eut 'Wwd // PB stressed eyeliner ajlajnV // PB ey i // PB jockey eiffel ajf3l // PB Eiffeltårnet + ecstacy Est&si // PB ef) eu Vj // PB plant _) earl W:l/2 // PB Earl _) earp W:b // PB name @@ -1159,11 +1233,16 @@ _terap) eut 'Wwd // PB stressed // PB plural suffix -ene @) ene (_S3 @n@ // brødrene - the brothers + tj) ene En@ // PB betjene // PB stressed e in nouns with final -esse in da_list &) esse ($p_alt '&s3 // finesse &r) esse ($p_alt '&#s3 // adresse +// PB stressed e in nouns with final -ese in da_list + &) ese ($p_alt 'es3 // hypotese + &r) ese ($p_alt 'Es3 // parese + .group el // PB GENERAL RULE FOR WORDS ENDING WITH -EL - 1.182 words @@ -1182,20 +1261,29 @@ _terap) eut 'Wwd // PB stressed muskat) el ''El // PB el (sk+ el // PB naturelsker intellektu) el el // // PB + _pan) el 'el // PB + pan) el el // PB bestandd) el el // PB halvd) el el // PB +nederd) el el // PB + d) el (ing el // PB + sk) el El (+ // PB vandskel + &) el (ev el // PB mønsterelev evang) el el // PB evangelie d) el (t+ el // PB tildelt + @f) el (t El // PB oliefelt lob) el (ia 'el // PB - d) el (A+ el // PB dele, omdele + d) el (e+ el // PB dele, omdele edd) el l/2 // PB seddel medd) el del // PB meddel _offici) el (+ 'el // PB officiel verbi) el 'el // adverbiel +_kultur) el '&#l // PB mod) el el // PB fotomodel _mod) el 'el // PB modelbureau u) el (+ 'el // aktuel, seksuel, visuel u) el (t+ 'el // aktuelt, seksuelt, visuelt + unds) el (ig 'el // PB gennemsku) el (ig =el ur) el (_+ '&#l // konjunkturel and) el el // andel @@ -1208,6 +1296,7 @@ gennemsku) el (ig =el ford) el el // fordel orsk) el el // forskel h) el (t+ el // PB tøffelhelt + r) el (at el // PB relateret t) el (ef el // telefgon rsk) el @l // tærskel ed) el (+ el // femtedel - words where "del" means 'part of' @@ -1303,6 +1392,9 @@ verdensd) el el kuglep) en En // PB ord) en @n anci) enn EN // anciennitet + ep) en En (+ // PB fyldepen + app) en (diks 'En // PB stressed + susp) en (sion en // PB suspension retskaff) en @n sid) en @n // PB not a suffix - siden præsid) en (t en // vicepræsident @@ -1348,13 +1440,18 @@ skizofr) en 'En // PB // common affix -ender &) ender (_ EnV // anliggender, foretagender &r) ender (_ anV // røvrender + _kal) ender 'EnV // PB .group er + r) er (_ V // PB final "er": V after r - murer + t) er (_ V // PB final "er": V after t - frygter + r) ere (_ 3V // PB general rule: plural ending - murere + // PB noun suffix -er (perler - pearls), -ers (perlers - pearls') -erne (perlerne - the pearls), -ernes (perlernes - the pearls') // Also verb suffix (hun elsker - she loves) - not to mention Peter // NB suffix takes away the stres from "italiener/italienere" and since // it isn't possible to mark the rule "not for $alt words" -er and -ere a not suffixes any more. - &) er (_N V // elsker + @) er (_N V // elsker &) ere (_ 3V // elskere &) eren (_ @r3n // elskeren &) erens (_ @r3ns // elskerens @@ -1364,8 +1461,8 @@ skizofr) en 'En // PB &) erste (_ Vst@ //midterste &) ert (_ Vt // lummert -// exceptions to the "er" suffix rule - g) er (_++ V // våger, læger [ l'Ejer] +// exceptions to the "er" rule + g) er (_++ V // våger, læger [l'EjV] g) er (t+ er // PB Gerta @g) erne (++ Vn@ // lægerne fing) erne (m Vne // PB fingernem @@ -1374,13 +1471,21 @@ skizofr) en 'En // PB reag) ere (_ er3 // overreagere _reag) ere (_ 'er3 // overreagere vurd) ere (_ er3 // overvurdere - ng) er (_++ V // unger + overs) er er // PB + g) er (+ V // unger, borgerkrig + m) er (et V // PB nummeret + nysg) er (ri er // PB nysgerrig revolv) er V // PB skid) er Vr // PB + st) er (+ V // PB mønster + dent) er V // PB studentereksamen all) er V // PB allersidst + pill) er V // PB spiller, piller all) er (g er // PB allergisk j) er (n+ Er // jern j) er (ne++ Er // PB stjerne + talj) er (++ V // PB detaljer + lej) er V // PB sygeplejerske bunk) er V // PB not a -er suffix alexand) er =dV // PB Alexander report) er V // PN not a suffix @@ -1389,6 +1494,7 @@ _kvart) er 'er // PB kvarter, kvarterarrest _karakt) er 'er // PB karakter karakt) er er // PB topkarakter _klav) er 'er // PB stressed + _tall) er (ke 'Er // PB tallerken _perif) er 'er // PB stressed perif) er er // PB not stressed after a syllable klav) er er // PB after a syllable - værtshusklaver @@ -1421,10 +1527,13 @@ _perif) er 'er // PB stressed // Words ending with -ere - stressed e - around 1.600 words in list file &) ere ($p_alt++ ''e:3 // PB stressed - manipulere, protestere &) er ($p_alt++ ''er // PB stressed - repeter + &) er (_$p_alt++ ''er // PB stressed - repeter + &) er (en$p_alt++ ''er // PB stressed - premieren // exceptions fing) er (en VR // fingeren - clsashes with 'fing'ere' _barb) er 'er // PB lev) er (eg+ @r // PB leveregel + brod) er (en Vr // PB // PB stressed e in words with -ering (1.100) in da_ list - likvidering &) ering ($p_alt ''ereN @@ -1450,7 +1559,7 @@ reserv) ert 'ert // fire stavelser, den sidste -tiv, tryk på anden alt) er (nativ 'ER // PB stressed LOOK FOR MORE - C) er (At V // PB probably way too broad - offeret + ff) er (At V // PB probably way too broad - offeret c) er (e+ e // PB velkvalificeret v) er (et er // PB kultiverret t) er (et er // PB citeret @@ -1502,11 +1611,13 @@ reserv) ert 'ert offic) er 'er // PB officer - stressed e cafet) er (i 'er // PB cafeteria n) er (v Er // PB nerve, nervøs - n) er (t Er // PB genert + _gen) er (t Er // PB genert + _man) erer 'eV // PB _L06) er (_ &r // PB per L06L06) er V // PB klipper sk) er V // PB fisker nd) er V // PB under + umm) er V // PB hummer _) er (_ &r // PB er L09) er (ne_ V // PB kameraerne juvel) er (en 'er // PB juveleren @@ -1515,6 +1626,8 @@ L06L06) er V // PB klipper man) erer eV // PB _l) er (_++ er // PB ler v) er (r_ er // PB levere + man) er (_ 'er // PB hundemaner + rman) er (_ V // PB formaner th) er_ V // Luther gt) er V // PB agter hj) er Er // PB hjerne @@ -1527,6 +1640,7 @@ L06L06) er V // PB klipper ob) er (st V // PB rooms) ervice Wvis // PB d) erby A:bi // PB + d) er (byg V // PB underbygge _all) erede (_ @reD@ .group ed @@ -1544,7 +1658,7 @@ L06L06) er V // PB klipper _fr) ede (_+ ED@ // PB frede vr) ede (_+ ED@ // PB vrede ler) ede (_+ ED@ // PB fuglerede - b) ede (_+ eD@ // PB embede + emb) ede (_+ eD@ // PB embede hindr) ede (_ 3D@ // PB forhindrede år) ede (_+ 3D@ // PB sårede odr) ede (_+ 3D@ // PB fodrede @@ -1567,12 +1681,15 @@ L06L06) er V // PB klipper s) et (_+ et // PB set it) et (_+ 'et // aktivitet _rak) et 'Et // PB raket + _viol) et ''Et // PB stressed _brik) et 'Et // PB brik) et Et // PB +skampl) et Et // PB _toil) et 'Et // PB toilet, toilette _kok) et 'Et // PB stressed - koketteri, koket _kvint) et 'Et // PB _kvart) et 'Et // PB +_et_kors) et 'Et // PB a corset [kVs'Et] vs the cross [kVrs@d] kvint) et Et // PB kvart) et Et // PB _tromp) et 'et // PB stressed @@ -1596,6 +1713,8 @@ klarin) et et // PB alfab) et 'et // pb _bill) et 'et // PB stressed bill) et et // PB + _tib) et 'et // PB + tib) et et // PB _bill) ett 'et // PB stressed - only one t _kask) et 'et // PB stressed _bajon) et 'Et // PB stressed @@ -1659,6 +1778,10 @@ _vinaigr) ette '&t@ a) f (atisk f // PB afatisk a) f (oris f // PB aforisme, aforistisk +// PB one sylable plus "færdig" - stressed æ + @) færdig f'Erdi // bluf'ærdig + @@) færdig fErdi $1 // f'ingerfærdig + // PB General rule, most words with af- plus consonant: f => w a) f (C w // PB exceptions to the 'a)f (C' rule below @@ -1672,9 +1795,10 @@ _vinaigr) ette '&t@ a) ff (age f // PB staffage a) ff (utage f // PB ra) ff (e f // PB straffe + ra) f (for f // PB strafforfølge a) ff (el f // PB vaffel, taffel a) f (ro f // PB afroasiat, afroamerikaner, afrohår etc. - a) f (re f // PB blafre + la) f (re f // PB blafre @) fobi fob'i // PB xenofobi, hydrofobi a) f (it f a) f (on f @@ -1698,6 +1822,7 @@ _vinaigr) ette '&t@ firenze fiR'&ns@ // PB Italian city flush flVS // PB freud frWjd // PB Freud + field fi:l/2d // PB .group g g g @@ -1705,6 +1830,7 @@ _vinaigr) ette '&t@ ru) g // PB rug, rugmel fru) g (t g // PB æ) g (ernA j // PB lægerne + al) g (e j // PB alge o) g (ernA // PB nekrologerne sti) gmata gm'&:t& // PB stressed a) g (ave 'g // PB agave @@ -1730,6 +1856,8 @@ _vinaigr) ette '&t@ l) g (s j øl) g (e j // PB bølge, selvfølgelig A) g (n j // PB tegn, regne + sky) g (ni g // PB afskygning + i) g (no g // PB ignorere æ) g (n+ g // PB udlægning, prægnant by) g (n g // PB bygning ble) g (sot j // PB blegsot @@ -1737,6 +1865,7 @@ _vinaigr) ette '&t@ ble) g (fi j L08e) g j // PB steg, spegepølse g (å++ g // PB præstegård + val) g (år j // PB L08e) g (t g // PB stegt æ) g (e j æl) g (e j // PB sælge vælge @@ -1750,6 +1879,7 @@ _vinaigr) ette '&t@ g )led g // PB gled val) g (t // PB silent g - valgt sy) g // PB silent g -sygdom + sa) g j // PB frisag spur) gte t@ // PB silent g - spurgte n) gæ gE Co) g w // PB sprog, tog, toge @@ -1767,12 +1897,14 @@ _vinaigr) ette '&t@ ær) g w // PB bjærge r) g (er_ u // PB herberger u) g (e : + su) g : // PB silent g - sugerør u) g (ene S // PB ugenert u) g (enn g // PB ugennemskuelig u) g (enL11 g // PB ugengældt, ugenkendelig - u) g (l ? + u) g (l // silent g - uglegylp, smugler ø) ge (+ :j@ // PB bøgetræ, øge mø) ge (len :je // PB møgelendig + beha) g j // PB ubehag ø) g (n j g (iv+ g // avoid letter "g" pronounced with phoneme S dra) g (en w // PB dragen, uopdragen @@ -1783,10 +1915,13 @@ _vinaigr) ette '&t@ la) g (t g ra) g (_ w // foredrag ra) g (e : // PB changed from w + præ) g j // PB præg, prægning, udpræget + præ) g (na g // PN prægnans lA) g (a g ba) g (tal u // PB l added to post - bagtale da) g (C w // PB changed from u - daglejer da) g (s_ ? + dda) g (s ? // PB middagstid fa) g (C u _re) g (i S' _re) g (iment g // PB regiment @@ -1809,6 +1944,7 @@ _vinaigr) ette '&t@ _) gin dZen // PB _) guy (_ ga:j // PB Guy - name geronimo dZer'VnimO:u // PB + grady grEjdi // PB name // PB final -gi in da_list - stressed i &) gi ($p_alt g'i // pædagogi &) gi (sk$p_alt =gi // pædagogisk @@ -1867,11 +2003,11 @@ indran) ge (re S'e ur) ge (re S'e _korte) ge =Se korte) ge Se - _lo) ge (_ Se // lige + _lo) ge (_ Se // loge _) ge (ne_ Se // gene _) ge (nere Se // genere - _) ge (nerøs Se // generøs - _) ge (nert Se // genert + ge (nerøs Se // generøs + ge (nert Se // genert _) ge (never Se // genever _) generel gen@r'&#l // PB stress added _a) ge (re g'e // PB agere @@ -1901,15 +2037,18 @@ _korte) ge =Se .group i i i // PB i: => i - made a lot of rules redundant ig (_ i // dejlig, rig + udk) ig ig // PB r) i (gg e // PB rigge _l) ig (_stille ek // PB problem: lig = "dead body" and lig = the verb "lie" _l) ig (_pænt ek // PB _l) ig (_ordentligt ek // PB _l) ig (_godt ek // PB _l) ig (_roligt ek // PB + l) ight ajt // PB pav) ill (o ilj // PB pavillon færd) ig i // PB silent g hurt) ig i // PB silent g + hipp) ie i // PB silent e ig (hed i // PB vittighed _k) ig (_ ig // PB kig _t) ig (_ eg // PB tig @@ -1930,6 +2069,10 @@ mussol) i (ni 'i // PB _molev) i (t 'i // PB stressed - molevitten _marskand) i (s 'i // PB stressed - marskandiser _princ) i (p 'i // PB stressed + _cyl) i (nd 'e // PB cylinder - stressed + fil) i (st 'i // PB filister + _el) i (te 'i // PB stressed - elitesoldat + l) igh (ter aj // PB _mess) i (as 'i // PB _mart) i (ni 'i // PB cocktail _alb) i (no 'i // PB stressed @@ -1943,6 +2086,7 @@ _princ) i (p 'i // PB stressed d) i (sk e // PB købmandsdisk d) i (skett i // PB diskette d) i (sku i // PB diskutere + d) i (skret i // PB kr) i (cket e // PB f) i (sk e // PB gr) i (m e // PB @@ -1960,7 +2104,11 @@ _princ) i (p 'i // PB stressed ige i:@ // PB deleted [(_] - pige, pigen, stige, sige iger i:V // PB piger p) igen i:3n // PB pigen - kr) igen i:3n // PB krigen +// kr) igen i:3n // PB krigen + n) ige (r ige // PB nigerianer + n) iger (_ igV // PB Niger (river) +privil) ige ig'e // PB priviligeret + n) igeria ig'eRi& // PB dil) igen (ce iS'AN // PB diligence kr) igs is ed) ige (r ig'e // PB redigere @@ -1972,12 +2120,13 @@ intell) ige (n ig'e // PB intelligent _) ige (n ig'E // PB igen rol) ige iE // PB rolige, beroligende værd) ig i // PB silent g - idel i:D@l // PB idel + _) idel (_ i:D@l // PB idel israel isrA:l // PB Israel vend) ige i:3 // PB nødvendige iew j'u i (nL11 e //PB blinke, sinke, vinge, sving v) i (nkæld i // PB vinkælder + v) i (p e // PB vippe s) i (d e // PB sidde s) i (ds i // PB sidst t) i (n e // PB stinke @@ -1987,6 +2136,7 @@ intell) ige (n ig'e // PB intelligent gr) i (n i // PB grine dr) i (l e // PB drille br) i (lle e // PB briller + vr) i (m e // PB vrimle i (dt e // PB midt, lidt _sol) i (d 'i // PB solid b) i (dt i // PB bidt @@ -2002,9 +2152,10 @@ intell) ige (n ig'e // PB intelligent v) i (dt i // PB vidt v) i (sse e // PB visse, forvisse forv) i (s i // PB forvise - l) i (st e // PB liste + l) i (ste e // PB liste i (nd e // PB ind i (nt e // PB intakt + p) i (nt i // PB forpint f) i (nt_ i // PB v) i (mp e // PB vimpel h) i (m e // PB himmel @@ -2029,6 +2180,7 @@ intell) ige (n ig'e // PB intelligent // PB words with final -ik in da_list - stressed i &) ik ($p_alt ''ik // romantik &) ik (er$p_alt =ik // romantiker + &) ik (alsk$p_alt ik' // musikalsk &r) ik ($p_alt ''ek // fabrik &) ik (k$p_alt ''i // antikke - only one k &r) ik (k$p_alt ''e // fabrikker - only one k @@ -2070,6 +2222,7 @@ _konfl) i (kt 'i // PB stressed _pap) i (r 'i // PB stressed _tap) i (r 'i // PB stressed _vels) i (gn 'i // PB stressed + _part) i (sk 'i // PB stressed _just) i (ts 'i // PB _kul) i (ss 'i // PB kulisse i (nn e @@ -2086,7 +2239,7 @@ gudhjælpem) ig aj // PB g) i (k+ i // PB begik i (x e // PB fixe m) i (ks e // PB mikse - mus) i (k i // PB musik +// mus) i (k i // PB musik it) i (k i // PB politik _g) i (k_ i // PB i (k@ i // PB antikvar @@ -2098,13 +2251,16 @@ gudhjælpem) ig aj // PB fl) ig i // PB høflig r) ikk (+ ek // PB skiderikker t) i (me i: // PB time + t) ime (out ajm // PB s) i (dA+ i: // PB siden p) i (ds e // PB spids s) i (d_ e // PB sid s) i (dd+ e: // PB sidde + bes) i (dd i // PB besidde s) i (lk e // PB silke s) i (gt e // PB sigte, ansigt sl) i (k e // PB slik + impoten empotEn // PB impotens st) i (f e // PB stift st) i (k e // PB stik spl) i (t e // PB splitte @@ -2113,11 +2269,14 @@ gudhjælpem) ig aj // PB ld) ig i // PB heldig l) i (p e // PB slippe r) i (k e // PB drik, skiderik + fr) i (k i // PB frikendt br) i (ke i // PB briket _l) i (dt e // PB lidt bl) i (dt i // PB L08) i (l_ e // PB spil, skil st) i (l_ i // PB stil +forest) i (l e // PB forestille + ant) i i // PB antilope best) i (l e // PB L08) i (lt e // PB skilt, adskilt spl) i (n e // PB splint @@ -2139,6 +2298,7 @@ gudhjælpem) ig aj // PB v) i (nd e // PB vinde v) id (st e // PB vidst - e and silent d t) i (l e // PB til + vent) i (l i // PB st) i (le i // PB stile ju) i (ce // PB juice - skip the i soft) i (ce aj // PB softice @@ -2151,7 +2311,7 @@ gudhjælpem) ig aj // PB _mag) i (_ 'i // PB magi - stressed i _mag) i (en_ 'i // PB magien - stressed i _polit) i 'i // PB politi, politik - stressed i - _mus) i (k 'i // PB stressed i +// _mus) i (k 'i // PB stressed i _fys) i (k 'i // PB stressed i _civ) i (l 'i // PB stressed - civil all) igevel 'i@vEl // PB stressed i - alligevel @@ -2180,11 +2340,14 @@ suggest) i (bel 'i // PB stressed _mag) i (ster 'i // PB magister- stressed _re) i (ster 'i // PB register - stressed ii r) i (st e // PB brist, rist + tr) i (st i // PB +infanter) i (st i // PB d) ie (sel i // PB dieselolie k) io (sk jV // PB kiosk tr) i (ck e // PB trick r) i (bs e // PB _franc) i (sco 'i // PB + h) igh aj // PB high school // PB put stress on the syllable before final 'ium' - words in da_list &) ium ($p_alt =iOm // territorium @@ -2266,7 +2429,7 @@ _terap) i 'i v) i (sne e // PB l) i (e j r) i (gt e // PB rigtigt - r) i (c e // PB Fredericia + r) i (ca e // PB Fredericia l) ig (g+ e // PB ligge - only one g s) i (e j // t) i (e j @@ -2279,6 +2442,8 @@ _terap) i 'i ingen) i (ør ant) igone 'igon@ // PB Antigone - Greek name image imidZ + _) institution enstituS'on // PB + institution enstituSon // PB .group in @@ -2297,6 +2462,7 @@ _terap) i 'i .group it // PB words with final -it - stressed i &) it ($p_alt 'it //PB bakelit + &) ition ($p_alt iS'on //PB definition &) it (t$p_alt 'i //PB avoid double t - bakelitten [ b,ak@l'it@-n] .group iv @@ -2334,7 +2500,7 @@ _sport) iv 'iw ja (ck dZ& jerry dZeri // PB j (ob dZ - j (ohn dZ + john dZVn joe dZOu jackie dZ&ki // PB junkie dZVnki // PB @@ -2369,6 +2535,7 @@ _sport) iv 'iw jamaica S&m'ajk& // PB joint dZVjnt // PB _) james _^_EN + jay dZEj // PB name .group k @@ -2386,7 +2553,8 @@ _sport) iv 'iw &) k k // after stressed vowel _) kate (_ kEjt // PB name karaoke k&r&'ouki // PB -// &) kk g + krysantemum krYs'&nt@mOm // PB + kontinuum kVnt'inuOm // PB .group l // PB l changed to l/3 in ph_danish @@ -2417,6 +2585,7 @@ _sport) iv 'iw legem lE@m // PB legemsdel lotion l3uSjn // PB håndlotion lorraine loRE:n // PB name + bi) llard liad // PB game he) lg (e lj // PB Helge, helgen // levere lev'eV // PB _) lee (_ li: // PB the name Lee @@ -2569,11 +2738,15 @@ _harmo) nika =nik& // PB stressed o å) nd (eli n // PB åndelig ha) nd (el n // PB y) ndig ndi // PB - ke) nd (el nd // PB kendelse + ste) nd nd // PB stendynge, stendige + ke) nd (el n // PB kendelse + pe) nd (i nd // PB appendiks spe) nd (er nd // PB spendere + stæ) nd (i nd // PB anstændig svi) nd (el n // PB nd (om nd // PB ejendom nd (ød nd // PB stendød + fu) nd (er nd // PB fundere bi) nd (e n // PB forbindelse mi) nd (e n // PB mindelund u) nde (l n // PB silent de - misundelig @@ -2585,6 +2758,7 @@ _harmo) nika =nik& // PB stressed o nødve) nd (ig nd // PB vi) nd (u nd // PB vindue i) nd (oki nd // PB Indokina + i) nd (u nd // PB industri evi) nde (li n@ // PB evindelig y) nd (el n // PB begyndelse ba) nd (el n // PB forbandelse @@ -2620,6 +2794,7 @@ subtrahe) nd nd i) nd (eks nd i) nd (i nd // PB Indien, individ, indianer ti) nd (in n // PB tinding + bi) nd (in n // PB forbinding vi) nd (in n // PB udvinding i) nd (imellem n // exception i) nd (erl+ n // PB inderlig @@ -2628,6 +2803,7 @@ subtrahe) nd nd .group ng ng (_ N // general rule - ting, ring A) ng (e N // general rule - mange, penge + ng (evær ng // PB maskingevær i) ngeni (ø nSin // PB ingeniør eva) ng (el ng // PB evangelie allo) ng (e NS // PB @@ -2640,7 +2816,7 @@ subtrahe) nd nd ora) nge Nsj3 // PB orange ng (a ng i) ng (s N - fi) nger =NV + fi) nger NV _fi) ng (ere ng // PB fingeret fi) ng (eren+ N // PB fi) ng (re =N @@ -2673,11 +2849,16 @@ elektr) o (de 'o oo u: //PB English words like 'pool' h) ood u:d // PB Robin Hood + _) o' ou' // PB for Irish names - O'Grady + s) outh aus // PB South Pacific r) o (bin V // PB k) oor (d oV:? // PB koordinat _biot) o (p 'o // PB stressed _isot) o (p 'o // PB stressed o (L06 V // PN op, opdrage, obstruere + f) o (b o // PB fobi +_antil) o (pe 'o // PB stressed + o (bliga o // PB obligation o (pi o // PB opium _t) o (bak o' // PB tobak vide) o o // PB videobånd @@ -2687,7 +2868,10 @@ elektr) o (de 'o br) occ (oli Vk // PB helik) o (pt 'V // PB stressed - helikopter p) o (pu o // PB populær - p) o (t V // PB potte + p) o (tt V // PB potte + _dep) o (t 'o // PB + dep) o (t o // PB + _) oil (_ V:il/2 // PB d) o (nald V // PB name p) o (tag o // PB potage o (per o // PB opera @@ -2711,6 +2895,7 @@ elektr) o (de 'o k) og (t Vg // PB hvalr) o (s V // PB _eur) o (pa 'o // PB stressed +_eskim) o 'o // PB stressed dr) o (p V // PB droppe r) o (nt V // PB front er) o (p V // PB herop @@ -2725,12 +2910,13 @@ elektr) o (de 'o kont) o (r 'o // PB kontor - stressed korrid) o (r 'o // PB labrad) o (r 'V // PB + don) or V // PB mete) o (r 'o // PB matad) o (r 'o // PN sam) o (a 'o // PB katastr) o (fe 'o: // PB katastrofe lit) o (te 'o: // PB stressed - en) o (rm 'V // PB stressed + en) o (rm+ 'V // PB stressed abn) o (rm 'V // PB stressed def) o (rm 'V // PB stressed klorof) o (rm 'V // PB stressed @@ -2754,6 +2940,7 @@ _horis) o (n 'V // PB horisont kan) o (n o // PB not stressed after a syllable o (dds V: // PB odds o (sse V // PB tosse, nosse + fr) o (sset o // PB m) o (sset o // PB j) o (b V // PB job mon) o (k 'V // PB monokel - stressed @@ -2788,6 +2975,7 @@ _horis) o (n 'V // PB horisont o (mf V // PB omformulere _m) o (rt V // PB mortadel o (k V // PB okker, lok + prot) o o // PB protokol kr) o (k o // PB krokus v) o (ke o // PB provokere r) o (ke o // PB neurokemi @@ -2799,6 +2987,8 @@ _horis) o (n 'V // PB horisont o (rk V // PB orke orkester f) o (s V // PB fosfat g) o (dt V // PB godt, godte + g) o (ng V // PB + lag) o (s V // PB Lagos k) or (p V: // PB korps k) or (pi or // PB korpige k) o (rre V // PB korrekt @@ -2823,12 +3013,14 @@ _horis) o (n 'V // PB horisont b) o (ll V // PB bolle l) ov (e+ ou // PB love l) ondon VndVn // PB London + bl) ond Vnd //PB blondine, blonde od_ VD // PB - od, vod, skod odd (A VD // PB - odder - only this word k) ors V:s // PB kors, korsage c) o (rs V // PB corsage k) o (lL06 V // PB kolbe k) o (gl V // PB kogle + _d) o (n_ V // PB don juan bistr) o 'o // PB stressed o in 'bistro' er) o (b 'o // PB erobre - stressed o _er) o (t 'o // PB erot - stressed o @@ -2853,7 +3045,8 @@ _metad) o (n 'o PB stressed tr) o (po o // PB antropolog tr) o (pi o // PB tropisk tr) o (pe o // PB troperne - t) or V // PB faktor + t) or (_ V // PB faktor + t) or (sd V // PB torsdag t) or (n or // PB t) or (ny V // PB tornyster t) or (e o // PB faktorer @@ -2864,6 +3057,7 @@ _metad) o (n 'o PB stressed st) o (r+ o // PB stor p) o (r O // PB porno _m) o (C o // PB m + o + consonant: mor, mord, + m) o (bi o // PB mobil m) ontana Vnt'&n& // PB m) o (ms V // PB m) o (kk V // PB mokke, mokka @@ -2890,14 +3084,21 @@ _metad) o (n 'o PB stressed oklahoma okl&h'om& // PB c) ogn (ac VN // PB b) o (m o // PB bombe + b) o (mbay V // PB + d) o (m V // PB domstol, ungdom L11) o (m V // PB gommen, brudgom, kom, velkommen + k) o (mmo o // PB kommode + komm) o (de 'o // PB stressed k) o (mi o // PB komiker L11) o (ma o // PB koma, narkoman L11) o (mman o // PB kommando p) o (m V // PB pomp Xl) o (m V // PB lom, lomme, blomst pl) o (m o // PB exception from the rule above (Xl) o (m) - plombe - o (m V // PB om, ensom VERY BROAD + o (m_ V // PB alderdom VERY BROAD + _) o (mC V // PB omgang + s) o (m V // PB langsomt, ensom + o (mm V // PB ensomme VERY BROAD kr) o (m o // PB krom o (mi o // PB sodomi f) o (m o // PB nymfoman @@ -2906,6 +3107,7 @@ _metad) o (n 'o PB stressed b) o (mu V // PB bomuld n) o (ss V // PB nosse l) o (s V // PB los + o (se+ o // PB glose, pose l) o (t V // PB lotteri l) o (so o // PB filosofi pl) o (s o // PB eksplosion @@ -2914,6 +3116,7 @@ _metad) o (n 'o PB stressed kol) o (st o // PB kolostomi kol) o (ssa o // PB kolossal k) o (nC V // PB konfirmand, konfekt, konkurrence + c) o (ngo V // PB k) o (ne o // PB kone k) o (pi o // PB kopimaskine _huk) o (mme 'V // PB hukommelse - stressed @@ -2934,7 +3137,9 @@ _metad) o (n 'o PB stressed kok) o (s o // PB kokosnød k) o (st o // PB kost (broom) Problem with kost = food k) o (ste V // PB verb - koste = brooms will be mispronounced + k) o (st_og_logi V // PB board and lodging k) o (stbar V // PB +helsek) o (st V // PB bek) o (st V // OB bekostning frok) o (st V // PB omk) o (st V // PB omkostninger @@ -2951,8 +3156,9 @@ _black) out 'awd // PB blackout _knock) out 'awd // PB knockout _time) out 'awd // PB timeout _work) out 'awd // PB workout -_astron) out awd // PM - ohio ouh'ajo +_astron) out awd // PB + ohio ouh'ajo // PB + d) oug Vg // PB Douglas l) ou u // PB jalousi b) ourbon W:b@n // PB bourbon whisky ough Vf // PB tough, rough - only 2 words @@ -2971,9 +3177,11 @@ _filos) o (fisk 'o //PB mem) oire o'A: // PB memoire(r) aprop) o (s 'o // PB r) oastbeef Ousdbif // PB roastbeef + illin) ois V:j // PB // PB final -ol words in da_list - stressed o &) ol ($p_alt+ 'ol // parabol + mong) oliet ol'i@D // PB &s) ol ($p_alt+ 'Vl // konsol &h) ol ($p_alt+ 'Vl // alkohol &h) ol (i$p_alt+ 'ol // alkoholisk @@ -2981,11 +3189,13 @@ _filos) o (fisk 'o //PB &t) ol ($p_alt+ 'Vl // chatol &nt) ol ($p_alt+ 'ol // mentol &tr) ol ($p_alt 'Vl // kontrol + &tr) ol (len$p_alt 'V // kontrollen &tr) ol (e$p_alt 'ol // petroleum &tr) ol (l$p_alt 'o // kontrollere &st) ol (+$p_alt 'ol // pistol L08) o (l o: // PB skole, spole + p) o (lit o // PB udenrigspolitik L08) o (lt V // PB stolt L08) o (lp V // PB stolpe L11) o (ld V // PB kold, gold @@ -3015,6 +3225,7 @@ _filos) o (fisk 'o //PB _h) o (t_ V // PB or (l O: // PB orlov oscar VskA // PB + oxford VgsfV:d // PB .group on @@ -3073,6 +3284,7 @@ _maked) on 'on // PB makedoner rapp) or (t 'V: // PB rapport f) or (t V:? // PB fort m) or (f V: // PB morfar + m) or (m V: // PB mormor, mormon sp) or (t V:? // PB sport s) or (t or // PB sort st) or (t or // PB stort @@ -3118,9 +3330,11 @@ _success) or =V hv) ord (an Vrd // PB hvordan m) ord (A ord // PB morder m) ord (et oR // PB mordet + f) ord (+ V:d // PB Fordbil f) ord (æ Vd' // PB fordærve f) ord (ø Vd' // PB fordømme ord (en+ Vrd // PB orden, ordensmagt + ord (ene+ oR // PB ordene t) ord (en ord // PB j) ord (en oV // PB fjorden jorden ord (entlig+ 'Vrd // PB overordentlig - stressed @@ -3137,6 +3351,7 @@ _success) or =V ordrup ordr0b // PB Ordrup - Danish town C) ore (_ o:V // PB more, store m) orel or'&#l // PB morel + _) orleans Vrl'i:ns // PB New Orleans // PB stress on previous syllable - '-tor_' nouns in da_list &t) or ($p_alt ==V // karburator, rollator, multiplikator @@ -3152,7 +3367,7 @@ _success) or =V _f) or (a_ 'V // PB fora (plur. of 'forum') _f) or (an_ 'V // PB foran _f) or (ankørende 'V // PB forankørende - _f) or (annævnt 'V // PB forannævnt + _f) or (annævnt'V // PB forannævnt _f) or (ansat 'V // PB foransat _f) or (anstille 'V // PB foranstillet _f) or (anstående 'V // PB foranstående @@ -3386,9 +3601,11 @@ _success) or =V // &) pp b _) på (P2 p'V // PB prefix - påtage, påmontere _) på (ske p'O // PB not a prefix - påske + _) på (lide pV // PB pålidelig &) p (_ p // PB hjælp p (syk // psykolog [s,ykol'o] sym) p (tom // PB silent p + cam) pb (el b // silent p - Campbell pipeline pajplajn // PB pitchpine peTSpa:jn // pb praline pRAlin'e // PB @@ -3399,6 +3616,8 @@ _success) or =V _) passager p&s&sj'er // PB passager peanut pi:nVd // PB pseu sWw // PB pseudo + posthum pOsth'um // PB + _) pete (_ pi:t // PB name .group ph @@ -3424,6 +3643,8 @@ _success) or =V rioja ri'Vk& // PB wine ramirez _^_ES // PB name reece ri:s // PB name + roger rVdZV // PB + resolution REsoluS'on // PB r (K r // not followed by a vowel hve) r r // PB hver b) r r // bror @@ -3432,7 +3653,7 @@ _success) or =V se) r (_ r // PB ser he) r (_ r // PB her e) re (s 3 // PB jeres, deres - @) re (_ V // PB "re" ending a word - være, sejre + @) re (_ rV // PB "re" ending a word - være, sejre _ent) re (_ R'e // PB entre bu) rd (eK rd A) r (er_N // silent r - skærer @@ -3462,6 +3683,7 @@ transpo) r (t //PB transport s s ss s sc s // PB scene + sc (or sk // PB score me) sc (al sk // PB sco (t skV // PB Scotland Yard // PB/JD s suffix - $alt words in da_list @@ -3513,10 +3735,13 @@ franci) sc (o sk // PB Francisco s (j s sch S // PB changed from [s(ch] - gullasch sh (erif S // PB - schweiz svajts + sherman SW:m&n // PB Sherman kampvogn + schweiz svajts // PB sioux su: // PB red indian al) s (ace 's // PB Alsace (French region) _) sion si:Vn // PB Sion, Sions kirke + _) substitution substituS'on // PB + substitution substituSon // PB shine sjajn@ // PB saloon sal'u:n // PB skyline skajlajn // PB @@ -3532,8 +3757,10 @@ franci) sc (o sk // PB Francisco sydney sidni // PB shakespeare SEiksbi:r // PB squash sgwVS // PB + seamus SEim@s // PB name shor (t SV // PB shorts _) stone sdoun // PB namde - Stone + _) sir (_ sW: // PB Sir Arthur er_) sig (_til saj // PB avoid [si] - glæder sig [saj] til et_) sig (_til saj // PB avoid [si] - glædet sig [saj] til e_) sig (_til saj // PB avoid [si] - glæde sig [saj] til @@ -3550,6 +3777,7 @@ franci) sc (o sk // PB Francisco for_) sig (_ saj // PB se noget for sig fra_) sig (_ saj // PB slå fra sig stå_) sig (_ saj // PB stå sig godt med + _) sig (_med saj // PB slå_) sig (_ saj // PB slår_) sig (_ saj // PB _) sig (_alene saj // PB klare sig alene @@ -3564,6 +3792,7 @@ hygge_) sig (_ saj // PB _) sig (_af_ saj // PB tage sig af ak_) sig (_ saj // PB drak sig fuld gik_) sig (_ saj // PB gik sig en tur + red_) sig (_ saj // PB red sig en tur s) s // PB use [sV] instead pf [sO] @@ -3596,6 +3825,8 @@ kompromi) s ' // PB stress added tt t _) t (_ te: // the letter T _) t (_shirt t'i:% // PB T-shirt + tombs tu:ms // PB Tombstone + terry teri // PB e) tt (id t|t // PB ettiden e) tt (al t|t // PB ettal le) tt (e t // PB slette @@ -3709,20 +3940,23 @@ meningi) ti (s =ti raki) ti (s =ti lek) ti S ak) ti (e S // PB aktie - ti (on+ S // bastion, station + &) ti (on+ S // station, dispotion + bas) ti (on // PB ti (øs+ S // tendentiøs pa) ti (ent S // PB patient kvo) ti (en S // PB kvotient r) til tel // PP hertil, dertil _poli) ti (k t'i // PB politik + _poli) ti (ker =ti // PB + .group u u u // PB remove u in order to make the -ig rule (group i) work with u + -ig list words // e.g. u+erværdig [uErv'Erdi] will keep its stress on the next to last syllable. _) u (A@@+P1 'u - _) u (C@@+P1 u' + _) u (C@@+P1 'u // PB exceptions - u isn't a prefix _) u (nd+ O // underfuld, undtage u (gle+ u // ugle @@ -3740,6 +3974,9 @@ meningi) ti (s =ti _) u (ds+ u // udsætte u (de u // PB uden, udenfor +// PB nouns with final -um in da_list - stress on previous syllable + &) um ($p_alt =Om // PB jubilæum + // PB stressed -ure - $alt words (French) in da_list pronounced [y:V] &) ure (++$p_alt 'y:V // frisure &out) ure ($p_alt 'y:r // couture - without [V] because fashion people talk like that @@ -3791,6 +4028,7 @@ meningi) ti (s =ti u (nK u u (nL08 O // PB kunst br) unch VnS // PB + b) u (ffer V // PB buffer ketch) u (p V // PB s) ui (te wi // PB st) u (nt V // PB stuntman @@ -3799,7 +4037,8 @@ meningi) ti (s =ti u (mK O _) usa (_ u:|es|'& // PB _) usa's (_ u:|es|'&s // PB - s) ur (fe 3: // PB surfe, surfer + s) ur (fe 3: // PB surfe + s) urfer '3:fV // PB surfer s) ur (fb 3: // PB surfbræt u (nd O // PB underligt, undtage p) u (nd u // PB pund @@ -3808,7 +4047,11 @@ meningi) ti (s =ti _abs) u (rd 'u // PB stressed _fig) u (r 'u // PB stressed _harp) u (n 'u // PB stressed + _fid) u (s 'u // PB stressed + col) u (mb 'O // PB Columbia, columbusæg + calc) u (tta 'V // PB l) u (f 0 // PB luft + bl) u (fæ u // PB blufærdig // l) u (gt 0 // PB // b) u (gt 0 // PB // fr) u (gt 0 // PB @@ -3853,6 +4096,7 @@ centrif) u (g 'u // PB stressed k) u (l O // PB kulmine hovedk) u (ls u // PB k) u (ld u // PB kulde + k) u (ldio O // PB kuldioxid omk) u (ld 'u // PB imp) u (ls 'u // PB stressed k) u (le u // PB kule @@ -3868,6 +4112,7 @@ hovedk) u (ls u // PB m) u (nt 0 // PB munter sn) u (L06 0 // PB snup s) u (L06 0 // PB suppe + s) u (bs u // PB substitut u (nk 0 // PB sunket h) u (n u // PB hunkøn s) u (per u // PB @@ -3892,6 +4137,7 @@ hovedk) u (ls u // PB b) u (k O // PB buk g) ui (de ai g) u (st O + g) u (f O // PB guffe g) ulv Ol // PB gulv - silent v l) u (k O L09) u (k 0 // PB O? changed to 0 - smukkere @@ -3905,8 +4151,8 @@ hovedk) u (ls u // PB r) u (m O s) u (cc y b) u (dget y - b) u (reau y - men) u y + b) ureau yR'o + _men) u 'y parf) u (me 'y // PB proced) u (re y proven) u y @@ -3923,16 +4169,18 @@ proven) u y g) ueri (lla ER'e // PB guerilla b) u (nker 0 // PB bunker - minor problem: golf expression: [BVnkV] br) u (x y // PB Bruxelles + b) u (ddy V // PB + g) uez =es // PB Rodriguez united jun'ajted .group v v v vv v -// o) v (A // PB love - handled by group o L09o) v (A v // OV nova renovation pro) v (ence v // PB Provence in France i) v (l u // PB tvivl _) von (_ fVn // PB von in German names + virginia v@dZ'iNj& // PB a) v (n w // PB [u] changed to [w:] navn, navnebroder le) v (et // PB blevet, levet la) v (A // PB no v - laver @@ -3971,7 +4219,7 @@ proven) u y wisconsin wesk'Vnsen wright _^_EN // PB willie wili // PB - _) wild wAjld + _) wild wAjld // PB .group x @@ -3987,7 +4235,10 @@ proven) u y r) yg (_ @k // PB ryg (noun "back") - problem with "ryg" (verb) = "smoke" r) yg (_en y // PB "ryg en cigar" + r) yg (ning y // PB silent g r) yg (C '@k, // PB rygrad + tr) yg (le Y // PB trygle + str) yg yj // PB strygetøj r) y (s W // PB ryste fr) y (s y // PB fryse kr) y (st Y // PB kryster @@ -3999,7 +4250,8 @@ proven) u y l) y (gt+ W? // PB lygte, flygte l) y (k W // PB ulykke sm) y (k W // PB smykke - lib) y i // // PB Libyen + lib) y i // PB Libyen + _) yves i:v // PB Yves (French name) l) y (st @ // PB problem with lyst = blond, light coloured l) y (stre Y // PB lystre _l) y (ste_ y // PB @@ -4008,7 +4260,8 @@ proven) u y L08) y (t W // PB spyt, skyts sk) y (ti y // PB Skytien, skytisk sk) y (ter y // PB skyter - sk) y (s y // PB skyskraber + s) yv yw // PB + sk) y (sk y // PB skyskraber st) y (k W // PB stykke s) y (n_ y // PB syn, fjernsyn s) y (ne y // PB fjernsynet @@ -4025,6 +4278,8 @@ _molek) y (le 'y // PB stressed kn) y (tt W: // PB tilknytte kn) y (t y // PB knyt k) y (s W // PB kys + sk) y (s y // PB skysovs, skyskraber + k) y (sk y // PB kyskhed k) yss Ws // PB kysse k) y (se y: // PB kyse y (nK W // PB changed from Y to W - synge, ynde @@ -4042,6 +4297,7 @@ _molek) y (le 'y // PB stressed afl) y (tt y // PB whisk) y i // PB whisky cit) y i // PB + yatzy j&tsi // PB y (onn j // PB bayonne, mayonnaise y (mK Y k) y (mK W // PB bekymring @@ -4049,8 +4305,14 @@ _molek) y (le 'y // PB stressed yacht jagd // PB lystyacht york JV:k // PB yankee j&nki // PB + yale jEjl/2 // PB + cl) yde ajd // PB + d) y (lan i // PB name + obb) y i // PB hobby, lobby +brookl) y (n i // PB bill) y i // PB luc) y i // PB + fift) y i // PB ken) y (a j // PB kan) y (le 'Y // PB stressed _kab) y (s 'Y // PB stressed @@ -4079,7 +4341,7 @@ _molek) y (le 'y // PB stressed æ (bt &# // PB dræbt sl) æ (L06 E // PB slæbt tr) æ (d+ E // PB træde - tr) æ (n &# // PB trænge + tr) æ (ng &# // PB trænge tr) æ (ne E // PB træne dr) æ (n E // PB dræne kr) æ (f &# // PB kræfter @@ -4098,13 +4360,16 @@ _molek) y (le 'y // PB stressed dr) æ (gtig &# // PB nederdrægtig r) æ (k &# // PB skrækkelig br) æ (nd &# // PB brænde + spr) æ (l &# PB spræl pr) æ (st & // PB præst - tr) æ (t & // PB træt + tr) æ (t &# // PB træt tr) æ (f &# // PB træffe tr) æ (k &# // PB trække fr) æ (k &# // PB gr) æ (n & // PB grænse + _migr) æ (ne '& // PB stressed gr) æ (s &# // PB græs + spr) æ (ng &# // PB sprængstof gr) æ (d &# // PB græde f) æ (re 'E: // PB affære, atmosfære, sfære gev) æ (r 'E // PB gevær @@ -4167,6 +4432,7 @@ majest) æ (t 'E // PB stressed æ øj+ V:j // PB changet from [Oj] velg) ø (renhed '@ // PB stressed ø im) ø (dekom 'W: // PB imødekomme + &) ø (st 'W // PB stressed - sydøst .group øs //PB (mostley French -eux/-euse) adjectives ending with -øs in da_list - stressed ø @@ -4186,6 +4452,7 @@ majest) æ (t 'E // PB stressed æ r) å (dg+ V // PB rådgive ård O:? // PB gårdmand, bondegård - silent d ården O@n // PB gården + h) årde V: // PB p) å (ske O // PB påske s) å O // PB så s) å (vel V // PB @@ -4206,13 +4473,17 @@ uimodst) å (elig 'O // PB stressed p) å (s V // PB påstand sl) å (s V // PB slås sm) å (C@ V // PB småkage, småfolk + m) å (l++ O // meningsmåling s) å (d V // PB sådan s) å (t V // PB undersåt + skr) å (p V // PB skråplan stj) å V // PB stjålet L08r) å (t V // PB skråt m) å (t V // PB måtte + v) å (dt V // PB _p) å V // PB påmontere t) å (lmo V // PB tålmodig + d) å (dyr V // PB dådyr _p) åse Vse // PB påse r) å (t V // PB gråt r) å (bt V // PB råbte @@ -4220,15 +4491,13 @@ uimodst) å (elig 'O // PB stressed åre V3 // PB tåre å (lti V // PB måltid - .group ' 's (_S2 s - 'en (_S3 @n - 'er (_S3 %V - 'erne (_S5 %Vn@ - 'ernes (_S6 %Vn@s - 'et (_S3 @D - + 'en (_S3 @n // PB bh'en + 'er (_S3 %V // PB 60'er + 'erne (_S5 %Vn@ // PB 60'erne + 'ernes (_S6 %Vn@s // PB 60'ernes + 'et (_S3 @D // PB tv'et .group $ dVlV // PB changed from [dVlar] diff --git a/dictsource/dict_phonemes b/dictsource/dict_phonemes index 02a713a4..be10a135 100644 --- a/dictsource/dict_phonemes +++ b/dictsource/dict_phonemes @@ -1,7 +1,7 @@ Phonemes which are used in the *_rules and *_list files -Dictionary af_dict 2010-05-24 +Dictionary af_dict 2010-08-03 & &: 3: @ @- @L @U a A: aI AI aU A~ E e: e@ @@ -53,7 +53,7 @@ p r s S t T v w x z -Dictionary da_dict 2010-07-29 +Dictionary da_dict 2010-08-11 & &# 0 3 @ @- a A e E i o O u V W @@ -65,7 +65,7 @@ l/2 l/3 m n N p r R s S t T tS v w z -Dictionary hu_dict 2010-08-02 +Dictionary hu_dict 2010-08-13 A a: E e: i i: o o: u u: Y y y: Y: @@ -100,7 +100,7 @@ n^ p Q r R s s; t T ts v x z z; -Dictionary en_dict 2010-07-30 +Dictionary en_dict 2010-08-11 0 3 3: @ @- @2 @5 @L a a# A: A@ aa aI aI@ aU @@ -150,7 +150,7 @@ l m n N p r s S s2 t v w Z -Dictionary fr_dict 2010-07-30 +Dictionary fr_dict 2010-08-06 @ @- a A~ e E E: E~ i I o O O~ u u: w @@ -200,7 +200,7 @@ q r r. s S s. t T t. th th. v w x z -Dictionary ta_dict 2010-07-30 +Dictionary ta_dict 2010-08-12 a a: aI aU e E e: i I i: o o: u U u2 u: @@ -325,7 +325,7 @@ k l m n p R s S t tS v w x -Dictionary nl_dict 2010-07-27 +Dictionary nl_dict 2010-08-13 8 @ @- A a: A~ E e: EI eU i I O O: o: u @@ -366,10 +366,10 @@ a E E# E~ i O O~ u y : ; b c C d d; dZ -dz f g h j k l m -n N n^ p r R s S -s; S; t t; tS ts tS; v -w x z Z Z; +dz dz; f g h j k l +m n N n^ p r R s +S s; S; t t; tS ts tS; +ts; v w x z Z Z; Dictionary pt_dict 2010-07-03 @@ -611,10 +611,11 @@ Dictionary bg_dict 2010-05-19 @ a e i o u -; b C d d; dZ dz f -g j k l L l^ m n -n^ p r s S s; t t; -tS ts v x z Z z; +; b C d d; dZ dz dz; +f g j k l L l^ m +n n^ p r s S s; t +t; tS ts ts; v x z Z +z; Dictionary nso_dict 2010-05-26 @@ -638,6 +639,16 @@ m n N p r s S t tS v z Z +Dictionary ak_dict 2010-08-11 + +a e E i o O u + +: b C d dZ dZ; f g +h j k l m n N n^ +p R s t tS; v w z +z; + + Dictionary az_dict 2010-07-27 & @ a e E i o u diff --git a/dictsource/en_list b/dictsource/en_list index d6928021..0a535012 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -291,16 +291,16 @@ _17 s'Ev@nti:n ?7 _17 s'@v@nti:n _18 'eIti:n _19 n'aInti:n -_2X tw'EntI -_3X T'3:tI -?5 _3X T'IRtI -_4X f'o@tI -_5X f'IftI -_6X s'IkstI -_7X s'Ev@ntI -?7 _7X s'@v@ntI -_8X 'eItI -_9X n'aIntI +_2X tw'Enti +_3X T'3:ti +?5 _3X T'IRti +_4X f'o@ti +_5X f'Ifti +_6X s'Iksti +_7X s'Ev@nti +?7 _7X s'@v@nti +_8X 'eIti +_9X n'aInti _0C h'Vndr@d _0M1 T'aUz@nd _0M2 m'Ili@n @@ -2648,6 +2648,7 @@ Donaghy d0n'hi: Doris d0rIs Dorothy dO@r@Ti Dougall du:g@L +Duncan dVnk@n Dvina d@vi:n@ Dylan dIl@n Edith i:dIT @@ -2784,7 +2785,7 @@ Theresa t@ri:z@ Therese t@ri:z Thomas t0m@s Tina ti:n@ -Tracy treIsI +Tracy treIsi Tricia trIS@ Vanessa va#nEs@ Wally w0lI diff --git a/dictsource/en_rules b/dictsource/en_rules index 069a8d21..96449c09 100644 --- a/dictsource/en_rules +++ b/dictsource/en_rules @@ -253,7 +253,7 @@ accu (ra akjU accus (A a#kju:z ace (_ eIs - sp) ac (e eIs + sp) ac (e# eIs _r) ac (e eIs _) ac (e a#s _r) ac (is eIs @@ -2815,7 +2815,7 @@ ie (ve i: s) ie (ve I ie (z i: - _t) ie aI + _t) ie (B aI .group ig am) ig (a_ i:g diff --git a/dictsource/fr_rules b/dictsource/fr_rules index d321c939..e9300409 100755 --- a/dictsource/fr_rules +++ b/dictsource/fr_rules @@ -27,7 +27,7 @@ // http://www.fluxnic.net/cicero // // Rules are now maintained by Michel Such -// Last update: 2010-07-30 Michel Such +// Last update: 2010-08-01 Michel Such // // Letter classes: @@ -70,6 +70,7 @@ // For english words ending "side" .L14 be in up ut +.L15 c f g h l s @@ -153,6 +154,7 @@ _C) aud (_ od // Maud // group b: English section back _^_en +_) be (L15A _^_en board _^_en // board, keyboard box (_ _^_en // box, inbox, outbox bugg _^_en // debugger @@ -1462,7 +1464,7 @@ C) ult (_ _^_en _C) y (_ _^_en C) y (e_ _^_en %C) y (_ _^_en -//@CAC) y (_ _^_en +@CeC) y (_ _^_en nC) y (_ _^_en yze _^_en diff --git a/dictsource/hu_list b/dictsource/hu_list index 5e57274a..d9ee38a6 100755 --- a/dictsource/hu_list +++ b/dictsource/hu_list @@ -156,6 +156,8 @@ _#-ika A _#-ikai Ai _#-éhez e:hEz _#-ához a:hoz +_#-ikének e:nEk +_#-ikának a:nAk (1-e) elseje $text $alt2 (1-én) elsején $text $alt2 (1-jén) elsején $text $alt2 @@ -233,6 +235,7 @@ _#-ához a:hoz (00-tól) nul:Anul:a:to:l (0-n) nul:a:n (00-n) nul:Anul:a:n +(0-ról) nul:a:R2o:l (1-gyet) EJ:Et (1-gyes) EJ:ES (2-őt) kEt:Y:t @@ -263,6 +266,7 @@ _#-ához a:hoz (5-től) Yt:Y:l (5-től) YtYdike:tY:l $alt2 (5-t) YtYt +(5-ször) Yts:YR2 (6-al) hAt:Al (6-tal) hAt:Al (6-tól) hAt:o:l @@ -282,7 +286,7 @@ _10e tiz _20e hus (10-szer) ti:s:ER2 (10-szeres) ti:s:ER2ES - +(10-t) tizEt //special number exceptions @@ -362,6 +366,9 @@ nyári $alt téli $alt végén $alt elején $alt +folyamán $alt +úton $alt +út $alt // accent names _lig ligAtu:R2A @@ -595,7 +602,7 @@ vel $unstressend ellen $unstressend // against //elé $u // before -óta $alt $alt3 // since. Not a bug both $alt $alt3 attribute, +óta $unstressend $alt $alt3 // since. Not a bug both $alt $alt3 attribute, //because if only a year is present, need spokening normal number, not //ordinal number. For example: //2004. óta meaning since 2004 and need spokening normal number. @@ -865,7 +872,7 @@ látszik $unstressend látszott $unstressend látszanak $unstressend látszotok $unstressend -körül $unstressend $alt3 +körül $unstressend $alt $alt3 dőlt $unstressend vér $unstressend sót $unstressend @@ -1052,7 +1059,125 @@ ház $unstressend állnak $unstressend idején $unstressend néznek $unstressend -érezte $unstressend +sért $unstressend +adózású $unstressend +kötelezni $unstressend +lehetőség $unstressend +mondtuk $unstressend +kellene $unstressend +szerte $unstressend +hozta $unstressend +kezdte $unstressend +lökte $unstressend +benne $unstressend +fenn $unstressend +elő $unstressend +javasolták $unstressend +kezdjen $unstressend +látta $unstressend +látták $unstressend +nyomát $unstressend +került $unstressend +várták $unstressend +közbe $unstressend +látott $unstressend +tartanak $unstressend +ejt $unstressend +önnek $unstressend +álljon $unstressend +szálljon $unstressend +üljön $unstressend +jónak $unstressend +hisz $unstressend +elől $unstressend +vágy $unstressend +vitték $unstressend +küldött $unstressend +mentén $unstressend +venni $unstressend +múlik $unstressend +indít $unstressend +nála $unstressend +vizsgálata $unstressend +vizsgálatot $unstressend +indítottak $unstressend +vizsgált $unstressend +javult $unstressend +része $unstressend +írni $unstressend +téren $unstressend +terén $unstressend +menni $unstressend +fogja $unstressend +teszik $unstressend +tömni $unstressend +nyel $unstressend +érzi $unstressend +annak $unstressend +dolog $unstressend +számít $unstressend +aránya $unstressend +helyzetük $unstressend +kifogásolták $unstressend +kifogásolta $unstressend +fogalmaz $unstressend +szóló $unstressend +gyártott $unstressend +írta $unstressend +rúgták $unstressend +esett $unstressend +marad $unstressend +tulajdonú $unstressend +KFT $unstressend +folytatja $unstressend +államokban $unstressend +című $unstressend +senkit $unstressend +abban $unstressend +tegyük $unstressend +szar $unstressend +gond $unstressend +megy $unstressend +ebből $unstressend +abból $unstressend +ebben $unstressend +mondom $unstressend +akar $unstressend +akarsz $unstressend +távra $unstressend +jog $unstressend +járunk $unstressend +szólni $unstressend +ró $unstressend +kérni $unstressend +építést $unstressend +adni $unstressend +részén $unstressend +érni $unstressend +lap $unstressend +írja $unstressend +írtak $unstressend +stressz $unstressend +nyújtózni $unstressend +éve $unstressend +tartott $unstressend +attól $unstressend +utast $unstressend +szint $unstressend +minőségű $unstressend +beszélt $unstressend +kerületben $unstressend +gáz $unstressend +épült $unstressend +építésű $unstressend +együttes $unstressend +távon $unstressend +híg $unstressend +szőr $unstressend +diagnosztizálható $unstressend +működik $unstressend +hat $unstressend +mutatnak $unstressend // word pairs @@ -1074,10 +1199,10 @@ vannak $unstressend voltam $u // to be, past voltál $u -volt $u $alt3 +volt $unstressend $alt3 voltunk $u voltatok $u -voltak $u +voltak $unstressend leszek $u // to be, future leszel $u @@ -1296,4 +1421,4 @@ CD-m) cédém (hu-n) hun (USA-ban) usában (USA-ba) usába - +(pc-n) pécén diff --git a/dictsource/hu_rules b/dictsource/hu_rules index a041be4d..34680a40 100644 --- a/dictsource/hu_rules +++ b/dictsource/hu_rules @@ -45,6 +45,8 @@ tö) bb (féle b jo) bbr (a bR2 tö) bbr (e bR2 + kise) bb (ség b + .group c c ts @@ -220,6 +222,7 @@ menetren) dsz (erű d|s cselé) ds (ég tS: föl) d (szegély d stran) d (szezon d + _hol) d (sarló d .group dz fogó) dz (kod ts @@ -332,6 +335,7 @@ ritkasá) g (gyűjt g se) gg (be g pro) g (gyak g se) ggr (e gR2 +arcüre) g (gyulladás g .group gy gy J @@ -425,6 +429,7 @@ tizene) gy (en J: huszone) gy (edik J: je) gy (ért J harmince) gy (edik J: + étvá) gy (javít J .group h h h @@ -863,6 +868,7 @@ kitöré) ssz (erű Ss hirdeté) ssz (erve Ss páncélo) ssz Ss hajtá) ssz (erű Ss + sorva) ssz (ák s: .group sz sz s @@ -1114,6 +1120,9 @@ művele) t (sáv t ö) t (jegyű t ha) t (jegyű t hé) t (jegyű t + zár) t (sorú t + skó) t (juhász t +szerete) t (szolgálat t .group ts ts (_S2 tS //general rule with word end of ts letters diff --git a/dictsource/nl_list b/dictsource/nl_list index c9b81c51..74851703 100644 --- a/dictsource/nl_list +++ b/dictsource/nl_list @@ -317,10 +317,12 @@ anker $alt badder $alt bagger $alt baker $alt +baster $alt beender $alt belemmer $alt beter $alt bibber $alt +bitter $alt bladder $alt blader $alt blaker $alt @@ -330,84 +332,296 @@ blunder $alt bolder $alt bolster $alt boter $alt +broeder $alt buffer $alt bulder $alt bulldozer $alt bumper $alt bunker $alt +charter $alt cijfer $alt +cluster $alt +computer kOmpj'ut@r $alt // ?? "$2 $alt" doesn't work +consuminder $alt +counter $alt +cover k8v@r $alt +dabber $alt +daver $alt +deemstar $alt +dender $alt +dobber $alt +dokter $alt donder $alt +donker $alt +dotter $alt +duister $alt dwater $alt +eergister $alt eier $alt +emmer $alt ender $alt +enter $alt +erger $alt +etter $alt filter $alt +fladder $alt +flakker $alt +flikker $alt +flipper $alt +flodder $alt +flonker $alt +flotter $alt +fluister $alt +foeter $alt +folder $alt +folter $alt +gabber $alt +gader $alt geester $alt gemoeder $alt +gibber $alt +gister $alt +glibber $alt +glimmer $alt +glinster $alt +glitter $alt +glunder $alt +halter $alt hamer $alt +hamster $alt +haper $alt +helder $alt +herinner $alt +herover $alt +hinder $alt hoender $alt +honger $alt +huiver $alt +hunker $alt +ijver $alt +ijzer $alt +imker $alt +inburger $alt +inkader $alt jakker $alt jammer $alt +joeker $alt +kader $alt +kaffer $alt +kalefater $alt kalver $alt +kamfer $alt kanker $alt +kaper $alt kaver $alt +keilder $alt +kenter $alt +keper $alt +kerker $alt +ketter $alt +keuter $alt +kicker $alt +kieper $alt kinder $alt kladder $alt +klapper $alt +klater $alt +klauter $alt +klaver $alt +kledder $alt +klepper $alt +kletter $alt +kleuter $alt +klieder $alt +klinker $alt klodder $alt +kluister $alt +knapper $alt +knetter $alt +kneuter $alt +knikker $alt +knipper $alt +knisper $alt +knister $alt koekeloer $alt +koester $alt +koeter $alt +koffer $alt +koker $alt +kolder $alt kommer $alt +koper $alt kuier $alt +kwetter $alt +labber $alt +lager $alt lammer $alt +laser $alt laster $alt +lauwer $alt lazer $alt lebber $alt leder $alt // gelederen leger $alt +lekker $alt +lemmer $alt +lepper $alt ler $alt letter $alt +leuter $alt lever $alt lieder $alt +lobber $alt +lodder $alt +lommer $alt +louter $alt lubber $alt +luier $alt +luimer $alt luister $alt +mager $alt +marmer $alt +meander $alt +meerder $alt +meester $alt +meier $alt +mekker $alt +mieter $alt +mijmer $alt +millimeter $alt +minder $alt modder $alt moeder $alt +moker $alt monster $alt +mopper $alt nader $alt +neder $alt +nuchter $alt nummer $alt +ober $alt +offer $alt +onder $alt +orber $alt ouder $alt +over $alt +palaver $alt pantser $alt +pauper $alt peiger $alt +peper $alt peuter $alt +pieker $alt +pieter $alt +pinkster $alt pleister $alt +pletter $alt +ploeter $alt +plunder $alt poeder $alt poeier $alt +poker $alt polder $alt +puber $alt +pulver $alt +purper $alt rader $alt raster $alt redder $alt ridder $alt +rooster $alt +rubber $alt +ruiter $alt runder $alt +sakker $alt +schamper $alt +schater $alt +schemer $alt +schetter $alt schilder $alt +schipper $alt +schitter $alt +schouder $alt +schutter $alt +sidder $alt +sjacher $alt +skeeler $alt +skelter $alt +slechter $alt slenter $alt +slidder $alt slinger $alt +slobber $alt +slodder $alt +sloeber $alt +sluier $alt +sluimer $alt +snater $alt snipper $alt +snotter $alt +snuister $alt +sober $alt sodemieter $alt +somber $alt +spetter $alt +spijker $alt splinter $alt sputter $alt +steiger $alt +stekker $alt +stotter $alt +stuiter $alt +stumper $alt +sudder $alt suiker $alt +supporter $alt +tater $alt +teder $alt +teister $alt +temper $alt +tetter $alt +teuter $alt timmer $alt tover $alt +treiter $alt +trompetter $alt +tuier $alt +tutter $alt +twitter $alt +uier $alt vinger $alt +vlieger $alt +vlinder $alt +vlotter $alt +voeder $alt volker $alt vorder $alt +waaier $alt wakker $alt +wapper $alt water $alt +wedijver $alt wegwijzer $alt +wester $alt +wijder $alt +wilder $alt +winter $alt +wipper $alt +woeker $alt wonder $alt +zeker $alt zever $alt +zilver $alt +zinder $alt +zolder $alt +zomer $alt zonder $alt zuiver $alt +zwabber $alt +zwakker $alt zwanger $alt + // words where -age is [a:Q@] not French ['a:Z@] drage $alt hedentendage $alt @@ -438,7 +652,6 @@ vrijage vre:j'a:Z@ aangrijpend $2 bourgondier burx'o:ndi:@r circuit sIrku'i -computer $2 contour ko:nt'ur ingewikkeld $3 ingrijpend $2 diff --git a/dictsource/nl_rules b/dictsource/nl_rules index 8f15ff27..947d5d23 100644 --- a/dictsource/nl_rules +++ b/dictsource/nl_rules @@ -116,6 +116,7 @@ _) ge (@P2 Q@ _) gee Qe: + gener (aal Q,e:n@r gelijk Q@lEIk _) geu QY: _) ge (ven Qe: @@ -147,7 +148,8 @@ ie (rd_ 'i @) ig (_S2d @x @) ige (_ @Q@ - _) in (gP2 'In + _) in (C@P2 'In +// _) in (gP2 'In io (nage iO @) isch (_ =is @) ische (_ =is@ @@ -178,6 +180,8 @@ m m mm m + _) mee (@P3 m'e: + .group n n n @@ -185,6 +189,8 @@ ng N nj n^ + _) na (C@@P2 n'a: + .group o o o: @@ -200,6 +206,9 @@ ou (rage u telef) oo (n 'o: + _) op (@@P2 'Op + _) open (@P4 'o:p@n + _) over (@P4 'o:v@r .group on @@ -226,6 +235,7 @@ _) onge (val OnQ@ + .group p p p pp p @@ -314,6 +324,8 @@ uw yU uw (_ yU + _) uit (@P3 'Wyt + .group v v v @@ -321,6 +333,7 @@ _) ver (@P3 v@r _) ver (sie_ vEr _) ver (der_ vEr + _) voort (@P5 v'O:rt .group w @@ -328,6 +341,8 @@ w (X w w (CK w + _) weg (@P3 v#'Ex + .group x x ks diff --git a/dictsource/ta_list b/dictsource/ta_list index e505473c..923d2b0a 100644 --- a/dictsource/ta_list +++ b/dictsource/ta_list @@ -186,7 +186,6 @@ tamil தமிழ் $text // exceptions பாபு $alt // initial ப as [b] -பகவதி $alt பானம் $alt பாணம் $alt பாறம் $alt diff --git a/dictsource/ta_rules b/dictsource/ta_rules index b7ebba59..e35be8a8 100644 --- a/dictsource/ta_rules +++ b/dictsource/ta_rules @@ -192,6 +192,7 @@ //sort அலை) க (டல kV சமையல்) க (ட் kV + _கால) க (ட்ட kV _கல்) க (ண்ட kV _நற்) க (தி gV வீண்) க (தை kV @@ -215,6 +216,7 @@ வீண்) க (ஷ்ட kV ம) க (ா H _தாலு) க (ா k + _வலை) க (ாப் k தொல்) க (ாப்பி k மூல) க (ாரண k அந்திம) க (ால k @@ -281,8 +283,6 @@ வி) க்ட (ோரியா kt. // victoria வி) க (்ரம k ஆ) க (்ரோஷ k - _கால) க (ட்ட kV - _வலை) க (ாப் k //endsort @@ -346,6 +346,7 @@ சீ (னிவாச sri: _) ச (ீன்_ s _ஈ) சு s + _) சு (லோக s கே) சு (வ s மே) சு (வ s வி) சு (வ s @@ -571,6 +572,7 @@ _) த (ுரதிர்ஷ்ட d _) த (ுராசை d _) த (ுரியோதனன d + _) த (ுரியோதனா d _) த (ுருவங் d _) த (ுருவத் d _) த (ுரை d @@ -622,6 +624,7 @@ _கீழ்) த (ட்ட tV _மேல்) த (ட்ட tV முட்டாள்) த (ன tV + _கௌ) த (மி tV _கீ) த (ா t _சீ) த (ா t _ல) த (ா t @@ -688,7 +691,6 @@ _பார்வ) த (ி t ச) த (்ரு t த) த (்ரூப t பா) த (்ரூம t - _கௌ) த (மி tV //endsort @@ -733,6 +735,7 @@ _பார்வ) த (ி t //sort + _) ப (கவதி bV _) ப (கவான bV _) ப (காசுர bV _) ப (கிரங்க bV @@ -754,6 +757,7 @@ _பார்வ) த (ி t _) ப (த்திரமா bV _) ப (ந்தங்கள bV _) ப (ந்தத் bV + _) ப (ந்தப் bV _) ப (ந்தம bV _) ப (ந்துக்கள bV _) ப (ந்துவ bV @@ -803,6 +807,7 @@ _பார்வ) த (ி t _) ப (ாகத b _) ப (ாகம b _) ப (ாக்கிய b + _) பாக்த (ாத ba:gd _) ப (ாங்க் b _) ப (ாசு b _) ப (ாசுர p @@ -954,6 +959,7 @@ _முகத்தின்_) ப (ாவ b வட) ப (குதி pV தென்) ப (குதி pV ப (க்கK pV + பரம) ப (க்த bV க) ப (ட bV கரம்) ப (ட pV ப (டி pV @@ -1033,6 +1039,8 @@ _முகத்தின்_) ப (ாவ b வீண்) ப (ேச்ச p ப (ேரில்_ p ப (ேர்_ p + வன்) ப (ொருள் p + மென்) ப (ொருள் p வீண்) ப (ொழுத p ப (ோக_ p ப (ோகவில்லை_ p @@ -1070,8 +1078,6 @@ _முகத்தின்_) ப (ாவ b மன) ப்பி (ரமை bb துர்) ப்ப (ோதனை bb கம்) ப்யூட (ர pjU:t.V - மென்) ப (ொருள் p - வன்) ப (ொருள் p //endsort // If ப+ appearing in the middle of a word is followed by ட+ @@ -1315,6 +1321,7 @@ _முகத்தின்_) ப (ாவ b .group இ //sort இ i + _) இ (யேச _) இ (ரகசிய // silent _) இ (ரசாயன _) இ (ரத்த @@ -1355,10 +1362,14 @@ _முகத்தின்_) ப (ாவ b ஐ aI ஒ o + ஒள (வை aU // bad scanning + ஒள (ஷத aU + ஒள (டத aU ஓ o: ஔ aU + ஔி ol.i // for bad scanning of books // combining vowels @@ -1375,6 +1386,8 @@ _முகத்தின்_) ப (ாவ b ூ u: ெ e + _ம) ெள (ன aU // bad scanning + _ம) ெள (ஸ aU // bad scanning ே e: @@ -1385,6 +1398,7 @@ _முகத்தின்_) ப (ாவ b ோ o: ௌ aU + _த) ௌி el.i // for bad scanning ் // virama diff --git a/docs/add_language.html b/docs/add_language.html index 8bce53f4..5b938878 100644 --- a/docs/add_language.html +++ b/docs/add_language.html @@ -14,7 +14,7 @@ awareness of its features, patience and attention to detail. Wikipedia is a goo http://en.wikipedia.org/wiki/Vowel

In many cases it should be fairly easy to add a rough implementation of a new language, hopefully -enough to be intelligible.
+enough to be intelligible.

After that it's a gradual process of improvement to:

@@ -275,7 +279,7 @@ eg. S and P must be at the end of the <post> string.

-S<number> may be followed by additonal letters (eg. S2ei ). Some of these are probably specific to English, but similar functions could be used for other languages. +S<number> may be followed by additonal letters (eg. S2ei ). Some of these are probably specific to English, but similar functions could be made for other languages.

    @@ -488,9 +492,13 @@ A word (or group of words) may be given one or more flags, either instead of, or + + + + - + @@ -499,9 +507,13 @@ A word (or group of words) may be given one or more flags, either instead of, or + + + + - + diff --git a/docs/docindex.html b/docs/docindex.html index f3806d23..f0180864 100644 --- a/docs/docindex.html +++ b/docs/docindex.html @@ -41,9 +41,11 @@ eSpeak can be used as a front-end for Mbrola diphone voices.

    Adding a Language

    How to add or improve a language.

    Phonemes

    -The list of phoneme mnemonics, for use in the Pronunciation Dictionary. +The list of phoneme mnemonics for English, for use in the Pronunciation Dictionary.

    Phoneme Tables

    The tables of the phonemes used by each language, with their properties and sound production. +

    Intonation

    +Different intonation "tunes" may be defined for different languages for clauses which end in full-stop, comma, question-mark, and exclamation-mark.

    eSpeak Libary API

    API definition and header file for a shared library version of eSpeak.

    Markup tags

    diff --git a/docs/intonation.html b/docs/intonation.html new file mode 100644 index 00000000..cac3ee60 --- /dev/null +++ b/docs/intonation.html @@ -0,0 +1,101 @@ + + + + + eSpeak: Phoneme tables + + + +Back +
    +

    INTONATION

    +
    +In eSpeak's standard intonation model, a "tune" is applied to each clause depending on its punctuation. Other intonation models may be used for some languages, such as tone languages. +

    +Named tunes are defined in the text file: phsource/intonation. This file must be compiled for use by eSpeak by using the espeakedit program, using the menu option: Compile -> Compile intonation data. +

    Clauses

    +The tunes which are used for a language can be specified by using a tunes statement in a voice file in espeak-data/voices. eg: +

    +tunes   s1  c1  q1  e1 +

    +It's parameters are four tune names which are used for clauses which end in: +

      +
    1. Full-stop. +
    2. Comma. +
    3. Question mark. +
    4. Exclamation mark. +
    +

    +A clause consists of the following parts: +

      +
    • Pre-head.
      These are any unstressed syllables before the first stressed syllable. +

      +

    • Head.
      This is the part from the first stressed syllable up to the last syllable before the nucleus. +

      +

    • Nucleus.
      This is stressed syllable which is the focus of the clause. eSpeak chooses the last stressed syllable of the clause. +

      +

    • Tail.
      These are the syllables after the nucleus. +
    +

    +

    Tune definitions

    +Here is an example tune definition from the file phsource/intonation. +

    +

    +tune s1
    +prehead   46 57
    +headenv   fall 16
    +head       4 80 55 -8 -5
    +headextend 0 63 38 13 0
    +nucleus  fall 70 18 24 12
    +nucleus0 fall 64 8
    +endtune
    +
    +

    +It contains: +

    +
    tune <tune name> +
    +Starts the definition of a tune. The tune name can be used in a tunes statements in voice files. +

    +

    endtune <tune name> +
    +Ends the definition of a tune. +

    +

    prehead <start pitch> <end pitch> +
    +Gives the pitch path for any series of unstressed syllables before the first stressed syllable. +

    +

    headenv <envelope> <height> +
    +Gives the pitch envelope which is used for stressed syllables in the head (before the nucleus), including onset and headlast syllables if these are specified. height gives a pitch range for the envelope. +

    +

    head <steps> <start pitch> <end pitch> <unstressed start> <unstressed end> +
    +start pitch and end pitch give a pitch path for the stressed syllables of the head. steps is the maximum number of stressed syllables for which this applies. If there are additional stressed syllables, then the headextend statement is used for them.

    +unstressed start and unstressed end give a pitch path for unstressed syllables between two stressed syllables. Their values are relative to the pitch of the previous stressed syllable. Values are usually negative, meaning that the unstressed syllables have lower pitch than the previous stressed syllable. + +

    +

    headextend <percentage list> +
    +If the head contains more stressed syllables than is specified by steps, then percentage list is used. It contains up to 8 numbers which are used repeatedly for the additional stressed syllables. A value of 0 corresponds to the lower the start pitch and end pitch values of the head statement. 100 corresponds to the higher value. Negative values and values greater than 100 are allowed. +

    +

    nucleus <envelope> <top pitch> <bottom pitch> <tail start> <tail end> +
    +This gives the pitch envelope and pitch range of the last stressed syllable of the clause. tail start and tail end give a pitch path for the unstressed syllables which are after the last stressed syllable. +

    +

    nucleus0 <envelope> <top pitch> <bottom pitch> +
    +This is used instead of nucleus if there are no unstressed syllables after the last stressed syllable. In this case, the pitch changes of the nucleus and the tail and both included in the nucleus. +
    +

    +The following attributes may also be included: +

    +
    onset <pitch> <unstressed start> <unstressed end> +
    +This specifies the pitch for the first stressed syllable of the head. If the onset statement is present, then the head statement used for the stressed syllables after the first. +

    +

    headlast <pitch> <unstressed start> <unstressed end> +
    +This specifies the pitch for the last stressed syllable of the head (i.e. the stressed syllable before the nucleus). +

    +

    diff --git a/docs/mbrola.html b/docs/mbrola.html index b6b06f8f..6335e92d 100644 --- a/docs/mbrola.html +++ b/docs/mbrola.html @@ -49,32 +49,27 @@ directory) into

    Linux Installation

    -I don't think there's a Linux shared library version of Mbrola (equivalent to mbrola.dll), so eSpeak has to pipe phoneme data to the command-line Mbrola. +From eSpeak version 1.44 onwards, eSpeak calls the mbrola program directly, rather than passing phoneme data to it using a pipe.
    1. To install the Linux Mbrola binary, download: http://www.tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbr301h.zip. -Unpack the archive, and copy and rename the file: mbrola-linux-i386 to +Unpack the archive, and copy and rename the file from: mbrola-linux-i386 to mbrola somewhere in your executable path (eg. /usr/bin/mbrola ).

    2. Get the en1 voice from: http://www.tcts.fpms.ac.be/synthesis/mbrola/mbrcopybin.html. Unpack the archive, and copy the "en1" data file (not the whole "en1" -directory) somewhere convenient (eg. /usr/share/mbrola/en1 ). +directory) to /usr/share/mbrola/en1.

      eSpeak will look for mbrola voices firstly in espeak-data/mbrola and then in /usr/share/mbrola

      -

    3. If you use the eSpeak voice "mb-en1" then eSpeak will generate -Mbrola phoneme data on its stdout. You can pipe this into Mbrola. -

      -espeak -v mb-en1 -f textfile | mbrola -e /usr/share/mbrola/en1 - -test.wav -

      -will put the Mbrola speech output into a WAV file. Or you can pipe the output from Mbrola through aplay: -

      -espeak -v mb-en1 -f textfile | mbrola -e /usr/share/mbrola/en1 - - | aplay -r16000 -fS16 -

      -The -e option prevents Mbrola from stopping if it finds a combination -of phonemes which it doesn't recognise. -

      -Some mbrola voices (de5, de6) use a sample rate of 22050 Hz. These need -r22050 rather than -r16000. +

    4. If you use the eSpeak voice such as "mb-en1" then eSpeak will use the mbrola "en1" voice, eg:
      +espeak -v mb-en1 "Hello world" + +

      +To generate mbrola phoneme data (.pho file) you can use:
      +espeak -v mb-en1 -q --pho "Hello world" +
      or
      +espeak -v mb-en1 -q --pho --phonout=out.pho "Hello world" +

    Mbrola Voice Files

    diff --git a/docs/phontab.html b/docs/phontab.html index 767ed8b4..c625e69c 100644 --- a/docs/phontab.html +++ b/docs/phontab.html @@ -3,6 +3,7 @@ eSpeak: Phoneme tables + @@ -102,6 +103,7 @@ Within the phoneme definition the following lines may occur: ( (V) indicates on +
    $hasdot Use this pronunciation if the word is followed by a dot. (This attribute also implies $dot).
    $sentenceThe rule only applies if the clause includes end-of-sentence (i.e. it is not terminated by a comma). For example, "$atend $sentence" means that the rule only applies at the end of a sentence.
    $abbrevThis has two meanings.
    1. If there is no phoneme string: Speak the word as individual letters, even if it contains a vowel (eg. "abc" should be spoken as "a" "b" "c").
    2. If there is a phoneme string: This word is capitalized because it is an abbreviation and capitalization does indicate emphasis (if the "emphasize all-caps" is on).
    This has two meanings.
    1. If there is no phoneme string: Speak the word as individual letters, even if it contains a vowel (eg. "abc" should be spoken as "a" "b" "c").
    2. If there is a phoneme string: This word is capitalized because it is an abbreviation and capitalization does not indicate emphasis (if the "emphasize all-caps" is on).
     
    $accent Used for the pronunciation of a single alphabetic character. The character name is spoken as the base-letter name plus the accent (diacritic) name. eg. It can be used to specify that "â" is spoken as "a" "circumflex".
    $combineThis word is treated as though it is combined with the following word with a hyphen. This may be subject to fuither conditions for certain languages.
    $alt   $alt2$alt   $alt2   $alt3 These are language specific. Their use should be described in the language's **_list file
    rhotic(C) An "r" type consonant.
    unstressed(V) This vowel is always unstressed, unless explicitly marked otherwise.
    nolinkPrevent any linking from the previous phoneme.
    nopauseUsed in a liquid or nasal phoneme to prevent eSpeak inserting a short pause if a word starts with this phoneme and the previous word ends with a vowel.
    trill(C) Apply trill to the voicing.
    @@ -151,14 +153,18 @@ During the first phase of phoneme interpretation, an instruction which causes a
    length <length>
    The relative length of the phoneme, typically about 140 for a short vowel and from 200 to 300 for a long vowel or diphong. A length() instruction is needed for vowels. It is optional for consonants.

    +

    ipa <ipa string> +
    In many cases, eSpeak makes IPA (International Phonetic Alpbabet) phoneme names automatically from eSpeak phoneme names. If this is not correct, then the phoneme definition can include an ipa instruction to specify the correct IPA name. IPA strings may include non-ascii characters. They may also include characters specified by their character codes in the form U+ followed by 4 hexadecimal digits. For example a string: aU+0303 indicates 'a' with a 'combining tilde'. +

    WAV(<wav file>, <amplitude>)
     <wav file> is a path to a WAV file (22 kHz, 16 bits, mono) within phsource/ which will be played to produce the sound. This method is used for unvoiced consonants. <wavefile> does not include a .WAV filename extension, although the file to which it refers may or may not have one.
    <amplitude> is optional. It is a percentage change to the amplitude of the WAV file. So, WAV(ufric/s, 50) means: play file 'ufric/s.wav' at 50% amplitude.

    -

    FMT(<vowel file>) -
    <vowel file> is a path to a file (within phsource/) which defines how to generate the sound (a vowel or voiced consonant) from a sequence of formant values. Vowel files are made using the espeakedit program. +
    FMT(<vowel file>, <amplitude>) +
    <vowel file> is a path to a file (within phsource/) which defines how to generate the sound (a vowel or voiced consonant) from a sequence of formant values. Vowel files are made using the espeakedit program.
    +<amplitude> is optional. It is a percentage change to the amplitude of the sound which is synthesized from the FMT() instruction.

    -

    FMT(<vowel file>) addWav(<wav file>, <amplitude>) +
    FMT(<vowel file>, <amplitude>) addWav(<wav file>, <amplitude>)
    For voiced consonants, a FMT() instruction may be followed by an addWav() instruction. addWav() has the same format as a WAV() instruction, but the WAV file is mixed with the sound which is synthesized from the FMT() instruction.

    VowelStart(<vowel file>, <length adjust>) diff --git a/docs/speak_lib.h b/docs/speak_lib.h index b31e1310..8a9400ea 100644 --- a/docs/speak_lib.h +++ b/docs/speak_lib.h @@ -1,7 +1,7 @@ #ifndef SPEAK_LIB_H #define SPEAK_LIB_H /*************************************************************************** - * Copyright (C) 2005 to 2007 by Jonathan Duddington * + * 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 * @@ -26,8 +26,9 @@ /*************************************************************/ #include +#include -#define ESPEAK_API_REVISION 3 +#define ESPEAK_API_REVISION 5 /* Revision 2 Added parameter "options" to eSpeakInitialize() @@ -35,6 +36,11 @@ Revision 2 Revision 3 Added espeakWORDGAP to espeak_PARAMETER +Revision 4 + Added flags parameter to espeak_CompileDictionary() + +Revision 5 + Added espeakCHARS_16BIT */ /********************/ /* Initialization */ @@ -44,12 +50,13 @@ Revision 3 typedef enum { espeakEVENT_LIST_TERMINATED = 0, // Retrieval mode: terminates the event list. espeakEVENT_WORD = 1, // Start of word - espeakEVENT_SENTENCE, // Start of sentence - espeakEVENT_MARK, // Mark - espeakEVENT_PLAY, // Audio element - espeakEVENT_END, // End of sentence - espeakEVENT_MSG_TERMINATED, // End of message - espeakEVENT_PHONEME // Phoneme, if enabled in espeak_Initialize() + espeakEVENT_SENTENCE = 2, // Start of sentence + espeakEVENT_MARK = 3, // Mark + espeakEVENT_PLAY = 4, // Audio element + espeakEVENT_END = 5, // End of sentence or clause + espeakEVENT_MSG_TERMINATED = 6, // End of message + espeakEVENT_PHONEME = 7, // Phoneme, if enabled in espeak_Initialize() + espeakEVENT_SAMPLERATE = 8 // internal use, set sample rate } espeak_EVENT_TYPE; @@ -224,6 +231,7 @@ int UriCallback(int type, const char *uri, const char *base); #define espeakCHARS_UTF8 1 #define espeakCHARS_8BIT 2 #define espeakCHARS_WCHAR 3 +#define espeakCHARS_16BIT 4 #define espeakSSML 0x10 #define espeakPHONEMES 0x100 @@ -315,7 +323,8 @@ extern "C" #endif espeak_ERROR espeak_Key(const char *key_name); /* Speak the name of a keyboard key. - Currently this just speaks the "key_name" as given + If key_name is a single character, it speaks the name of the character. + Otherwise, it speaks key_name as a text string. Return: EE_OK: operation achieved EE_BUFFER_FULL: the command can not be buffered; @@ -379,7 +388,8 @@ espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int rela parameter: espeakRATE: speaking speed in word per minute. - espeakVOLUME: volume in range 0-100 0=silence + espeakVOLUME: volume in range 0-200 or more. + 0=silence, 100=normal full volume, greater values may produce amplitude compression or distortion espeakPITCH: base pitch, range 0-100. 50=normal @@ -435,6 +445,7 @@ void espeak_SetPhonemeTrace(int value, FILE *stream); value=0 No phoneme output (default) value=1 Output the translated phoneme symbols for the text value=2 as (1), but also output a trace of how the translation was done (matching rules and list entries) + value=3 as (1), but produces IPA rather than ascii phoneme names stream output stream for the phoneme symbols (and trace). If stream=NULL then it uses stdout. */ @@ -442,13 +453,16 @@ void espeak_SetPhonemeTrace(int value, FILE *stream); #ifdef __cplusplus extern "C" #endif -void espeak_CompileDictionary(const char *path, FILE *log); +void espeak_CompileDictionary(const char *path, FILE *log, int flags); /* Compile pronunciation dictionary for a language which corresponds to the currently selected voice. The required voice should be selected before calling this function. path: The directory which contains the language's '_rules' and '_list' files. 'path' should end with a path separator character ('/'). log: Stream for error reports and statistics information. If log=NULL then stderr will be used. + + flags: Bit 0: include source line information for debug purposes (This is displayed with the + -X command line option). */ /***********************/ /* Voice Selection */ @@ -497,7 +511,7 @@ const espeak_VOICE **espeak_ListVoices(espeak_VOICE *voice_spec); The list is terminated by a NULL pointer If voice_spec is NULL then all voices are listed. - If voice spec is give, then only the voices which are compatible with the voice_spec + If voice spec is given, then only the voices which are compatible with the voice_spec are listed, and they are listed in preference order. */ diff --git a/docs/ssml.html b/docs/ssml.html index 8ecdfba9..a1473b02 100644 --- a/docs/ssml.html +++ b/docs/ssml.html @@ -74,6 +74,7 @@ eSpeak can speak HTML text directly, or text containing both SSML and HTML marku Any unrecognised tags are ignored.

    The following tags case a sentence break.
    <br>   +<dd>   <li>   <img>   <td>   @@ -85,5 +86,9 @@ The following tags case a paragraph break.
    <h4>   <hr>  

    +Text between the following tags is ignored.
    +<script>   ...   </script>  
    +<style>   ...   </style>  
    +

    diff --git a/phsource/compile_report b/phsource/compile_report index ac65428c..9d6af28a 100644 --- a/phsource/compile_report +++ b/phsource/compile_report @@ -1,4 +1,4 @@ -65 phoneme tables +66 phoneme tables new total base 107 107 consonants 9 115 @@ -12,7 +12,7 @@ consonants 9 115 en-wi 30 148 af 39 136 cy 29 132 - de 38 139 + de 36 137 eo 13 114 jbo 2 114 nci 3 123 @@ -24,12 +24,12 @@ consonants 9 115 hu 24 121 lv 29 125 nl 24 125 - pl 20 118 - sk 28 133 - cs 6 133 - hr 25 138 - mk 3 139 - sr 14 138 + pl 22 120 + sk 28 135 + cs 6 135 + hr 25 140 + mk 3 141 + sr 14 140 it 18 126 la 21 124 es 10 123 @@ -38,7 +38,7 @@ consonants 9 115 pt 29 138 pt-pt 20 138 ro 36 146 - el 8 123 + el 9 123 grc 12 127 sv 22 127 no 28 132 @@ -59,12 +59,13 @@ consonants 9 115 ne 18 157 pa 14 151 prs 8 111 - sl 7 133 + sl 7 135 gd 6 107 - bg 10 119 + bg 10 121 nso 8 107 ht 11 140 az 10 127 + ak 8 109 Data file Used by b/b [b] base @@ -342,7 +343,7 @@ l/l_ [l/] base [l/] fr l/l_@ [l/3] base [l/] fr -l/l@ [h&w] base +l/l@ [h–z] base [l#] base [l] fr [l/2] fr @@ -368,13 +369,13 @@ 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&w] base +l/la [h–z] base [l#] base [l] fr [l/2] fr l/l_a [l/3] base [l/] fr -l/le [h&w] base +l/le [h–z] base [l#] base [l] fr [l/2] fr @@ -384,7 +385,7 @@ l/L_eL_af [&] af [&:] af l/l_front [L] sq l/l_front_ [l/4] sq -l/li [h&w] base +l/li [h–z] base [l#] base [l] fr [l/2] fr @@ -396,14 +397,14 @@ ll/ll [L] bg ll/_ll [L] bg l/l_long [l] base [l] fr -l/lo [h&w] base +l/lo [h–z] base [l#] base [l] fr [l/2] fr l/l_o [l/3] base [l/] fr l^/l_rfx [l.] base -l/lu [h&w] base +l/lu [h–z] base [l#] base [l] fr [l/2] fr @@ -504,7 +505,6 @@ n/nu [n] base [n#] is [n] zh r/@_ [V#] de - [V3#] de r2/r2@ [r-] en r2/r2a [r-] en r2/r2e [r-] en @@ -526,6 +526,7 @@ r3/r_trill [R2] base [R] pl [r*] sr [x] pt + [r] el r3/r_trill2 [R] base [r] cy r3/r_trill2.wav [R] base @@ -539,6 +540,7 @@ r3/r_trill.wav [R2] base [R] pl [r*] sr [x] pt + [r] el r3/r_uvl [r"] base [r] de r3/r_uvl.wav [r"] base @@ -600,9 +602,7 @@ r/trr [r/] base [r] ro [r] ru r/V_ [V#] de - [V1#] de r/V_2_ [V#] de - [V2#] de r/xr [r] base [R3] base [r-] en @@ -913,7 +913,6 @@ vdiph/aau_2 [aU] en-wi [aU] la [aau] zhy vdiph/aau_3 [aU] hi - [aU] ta [aU] ne vdiph/aau_4 [aU] vi vdiph/aau_6 [aU] de @@ -947,6 +946,7 @@ vdiph/ai_8 [aI] ta vdiph/aoo [aU] en-us vdiph/au [aU] en [aU] af + [aU] ta [a:U] vi [aU] prs vdiph/au# [aU] en-sc @@ -1375,6 +1375,7 @@ vowel/aa_9 [a] fi [a:] hi [a] ne [a] pa + [a] ak vowel/@_bck [@] hi [@/] hi [@] zh @@ -1425,6 +1426,7 @@ vowel/e_3 [i] en-n [e] ku vowel/e_5 [i] en-sc vowel/e_6 [e] ht + [e] ak vowel/e_8 [E:] de [e] fr vowel/ee [E] en-n @@ -1455,6 +1457,7 @@ vowel/ee_3 [&] af [E] vi vowel/ee_4 [E] sq vowel/ee_5 [E] en + [E] ak vowel/ee_6 [&] sk [E3] sv [E] ku @@ -1533,6 +1536,7 @@ vowel/i [i] base [i] ne [i] prs [i] nso + [i] ak vowel/i# [y:] cy vowel/i_2 [i2] de [i:] de @@ -1663,6 +1667,7 @@ vowel/o [o] base2 [o:] ml [o:] pa [o] sl + [o] ak vowel/o_2 [o:] cy [o:] hi [o:] hu @@ -1731,6 +1736,7 @@ vowel/oo_2 [0] en-sc [O] cy [o] cs [0] da + [O] ak vowel/oo_3 [O] af vowel/oo_4 [O] base2 [0] en-wm @@ -1774,6 +1780,7 @@ vowel/u [u] base [u] ml [u:] ml [u] prs + [u] ak vowel/u# [u:] en-sc [Y] tr vowel/u_2 [u1] fi diff --git a/phsource/ph_german b/phsource/ph_german index 93b85876..f7e560e1 100755 --- a/phsource/ph_german +++ b/phsource/ph_german @@ -339,35 +339,6 @@ phoneme V# // used for 'r' after a vowel (to create a diphthong) endphoneme -// TESTING - -phoneme V1# - liquid - lengthmod 7 - IF nextPhW(isVowel) THEN - ChangePhoneme(r") - ENDIF - FMT(r/V_) -endphoneme - -phoneme V2# // used for 'r' after a vowel (to create a diphthong) - liquid - lengthmod 7 - IF nextPhW(isVowel) THEN - ChangePhoneme(r") - ENDIF - FMT(r/V_2_) -endphoneme - -phoneme V3# - liquid - lengthmod 7 - IF nextPhW(isVowel) THEN - ChangePhoneme(r") - ENDIF - FMT(r/@_) -endphoneme - phoneme UR vowel starttype #u endtype #@ ipa ʊɐ @@ -377,6 +348,21 @@ phoneme UR endphoneme +phoneme r2 + vcd alv flp + + IF prevPhW(isVowel) THEN + ChangePhoneme(*) + ENDIF + + InsertPhoneme(@-) + ChangePhoneme(*) +endphoneme + + + +// TESTING + // translate from English to German phonemes diff --git a/phsource/ph_greek b/phsource/ph_greek index 2730915c..d88065b7 100644 --- a/phsource/ph_greek +++ b/phsource/ph_greek @@ -69,3 +69,13 @@ phoneme k WAV(ustop/k_unasp, 70) endphoneme + +phoneme r // this is [R] from Slovak/Czech + liquid + trill + lengthmod 6 + ipa r + Vowelin f1=0 f2=1700 -300 300 f3=-300 80 + Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk + FMT(r3/r_trill) addWav(r3/r_trill.wav, 50) +endphoneme diff --git a/phsource/ph_polish b/phsource/ph_polish index 1f30cb3c..fde2cccb 100644 --- a/phsource/ph_polish +++ b/phsource/ph_polish @@ -170,8 +170,21 @@ endphoneme phoneme dz - import_phoneme consonants/dz + CALL consonants/dz voicingswitch ts + ipa dʑ +endphoneme + +phoneme ts; + CALL base/tS; + voicingswitch dz; + ipa tɕ +endphoneme + + +phoneme dz; + import_phoneme base/dZ; + voicingswitch ts; endphoneme diff --git a/phsource/ph_tamil b/phsource/ph_tamil index 6ee50b78..bdbee178 100644 --- a/phsource/ph_tamil +++ b/phsource/ph_tamil @@ -118,14 +118,14 @@ endphoneme phoneme aI vowel starttype #a endtype #i - length 230 + length 280 FMT(vdiph/ai_8) endphoneme phoneme aU vowel starttype #a endtype #u - length 200 - FMT(vdiph/aau_3) + length 260 + FMT(vdiph/au) endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 35b3d19c..4d01f032 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -475,6 +475,8 @@ phoneme l/2 // 'dark' [l] after a vowel ChangePhoneme(l) ENDIF + CALL vowelstart_l + PrevVowelEndings VowelEnding(l/L2_@L, -60) VowelEnding(l/L2_aL, -50) @@ -1817,3 +1819,6 @@ include ph_haitian phonemetable az tr include ph_azerbaijani + +phonemetable ak base +include ph_akan diff --git a/platforms/big_endian/espeak-phoneme-data.c b/platforms/big_endian/espeak-phoneme-data.c index 4f88f2fc..2a8dd225 100644 --- a/platforms/big_endian/espeak-phoneme-data.c +++ b/platforms/big_endian/espeak-phoneme-data.c @@ -2,11 +2,13 @@ // 13.02.10 jonsd: Changed for eSpeak version 1.43 +// 13.08.10 jonsd: Added Q lines. Use Address to set the displacement in phondata file. #include #include #include +#include #include #if defined(BYTE_ORDER) && BYTE_ORDER == BIG_ENDIAN @@ -101,6 +103,7 @@ void swap_phontab (const char *infile, const char *outfile); void usage (const char *program_name); +int xread; // prevent compiler warning from fread() int main (int argc, char *argv[]) @@ -181,6 +184,7 @@ void swap_phondata (const char *infile, const char *outfile, const char *manifest) {//========================================================== FILE *in, *mfest, *out; + int displ; char line[1024]; unsigned char buf_4[4]; @@ -202,24 +206,30 @@ void swap_phondata (const char *infile, const char *outfile, exit (1); } - fread (buf_4, 4, 1, in); - fwrite (buf_4, 4, 1, out); + xread = fread(buf_4, 4, 1, in); + fwrite(buf_4, 4, 1, out); + + while (fgets (line, sizeof(line), mfest)) + { + if(!isupper(line[0])) continue; + + sscanf(&line[2],"%x",&displ); + fseek(in, displ, SEEK_SET); - while (fgets (line, 1024, mfest)) { if (line[0] == 'S') { SPECT_SEQ buf_spect; size_t ix; int n; - fread (&buf_spect.length, 2, 1, in); - fread (&buf_spect.n_frames, 1, 1, in); + xread = fread (&buf_spect.length, 2, 1, in); + xread = fread (&buf_spect.n_frames, 1, 1, in); fseek (in, -3, SEEK_CUR); ix = (char *)(&buf_spect.frame[buf_spect.n_frames]) - (char *)(&buf_spect); ix = (ix+3) & 0xfffc; - fread (&buf_spect, ix, 1, in); + xread = fread (&buf_spect, ix, 1, in); buf_spect.length = (short) SWAP_USHORT (buf_spect.length); for (n = 0; n < buf_spect.n_frames; n++) { @@ -242,7 +252,7 @@ void swap_phondata (const char *infile, const char *outfile, int length; char *wave_data; - fread (buf_4, 4, 1, in); + xread = fread (buf_4, 4, 1, in); fwrite (buf_4, 4, 1, out); length = buf_4[1] * 256 + buf_4[0]; @@ -253,7 +263,7 @@ void swap_phondata (const char *infile, const char *outfile, exit (1); } - fread (wave_data, 1, length, in); + xread = fread (wave_data, 1, length, in); fwrite (wave_data, 1, length, out); pos = ftell (in); @@ -273,7 +283,7 @@ void swap_phondata (const char *infile, const char *outfile, else if (line[0] == 'E') { char env_buf[128]; - fread (env_buf, 1, 128, in); + xread = fread (env_buf, 1, 128, in); fwrite (env_buf, 1, 128, out); } } @@ -302,7 +312,7 @@ void swap_phonindex (const char *infile, const char *outfile) exit (1); } - fread (buf_4, 4, 1, in); // skip first 4 bytes + xread = fread (buf_4, 4, 1, in); // skip first 4 bytes fwrite(buf_4, 4, 1, out); while (! feof (in)) { @@ -339,7 +349,7 @@ void swap_phontab (const char *infile, const char *outfile) exit (1); } - fread (buf_8, 4, 1, in); + xread = fread (buf_8, 4, 1, in); fwrite (buf_8, 4, 1, out); n_phoneme_tables = buf_8[0]; @@ -347,18 +357,18 @@ void swap_phontab (const char *infile, const char *outfile) int n_phonemes, j; char tab_name[N_PHONEME_TAB_NAME]; - fread (buf_8, 8, 1, in); + xread = fread (buf_8, 8, 1, in); fwrite (buf_8, 8, 1, out); n_phonemes = buf_8[0]; - fread (tab_name, N_PHONEME_TAB_NAME, 1, in); + xread = fread (tab_name, N_PHONEME_TAB_NAME, 1, in); fwrite (tab_name, N_PHONEME_TAB_NAME, 1, out); for (j = 0; j < n_phonemes; j++) { PHONEME_TAB table; - fread (&table, sizeof (PHONEME_TAB), 1, in); + xread = fread (&table, sizeof (PHONEME_TAB), 1, in); table.mnemonic = SWAP_UINT (table.mnemonic); table.phflags = SWAP_UINT (table.phflags); diff --git a/platforms/windows/make_espeak.iss b/platforms/windows/make_espeak.iss index a6aa9d6d..97b215c3 100755 --- a/platforms/windows/make_espeak.iss +++ b/platforms/windows/make_espeak.iss @@ -2,7 +2,7 @@ [Setup] AppName=eSpeak -AppVerName=eSpeak version 1.43.24 +AppVerName=eSpeak version 1.44.01 AppCopyright=Licensed under GNU General Public License version 3. (See file License.txt for details). WindowVisible=yes @@ -32,7 +32,6 @@ Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme Source: "License.txt"; DestDir: "{app}"; [Registry] -;Root: HKLM; Subkey: "Software\Microsoft\Speech\Voices\Tokens\eSpeak_5"; Flags: deletekey uninsdeletekey Root: HKLM; Subkey: "Software\Microsoft\Speech\PhoneConverters\Tokens\eSpeak"; Flags: deletekey uninsdeletekey @@ -111,8 +110,10 @@ begin lang_main := language and $3ff; Result := 'en'; - // translation from microsoft codes to language codes + // Translation from microsoft codes to language codes + // Used to set default voices for inatallation. case lang_main of + //$02: Result := 'bg'; $03: Result := 'ca'; $04: Result := 'zh'; $05: Result := 'cs'; @@ -126,7 +127,7 @@ begin $0e: Result := 'hu'; $0f: Result := 'is'; $10: Result := 'it'; - $12: Result := 'ko'; + //$12: Result := 'ko'; $13: Result := 'nl'; $14: Result := 'no'; $15: Result := 'pl'; @@ -142,17 +143,18 @@ begin $26: Result := 'lv'; $2a: Result := 'vi'; $2b: Result := 'hy'; - $2d: Result := 'eu'; + //$2c: Result := 'az'; + //$2d: Result := 'eu'; $2f: Result := 'mk'; $36: Result := 'af'; $39: Result := 'hi'; $41: Result := 'sw'; $49: Result := 'ta'; - $4b: Result := 'kn'; - $50: Result := 'mn'; + //$4b: Result := 'kn'; + //$50: Result := 'mn'; $52: Result := 'cy'; - $61: Result := 'ne'; - $87: Result := 'rw'; + //$61: Result := 'ne'; + //$87: Result := 'rw'; end; // is there a match on the full language code? @@ -185,8 +187,12 @@ begin lang1 := Copy(voice,8,6); // eg. mb-de4-en, return 'en' end; + // Used to set the correct Microsoft language code in the registry + // when a SAPI5 voice is installed. case lang1 of 'af': value := $436; + 'az': value := $42c; + 'bg': value := $402; 'bs': value := $41a; // should be $141a but Jaws crashes on startup 'ca': value := $403; 'cs': value := $405; diff --git a/platforms/windows/make_espeakedit.iss b/platforms/windows/make_espeakedit.iss index 303dcf25..848b5b3c 100755 --- a/platforms/windows/make_espeakedit.iss +++ b/platforms/windows/make_espeakedit.iss @@ -1,7 +1,7 @@ [Setup] AppName=eSpeakEdit -AppVerName=eSpeakEdit version 1.43.24 +AppVerName=eSpeakEdit version 1.44.01 DefaultDirName={pf}\eSpeak DefaultGroupName=eSpeak OutputBaseFilename=setup_espeakedit @@ -14,6 +14,9 @@ ShowLanguageDialog=auto Name: "{group}\espeakedit"; Filename: "{app}\espeakedit.exe"; WorkingDir: "{app}"; Flags: runmaximized Name: "{group}\Uninstall espeakedit"; Filename: "{uninstallexe}" +[InstallDelete] +Type: filesandordirs; Name: "{app}\phsource\vowelcharts" + [Files] Source: "espeakedit.exe"; DestDir: "{app}" diff --git a/platforms/windows/windows_sapi/ttsengobj.cpp b/platforms/windows/windows_sapi/ttsengobj.cpp index 3a2525a5..6e27a5bf 100755 --- a/platforms/windows/windows_sapi/ttsengobj.cpp +++ b/platforms/windows/windows_sapi/ttsengobj.cpp @@ -178,6 +178,7 @@ int SynthCallback(short *wav, int numsamples, espeak_EVENT *events) // return the events for(event=events; (event->type != 0) && (n_Events < N_EVENTS); event++) { + audio_latest = event->audio_position + audio_offset; if((event->type == espeakEVENT_WORD) && (event->length > 0)) @@ -260,8 +261,8 @@ static int ConvertRate(int new_rate) int rate; - static int rate_table[21] = {80,100,115,124,133,142,151,159,168,174,180, - 187,196,208,220,240,270,300,335,369,390 }; + static int rate_table[21] = {80,110,124,133,142,151,159,168,174,180,187, + 196,208,220,240,270,300,335,369,390,450 }; rate = new_rate + master_rate; if(rate < -10) rate = -10; diff --git a/platforms/windows/windows_sapi/version.rc2 b/platforms/windows/windows_sapi/version.rc2 index b60d1679..1a6e80c8 100755 --- a/platforms/windows/windows_sapi/version.rc2 +++ b/platforms/windows/windows_sapi/version.rc2 @@ -5,8 +5,8 @@ // VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,42,00 - PRODUCTVERSION 1,0,42,00 + FILEVERSION 1,0,44,00 + PRODUCTVERSION 1,0,44,00 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L @@ -24,14 +24,14 @@ BEGIN VALUE "Comments", "\0" VALUE "CompanyName", "Jonathan Duddington\0" VALUE "FileDescription", "Text to Speech\0" - VALUE "FileVersion", "1, 0,42,00\0" - VALUE "InternalName", "espeak1.42\0" + VALUE "FileVersion", "1, 0,44,00\0" + VALUE "InternalName", "espeak1.44\0" VALUE "LegalCopyright", "Copyright (c) Jonathan Duddington\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "espeak_sapi.dll\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "espeak TTS\0" - VALUE "ProductVersion", "1, 0, 42, 00\0" + VALUE "ProductVersion", "1, 0, 44, 00\0" VALUE "SpecialBuild", "\0" END END diff --git a/src/compiledata.cpp b/src/compiledata.cpp index 0a6ee71e..10e581f4 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -1925,8 +1925,11 @@ static int LoadEnvelope(FILE *f, const char *fname) displ = ftell(f_phdata); fseek(f,12,SEEK_SET); - fread(buf,1,128,f); - fwrite(buf,1,128,f_phdata); + if(fread(buf,128,1,f) == 0) + { + error("Failed to read envelope: %s",fname); + } + fwrite(buf,128,1,f_phdata); if(n_envelopes < N_ENVELOPES) { @@ -3576,7 +3579,7 @@ void CompileMbrola() wxFileName filename = wxFileName(filepath); strcpy(mbrola_voice,filename.GetName().mb_str(wxConvLocal)); sprintf(buf,"%s/mbrola_ph/%s_phtrans",path_home,mbrola_voice); - if((f_out = fopen(buf,"w")) == NULL) + if((f_out = fopen(buf,"wb")) == NULL) { wxLogError(_T("Can't write to: ")+wxString(buf,wxConvLocal)); return; diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 202e1749..12801000 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -273,7 +273,7 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) } tr->data_dictlist = Alloc(size); - fread(tr->data_dictlist,size,1,f); + size = fread(tr->data_dictlist,1,size,f); fclose(f); @@ -516,7 +516,7 @@ unsigned short ipa1[96] = { 0x252,0x31,0x32,0x25c,0x34,0x35,0x36,0x37,0x275,0x39,0x2d0,0x2b2,0x3c,0x3d,0x3e,0x294, 0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x4c,0x271,0x14b,0x254, 0x3a6,0x263,0x280,0x283,0x3b8,0x28a,0x28c,0x153,0x3c7,0xf8,0x292,0x32a,0x5c,0x5d,0x5e,0x5f, -0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, +0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x261,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x303,0x7f }; @@ -1639,6 +1639,7 @@ void SetWordStress(Translator *tr, char *output, unsigned int *dictionary_flags, } *output++ = 0; + return; } /* end of SetWordStress */ diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index efa9f3fe..52eb7643 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -566,7 +566,7 @@ void DisplayErrorFile(const char *fname) if(msg != NULL) { f = fopen(fname,"r"); - fread(msg,len,1,f); + len = fread(msg,1, len, f); fclose(f); msg[len] = 0; msg_string = wxString(msg,wxConvUTF8); diff --git a/src/numbers.cpp b/src/numbers.cpp index a2cbdb7d..f1389e95 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1883,7 +1883,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int TranslateNumber(Translator *tr, char *word1, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) {//============================================================================================================= - if(option_sayas == SAYAS_DIGITS1) + if((option_sayas == SAYAS_DIGITS1) || (wtab[0].flags & FLAG_INDIVIDUAL_DIGITS)) return(0); // speak digits individually if(tr->langopts.numbers != 0) diff --git a/src/readclause.cpp b/src/readclause.cpp index 12d304a6..52562287 100644 --- a/src/readclause.cpp +++ b/src/readclause.cpp @@ -774,7 +774,7 @@ static int LoadSoundFile(const char *fname, int index) fclose(f); return(4); } - fread(p,length,1,f); + length = fread(p,1,length,f); fclose(f); remove(fname_temp); @@ -2032,7 +2032,6 @@ int ReadClause(Translator *tr, FILE *f_in, char *buf, short *charix, int *charix int stressed_word = 0; int end_clause_after_tag = 0; int end_clause_index = 0; - const char *p; wchar_t xml_buf[N_XML_BUF+1]; #define N_XML_BUF2 20 diff --git a/src/speak_lib.h b/src/speak_lib.h index 680c6d97..8a9400ea 100644 --- a/src/speak_lib.h +++ b/src/speak_lib.h @@ -388,7 +388,8 @@ espeak_ERROR espeak_SetParameter(espeak_PARAMETER parameter, int value, int rela parameter: espeakRATE: speaking speed in word per minute. - espeakVOLUME: volume in range 0-100 0=silence + espeakVOLUME: volume in range 0-200 or more. + 0=silence, 100=normal full volume, greater values may produce amplitude compression or distortion espeakPITCH: base pitch, range 0-100. 50=normal diff --git a/src/synth_mbrola.cpp b/src/synth_mbrola.cpp index b1d96dc0..13f91914 100644 --- a/src/synth_mbrola.cpp +++ b/src/synth_mbrola.cpp @@ -147,7 +147,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int // read eSpeak's mbrola phoneme translation data, eg. en1_phtrans sprintf(path,"%s/mbrola_ph/%s",path_home,phtrans); size = GetFileLength(path); - if((f_in = fopen(path,"r")) == NULL) { + if((f_in = fopen(path,"rb")) == NULL) { close_MBR(); return(EE_NOT_FOUND); } @@ -165,7 +165,7 @@ espeak_ERROR LoadMbrolaTable(const char *mbrola_voice, const char *phtrans, int { *pw++ = Read4Bytes(f_in); } - fread(mbrola_tab,size,1,f_in); + size = fread(mbrola_tab,1,size,f_in); fclose(f_in); setVolumeRatio_MBR((float)(mbrola_control & 0xff) /16.0f); diff --git a/src/synthdata.cpp b/src/synthdata.cpp index 4f450396..55b6689a 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,8 +35,8 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.43.63 02.Aug.10"; -const int version_phdata = 0x014361; +const char *version_string = "1.44.02 13.Aug.10"; +const int version_phdata = 0x014400; int option_device_number = -1; FILE *f_logespeak = NULL; diff --git a/src/synthesize.cpp b/src/synthesize.cpp index 0805c53a..ff908245 100644 --- a/src/synthesize.cpp +++ b/src/synthesize.cpp @@ -1236,10 +1236,15 @@ void DoEmbedded(int *embix, int sourceix) int command; do { - word = embedded_list[(*embix)++]; + word = embedded_list[*embix]; value = word >> 8; command = word & 0x7f; + if(command == 0) + return; // error + + (*embix)++; + switch(command & 0x1f) { case EMBED_S: // speed diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index cd6cbf51..603598fa 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -122,7 +122,8 @@ static Translator* NewTranslator(void) tr->data_dictrules = NULL; // language_1 translation rules file tr->data_dictlist = NULL; // language_2 dictionary lookup file - tr->transpose_min = 0; + tr->transpose_min = 'a'; + tr->transpose_max = 'z'; tr->frequent_pairs = NULL; // only need lower case @@ -167,6 +168,7 @@ static Translator* NewTranslator(void) tr->langopts.replace_chars = NULL; tr->langopts.ascii_language = ""; // Non-Latin alphabet languages, use this language to speak Latin words, default is English + SetLengthMods(tr,201); // tr->langopts.length_mods = length_mods_en; // tr->langopts.length_mods0 = length_mods_en0; @@ -178,6 +180,7 @@ static Translator* NewTranslator(void) tr->langopts.thousands_sep = ','; tr->langopts.decimal_sep = '.'; tr->langopts.break_numbers = BREAK_THOUSANDS; // 1000, 1000,000 1,000,000 etc + tr->langopts.max_digits = 14; memcpy(tr->punct_to_tone, punctuation_to_tone, sizeof(tr->punct_to_tone)); @@ -278,14 +281,14 @@ static void SetCyrillicLetters(Translator *tr) tr->letter_bits_offset = OFFSET_CYRILLIC; memset(tr->letter_bits,0,sizeof(tr->letter_bits)); - SetLetterBits(tr,0,ru_vowels); + SetLetterBits(tr,LETTERGP_A,ru_vowels); SetLetterBits(tr,1,ru_soft); SetLetterBits(tr,2,ru_consonants); SetLetterBits(tr,3,ru_hard); SetLetterBits(tr,4,ru_nothard); SetLetterBits(tr,5,ru_voiced); SetLetterBits(tr,6,ru_ivowels); - SetLetterBits(tr,7,ru_vowels); + SetLetterBits(tr,LETTERGP_VOWEL2,ru_vowels); } // end of SetCyrillicLetters @@ -419,10 +422,8 @@ Translator *SelectTranslator(const char *name) static const short stress_lengths_da[8] = {160,140, 200,200, 0,0, 220,230}; SetupTranslator(tr,stress_lengths_da,NULL); - tr->transpose_min = 'a'; - tr->transpose_max = 'z'; - tr->langopts.stress_rule = STRESSPOSN_1L; + tr->langopts.param[LOPT_PREFIXES] = 1; SetLetterVowel(tr,'y'); tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL; } @@ -451,9 +452,6 @@ Translator *SelectTranslator(const char *name) static const short stress_lengths_en[8] = {182,140, 220,220, 0,0, 248,275}; SetupTranslator(tr,stress_lengths_en,NULL); - tr->transpose_min = 'a'; - tr->transpose_max = 'z'; - tr->langopts.stress_rule = STRESSPOSN_1L; tr->langopts.stress_flags = 0x08; tr->langopts.numbers = NUM_HUNDRED_AND | NUM_ROMAN | NUM_1900; @@ -485,6 +483,7 @@ Translator *SelectTranslator(const char *name) tr->letter_bits_offset = OFFSET_GREEK; memset(tr->letter_bits,0,sizeof(tr->letter_bits)); SetLetterBits(tr,LETTERGP_A,el_vowels); + SetLetterBits(tr,LETTERGP_VOWEL2,el_vowels); SetLetterBits(tr,LETTERGP_B,el_voiceless); SetLetterBits(tr,LETTERGP_C,el_consonants); SetLetterBits(tr,LETTERGP_Y,el_fvowels); // front vowels: ε η ι υ @@ -733,6 +732,7 @@ SetLengthMods(tr,3); // all equal tr->letter_bits_offset = OFFSET_ARMENIAN; memset(tr->letter_bits,0,sizeof(tr->letter_bits)); SetLetterBits(tr,LETTERGP_A,hy_vowels); + SetLetterBits(tr,LETTERGP_VOWEL2,hy_vowels); SetLetterBits(tr,LETTERGP_C,hy_consonants); tr->langopts.max_initial_consonants = 6; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_OMIT_1_HUNDRED; @@ -902,7 +902,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.param[LOPT_PREFIXES] = 1; tr->langopts.param[LOPT_REGRESSIVE_VOICING] = 0x10; // devoice at end of word SetLetterVowel(tr,'y'); - + tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_ALLOW_SPACE | NUM_1900 | NUM_ORDINAL_DOT; tr->langopts.ordinal_indicator = "e"; memcpy(tr->stress_lengths,stress_lengths_nl,sizeof(tr->stress_lengths)); diff --git a/src/translate.cpp b/src/translate.cpp index 10df8492..14ed848b 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -766,12 +766,14 @@ int TranslateWord(Translator *tr, char *word1, int next_pause, WORD_TAB *wtab) int word_length; int ix; + char *p; int pfix; int n_chars; unsigned int dictionary_flags[2]; unsigned int dictionary_flags2[2]; int end_type=0; int prefix_type=0; + int prefix_stress; char *wordx; char phonemes[N_WORD_PHONEMES]; char *ph_limit; @@ -1007,7 +1009,6 @@ if((wmark > 0) && (wmark < 8)) while(((length < 3) && (length > 0))|| (word_length > 1 && Unpronouncable(tr,wordx))) { - char *p; // This word looks "unpronouncable", so speak letters individually until we // find a remainder that we can pronounce. emphasize_allcaps = 0; @@ -1311,9 +1312,15 @@ if(dictionary_flags2[0] & FLAG_ABBREV) /* determine stress pattern for this word */ /******************************************/ - /* NOTE: this also adds a single PAUSE if the previous word ended - in a primary stress, and this one starts with one */ - if(prefix_flags || (strchr(prefix_phonemes,phonSTRESS_P)!=NULL)) + prefix_stress = 0; + for(p = prefix_phonemes; *p != 0; p++) + { + if((*p == phonSTRESS_P) || (*p == phonSTRESS_P2)) + { + prefix_stress = *p; + } + } + if(prefix_flags || (prefix_stress != 0)) { if((tr->langopts.param[LOPT_PREFIXES]) || (prefix_type & SUFX_T)) { @@ -2303,6 +2310,7 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t char *p; int j, k; int n_digits; + int individual_digits; int charix_top=0; short charix[N_TR_SOURCE+4]; @@ -2338,7 +2346,9 @@ void *TranslateClause(Translator *tr, FILE *f_text, const void *vp_input, int *t for(p=source; *p != 0; p++) fputc(*p, f_logespeak); fprintf(f_logespeak,"ENDCLAUSE\n"); + fflush(f_logespeak); } +p = source; charix[charix_top+1] = 0; charix[charix_top+2] = 0x7fff; @@ -2947,7 +2957,11 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre words[word_count].pre_pause = 8; if(word_count > 0) { - words[word_count-1].flags |= FLAG_LAST_WORD; + ix = word_count-1; + while((ix > 0) && (IsBracket(sbuf[words[ix].start]))) + ix--; // the last word is a bracket, mark the previous word as last + words[ix].flags |= FLAG_LAST_WORD; + // FLAG_NOSPACE check to avoid recognizing .mr -mr if((terminator & CLAUSE_DOT) && !(words[word_count-1].flags & FLAG_NOSPACE)) words[word_count-1].flags |= FLAG_HAS_DOT; @@ -2962,8 +2976,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre char *pn; char *pw; int nw; - char number_buf[60]; - WORD_TAB num_wtab[15]; // copy of 'words', when splitting numbers into parts + char number_buf[150]; + WORD_TAB num_wtab[50]; // copy of 'words', when splitting numbers into parts // start speaking at a specified word position in the text? count_words++; @@ -2984,7 +2998,7 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre { // Languages with 100000 numbers. Remove thousands separators so that we can insert them again later pn = number_buf; - while(pn < &number_buf[sizeof(number_buf)-3]) + while(pn < &number_buf[sizeof(number_buf)-20]) { if(iswdigit(*pw)) { @@ -3010,15 +3024,19 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre for(n_digits=0; iswdigit(word[n_digits]); n_digits++); // count consecutive digits - if((n_digits > 4) && (word[0] != '0')) + if(n_digits > 4) { // word is entirely digits, insert commas and break into 3 digit "words" number_buf[0] = ' '; pn = &number_buf[1]; nx = n_digits; nw = 0; + individual_digits = 0; - while(pn < &number_buf[sizeof(number_buf)-3]) + if((n_digits > tr->langopts.max_digits) || (word[0] == '0')) + words[ix].flags |= FLAG_INDIVIDUAL_DIGITS; + + while(pn < &number_buf[sizeof(number_buf)-20]) { if(!isdigit(c = *pw++) && (c != tr->langopts.decimal_sep)) break; diff --git a/src/translate.h b/src/translate.h index 492cf414..dfd2e9d9 100644 --- a/src/translate.h +++ b/src/translate.h @@ -108,6 +108,7 @@ #define FLAG_HAS_DOT 0x10000 // dot after this word #define FLAG_COMMA_AFTER 0x20000 // comma after this word #define FLAG_MULTIPLE_SPACES 0x40000 // word is preceded by multiple spaces, newline, or tab +#define FLAG_INDIVIDUAL_DIGITS 0x80000 // speak number as individual digits #define FLAG_SUFFIX_VOWEL 0x08000000 // remember an initial vowel from the suffix #define FLAG_NO_TRACE 0x10000000 // passed to TranslateRules() to suppress dictionary lookup printout @@ -194,18 +195,18 @@ #define PUNCT_SAY_NAME 0x200000 #define CLAUSE_DOT 0x400000 -#define CLAUSE_NONE 0 + 0x04000 -#define CLAUSE_PARAGRAPH 70 + 0x80000 -#define CLAUSE_EOF 40 + 0x90000 -#define CLAUSE_VOICE 0 + 0x24000 -#define CLAUSE_PERIOD 40 + 0x80000 -#define CLAUSE_COMMA 20 + 0x41000 -#define CLAUSE_SHORTCOMMA 4 + 0x41000 -#define CLAUSE_SHORTFALL 4 + 0x40000 -#define CLAUSE_QUESTION 40 + 0x82000 -#define CLAUSE_EXCLAMATION 45 + 0x83000 -#define CLAUSE_COLON 30 + 0x40000 -#define CLAUSE_SEMICOLON 30 + 0x41000 +#define CLAUSE_NONE ( 0 + 0x04000) +#define CLAUSE_PARAGRAPH (70 + 0x80000) +#define CLAUSE_EOF (40 + 0x90000) +#define CLAUSE_VOICE ( 0 + 0x24000) +#define CLAUSE_PERIOD (40 + 0x80000) +#define CLAUSE_COMMA (20 + 0x41000) +#define CLAUSE_SHORTCOMMA ( 4 + 0x41000) +#define CLAUSE_SHORTFALL ( 4 + 0x40000) +#define CLAUSE_QUESTION (40 + 0x82000) +#define CLAUSE_EXCLAMATION (45 + 0x83000) +#define CLAUSE_COLON (30 + 0x40000) +#define CLAUSE_SEMICOLON (30 + 0x41000) #define SAYAS_CHARS 0x12 #define SAYAS_GLYPHS 0x13 @@ -439,6 +440,7 @@ typedef struct { int min_roman; int thousands_sep; int decimal_sep; + int max_digits; // max number of digits which can be spoken as an integer number (rather than individual digits) const char *ordinal_indicator; // UTF-8 string // bit 0, accent name before the letter name, bit 1 "capital" after letter name diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index 394e728e..211c09e0 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -611,7 +611,7 @@ void MakeVowelLists(void) prog_log_table = (PHONEME_PROG_LOG *)malloc(ix); if(prog_log_table == NULL) return; - fread(prog_log_table, 1, ix, f_prog_log); + ix = fread(prog_log_table, 1, ix, f_prog_log); fclose(f_prog_log); prog_log_end = prog_log_table + ix; n_prog_log = ix / sizeof(PHONEME_PROG_LOG);