Added languages: ca (Catalan) lv (Latvian) Numbers: allow for languages which have numbers for 100,000 and (or not) 10,000,000 (eg. hi, sw) Phoneme [ts] new files in phsource/ustop *_rules: fix crash for lettergroups numbers greater than 10, and better error reporting. Languages: eo, jbo: adjust syllable lengths. Language: en, fix "1st, 2nd, 3rd, 5th". But a full ordinal number feature is still needed. git-svn-id: https://espeak.svn.sourceforge.net/svnroot/espeak/trunk@202 d46cf337-b52f-0410-862d-fd96e6ae7743master
| Dictionary eo_dict | Dictionary eo_dict | ||||
| @- a aI aU e eI eU i | @- a aI aU e eI eU i | ||||
| o OI u uI | |||||
| o oI u uI | |||||
| * b d dZ f g h j | * b d dZ f g h j | ||||
| k l m n p r R s | k l m n p r R s | ||||
| Dictionary jbo_dict | Dictionary jbo_dict | ||||
| @ a aI aU e eI i l- | |||||
| o OI r- u | |||||
| @ @- a aI aU e eI i | |||||
| l- o oI r- u | |||||
| b d dZ f g h j k | |||||
| l m n N p R s S | |||||
| t tS v w x z Z | |||||
| * - b d dZ f g h | |||||
| j k l m n N p R | |||||
| s S t tS v w x z | |||||
| Z | |||||
| Dictionary ko_dict | Dictionary ko_dict | ||||
| Dictionary lv_dict | Dictionary lv_dict | ||||
| a a: ai au e e: ei i | a a: ai au e e: ei i | ||||
| i: ie iu o o: oi u u: | |||||
| ui uo | |||||
| i: ie iu o o: u u: ui | |||||
| uo | |||||
| : b c d dZ f g h | : b c d dZ f g h | ||||
| j J k l l^ m n n^ | j J k l l^ m n n^ | ||||
| : b c ch d d. dZ f | : b c ch d d. dZ f | ||||
| g h j J k kh l l. | g h j J k kh l l. | ||||
| m n N n. n^ p ph R | m n N n. n^ p ph R | ||||
| R2 s s. S; t t. t.h th | |||||
| tS v w z | |||||
| R2 s S s. S; t t. t.h | |||||
| th tS v w z | |||||
| Dictionary om_dict | |||||
| @# a a: E e I I# i: | |||||
| O o: U u: | |||||
| ** : a# b B c` d d` | |||||
| dZ f g h j k k` l | |||||
| m n n^ p p` R s S | |||||
| t t` tS v w z | |||||
| Dictionary ca_dict | |||||
| @ a a# aI e E i o | |||||
| O u U | |||||
| * ** : b B d D dZ; | |||||
| f g j J J^ k l l^ | |||||
| m n N n^ p Q r R | |||||
| R2 s S; t T tS ts tS; | |||||
| v v# w z Z Z; |
| ?5 _% pVRs'Ent | ?5 _% pVRs'Ent | ||||
| _& amp@sand | _& amp@sand | ||||
| _' kwoUt | _' kwoUt | ||||
| _( lEftbrakI2t | |||||
| _) raItbrakI2t | |||||
| _[ lEftbrakI2t | |||||
| _] raItbrakI2t | |||||
| _( lEftpa2rEn | |||||
| _) raItpa2rEn | |||||
| _* ast@rIsk | _* ast@rIsk | ||||
| _+ plVs | _+ plVs | ||||
| _, k0m@ | _, k0m@ | ||||
| _- h,aIf@n | _- h,aIf@n | ||||
| ?3 _- daS | |||||
| _. d0t | _. d0t | ||||
| _: koUl@n | _: koUl@n | ||||
| _; sEmIk'oUl@n | _; sEmIk'oUl@n | ||||
| _< ElaNg@L | |||||
| _< lEsDan | |||||
| _= i:kw@Lz | _= i:kw@Lz | ||||
| _> A@aNg@L | |||||
| _> greIt@Dan | |||||
| _? kwEstS@n | _? kwEstS@n | ||||
| _@ at|saIn | _@ at|saIn | ||||
| _[ lEftskwe@ | |||||
| _] raItskwe@ | |||||
| _^ s3:kVmfl,Eks | _^ s3:kVmfl,Eks | ||||
| ?5 _^ sIRkVmfl,Eks | ?5 _^ sIRkVmfl,Eks | ||||
| __ 'Vnd3sk,o@ | __ 'Vnd3sk,o@ | ||||
| ₨ ru:pi: | ₨ ru:pi: | ||||
| ₩ w0n | ₩ w0n | ||||
| § sEkS@n | § sEkS@n | ||||
| ¶ par@graf // in en_rules | |||||
| ¶ par@graf | |||||
| ¶¶ par@grafs | |||||
| ¤ kVr@nsIsaIn | ¤ kVr@nsIsaIn | ||||
| © k0pIraIt | © k0pIraIt | ||||
| ® rEdZIst3d | ® rEdZIst3d | ||||
| _dpt pOInt | _dpt pOInt | ||||
| _roman roUm@n_ | _roman roUm@n_ | ||||
| (1 st) f3:st | |||||
| (2 nd) sEk@nd | |||||
| (3 rd) T3:d | |||||
| (5 th) fIT | |||||
| // ABBREVIATIONS | // ABBREVIATIONS | ||||
| //************** | //************** | ||||
| i.e aIi:_! $pause | i.e aIi:_! $pause | ||||
| irc $abbrev | irc $abbrev | ||||
| lbs paUndz | lbs paUndz | ||||
| LBS $abbrev | |||||
| ltd lImI2tI2d | ltd lImI2tI2d | ||||
| mc m@k $alt2 // combine with the following word | mc m@k $alt2 // combine with the following word | ||||
| oem $abbrev | oem $abbrev | ||||
| xy $abbrev | xy $abbrev | ||||
| nd $only | |||||
| rd $only | |||||
| th $only | |||||
| st $only | |||||
| nd $only | |||||
| rd $only | |||||
| th $only | |||||
| st $only | |||||
| mr mIst3 $dot | mr mIst3 $dot | ||||
| mrs mIsI2z $dot | mrs mIsI2z $dot | ||||
| //ms mIz $dot | //ms mIz $dot | ||||
| dr d0kt3 $dot $capital | |||||
| lt $dot | |||||
| prof $dot | |||||
| rev $dot | |||||
| st $dot | |||||
| dr $dot | |||||
| lt $dot | |||||
| prof $dot | |||||
| rev $dot | |||||
| st $dot | |||||
| // not abbreviations when all-caps | // not abbreviations when all-caps | ||||
| all O:l $allcaps | all O:l $allcaps |
| %) % (% | %) % (% | ||||
| %%) % (_ _:: | %%) % (_ _:: | ||||
| // extra symbols (mostly in en_list) | |||||
| ¶¶ par@grafs |
| _0M4 duili'ono | _0M4 duili'ono | ||||
| _dpt komo_ | _dpt komo_ | ||||
| // accent names | |||||
| _acu dekst@-*akoRno | |||||
| _brv hoko | |||||
| _cir tsiRkumflekso | |||||
| _dia dupunktasupeRsigno | |||||
| _grv maldekst@-*akoRno | |||||
| _tld tildo | |||||
| _?? liteRo | |||||
| _. punkto | _. punkto | ||||
| _: dupunkto | |||||
| _; punktokomo | |||||
| _, komo | |||||
| _? demandosigno | |||||
| _- dividost@-*eko | |||||
| ~ tildo | |||||
| ° gradoI | |||||
| % p@-*otsento | |||||
| @ po | |||||
| & kaI | |||||
| v vo // not Roman numbers | v vo // not Roman numbers | ||||
| x ikso | x ikso | ||||
| // misc adverbs etc | // misc adverbs etc | ||||
| eĉ $brk | eĉ $brk | ||||
| (pli ol) pliol | |||||
| pli pl,i | |||||
| plej pl,eI | |||||
| // pronouns | // pronouns | ||||
| mi $u | mi $u |
| .group o | .group o | ||||
| _) o(_ o | _) o(_ o | ||||
| o o | o o | ||||
| oj OI | |||||
| oj oI | |||||
| -) oj (_ %oI | |||||
| -) on (_ %on | |||||
| .group p | .group p | ||||
| _) p(_ po | _) p(_ po | ||||
| \.) . | \.) . | ||||
| . (D _:k'omo_ | |||||
| * asteRisko | * asteRisko | ||||
| pundo | |||||
| (D _pundOI_: | |||||
| £ pundo | |||||
| £ (D _pundoI_: | |||||
| ! ,ekk@-*io, | ! ,ekk@-*io, | ||||
| : dupunkto | |||||
| - _ | - _ | ||||
| - (_a | - (_a | ||||
| $ dolaRo | $ dolaRo | ||||
| $ (D _dolaROI_: | |||||
| % p@-*otsento | |||||
| @ po | |||||
| & %kaI | |||||
| $ (D _dolaRoI_: | |||||
| _» kom'iJ^as||dE**'EtSas | _» kom'iJ^as||dE**'EtSas | ||||
| ^ TiRkumfl'exo | ^ TiRkumfl'exo | ||||
| € eU*o | |||||
| € eU**o | |||||
| % pOrTj'Ento | % pOrTj'Ento | ||||
| & ampERs'ant | & ampERs'ant | ||||
| @ a*R'oBa | @ a*R'oBa |
| _98 ath:'a:n@we: | _98 ath:'a:n@we: | ||||
| _99 nIn^j'a:n@we: | _99 nIn^j'a:n@we: | ||||
| _0C s'O: | |||||
| _0M1 h@z'a:r | |||||
| _0M2 d,Vsla:kh@_ // until we fix numbers > 100,000 | |||||
| _1M2 d,Vsla:kh@_ // until we fix numbers > 100,000 | |||||
| _0L l'a:kh | |||||
| _0C s'O: | |||||
| _0M1 h@z'a:r | |||||
| _0M2 l'a:kh | |||||
| _0M3 cr'ore | |||||
| _0M4 b'ilion // ?? English | |||||
| _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | _dpt _d@s@ml'o:_ // ?? what is Hi for "." ? | ||||
| // Single consonants | // Single consonants |
| _i ibu | _i ibu | ||||
| j Z@ | j Z@ | ||||
| k k@ | k k@ | ||||
| l l@ | |||||
| m m@ | |||||
| n n@ | |||||
| _l l@ | |||||
| _m m@ | |||||
| _n n@ | |||||
| _o obu | _o obu | ||||
| p p@ | p p@ | ||||
| r R@ | |||||
| _r R@ | |||||
| s s@ | s s@ | ||||
| t t@ | t t@ | ||||
| _u ubu | _u ubu | ||||
| i i_: $u // sentence break (recognised by eSpeak program). Try a short pause after ".i" | i i_: $u // sentence break (recognised by eSpeak program). Try a short pause after ".i" | ||||
| // end-of-clause [_;_] before these | // end-of-clause [_;_] before these | ||||
| noi _;_nOI $u | |||||
| poi _;_pOI $u | |||||
| noi _;_noI $u | |||||
| poi _;_poI $u | |||||
| no'u _;_nohu $u | no'u _;_nohu $u | ||||
| po'u _;_pohu $u | po'u _;_pohu $u | ||||
| goi _;_gOI $u | |||||
| goi _;_goI $u | |||||
| ija _;_iZa // should this series be unstressed? | ija _;_iZa // should this series be unstressed? | ||||
| ijanai _;_iZanaI | ijanai _;_iZanaI | ||||
| // terminators (include a pause after) | // terminators (include a pause after) | ||||
| ku ku_:: $u | ku ku_:: $u | ||||
| boi bOI_:: $u | |||||
| boi boI_:: $u | |||||
| vau vaU_:: $u | vau vaU_:: $u | ||||
| kei keI_:: $u | kei keI_:: $u | ||||
| toi tOI_:: $u | |||||
| toi toI_:: $u |
| a a | a a | ||||
| ai aI | ai aI | ||||
| au aU | au aU | ||||
| X) a (_ %a // single-syllable cmavo are unstressed | |||||
| X) ai (_ %aI | |||||
| X) au (_ %aU | |||||
| X) a (_ ,a // single-syllable cmavo are unstressed | |||||
| X) ai (_ ,aI | |||||
| X) au (_ ,aU | |||||
| .group b | .group b | ||||
| b b | b b | ||||
| .group e | .group e | ||||
| e e | e e | ||||
| ei eI | ei eI | ||||
| X) e (_ %e | |||||
| X) ei (_ %eI | |||||
| X) e (_ ,e | |||||
| X) ei (_ ,eI | |||||
| .group f | .group f | ||||
| f f | f f | ||||
| .group i | .group i | ||||
| i i | i i | ||||
| i (A j | i (A j | ||||
| X) i (_ %i | |||||
| X) i (A_ %j | |||||
| X) i (_ ,i | |||||
| X) i (A_ ,j | |||||
| .group j | .group j | ||||
| j Z | j Z | ||||
| k k | k k | ||||
| .group l | .group l | ||||
| l l- | |||||
| l l- // syllabic | |||||
| A) l l | A) l l | ||||
| l (A l | l (A l | ||||
| m m | m m | ||||
| .group n | .group n | ||||
| n n | |||||
| n n- // syllabic | |||||
| A) n n | |||||
| n (A n | |||||
| n (g N | n (g N | ||||
| n (k N | n (k N | ||||
| .group o | .group o | ||||
| o o | o o | ||||
| oi OI | |||||
| X) o (_ %o | |||||
| X) oi (_ %OI | |||||
| oi oI | |||||
| X) o (_ ,o | |||||
| X) oi (_ ,oI | |||||
| .group p | .group p | ||||
| p p | p p | ||||
| q kw | q kw | ||||
| .group r | .group r | ||||
| r r- | |||||
| r r- // syllabic | |||||
| A) r R | A) r R | ||||
| C) r (A @-* | |||||
| r (A R | r (A R | ||||
| .group u | .group u | ||||
| u u | u u | ||||
| u (A w | u (A w | ||||
| X) u (_ %u | |||||
| X) u (A_ %w | |||||
| X) u (_ ,u | |||||
| X) u (A_ ,w | |||||
| .group v | .group v | ||||
| v v | v v | ||||
| ' h | ' h | ||||
| _) ' (_ '@h@ | _) ' (_ '@h@ | ||||
| . _! | |||||
| . _! // dot | |||||
| _) . (@P1 _! // remove . prefix | _) . (@P1 _! // remove . prefix | ||||
| . (_S1 _! // remove . suffix | . (_S1 _! // remove . suffix | ||||
| ˈ ' // U+2c8 stress marker | |||||
| ˈ ' // U+2c8 stress marker (from syllable capitalisation) |
| _7C m,ias'aba | _7C m,ias'aba | ||||
| _8C m,ian'ane | _8C m,ian'ane | ||||
| _9C m,iat'isa | _9C m,iat'isa | ||||
| _1L l'akim'oJa | |||||
| _2L l'aki_|mb'ili | |||||
| _3L l'akit'atu | |||||
| _4L l'aki'n-ne | |||||
| _5L l'akit'ano | |||||
| _6L l'akis'ita | |||||
| _7L l'akis'aba | |||||
| _8L l'akin'ane | |||||
| _9L l'akit'isa | |||||
| _0M1 'elfu | _0M1 'elfu | ||||
| _1M1 ,elfum'oJa | _1M1 ,elfum'oJa | ||||
| _2M1 ,elfu_|mb'ili | _2M1 ,elfu_|mb'ili | ||||
| _7M1 ,elfus'aba | _7M1 ,elfus'aba | ||||
| _8M1 ,elfun'ane | _8M1 ,elfun'ane | ||||
| _9M1 ,elfut'isa | _9M1 ,elfut'isa | ||||
| _0M2 _|mili'oni | |||||
| _1M2 l'akim'oJa | |||||
| _2M2 l'aki_|mb'ili | |||||
| _3M2 l'akit'atu | |||||
| _4M2 l'aki'n-ne | |||||
| _5M2 l'akit'ano | |||||
| _6M2 l'akis'ita | |||||
| _7M2 l'akis'aba | |||||
| _8M2 l'akin'ane | |||||
| _9M2 l'akit'isa | |||||
| _0M3 _|mili'oni // 1,000,000 | |||||
| _0M4 _|bili'oni | |||||
| _dpt _nukta | _dpt _nukta | ||||
| _0and _|na | _0and _|na | ||||
| name catalan-test | |||||
| language ca | |||||
| gender male | |||||
| name latvian | |||||
| language lv | |||||
| gender male | |||||
| replace 03 o o: | |||||
| 58 phoneme tables | |||||
| 59 phoneme tables | |||||
| new total | new total | ||||
| base 101 101 | base 101 101 | ||||
| base2 24 120 | base2 24 120 | ||||
| hi 52 139 | hi 52 139 | ||||
| ta 17 142 | ta 17 142 | ||||
| hu 23 117 | hu 23 117 | ||||
| lv 28 123 | |||||
| nl 28 124 | nl 28 124 | ||||
| pl 18 114 | pl 18 114 | ||||
| sk 29 132 | sk 29 132 | ||||
| la 21 119 | la 21 119 | ||||
| es 9 121 | es 9 121 | ||||
| es_la 1 121 | es_la 1 121 | ||||
| ca 9 122 | |||||
| pt 28 137 | pt 28 137 | ||||
| pt_pt 20 137 | pt_pt 20 137 | ||||
| ro 36 144 | ro 36 144 | ||||
| kn 15 141 | kn 15 141 | ||||
| bn 59 147 | bn 59 147 | ||||
| ne 23 151 | ne 23 151 | ||||
| lv 28 123 | |||||
| hy 17 115 | hy 17 115 | ||||
| om 18 118 | |||||
| om 21 121 | |||||
| Data file Used by | Data file Used by | ||||
| b/b [b] base | b/b [b] base | ||||
| [<h>] la | [<h>] la | ||||
| [H] bn | [H] bn | ||||
| [h] bn | [h] bn | ||||
| [a#] om | |||||
| h/he [h] base | h/he [h] base | ||||
| [h] fi | [h] fi | ||||
| [H] hi | [H] hi | ||||
| [l] sk | [l] sk | ||||
| [l] ru | [l] ru | ||||
| [l] la | [l] la | ||||
| [l] ca | |||||
| [l] pt | [l] pt | ||||
| [l;] ro | [l;] ro | ||||
| l/_l [l] base | l/_l [l] base | ||||
| [l] sk | [l] sk | ||||
| [l] ru | [l] ru | ||||
| [l] la | [l] la | ||||
| [l] ca | |||||
| [l] pt | [l] pt | ||||
| [l;] ro | [l;] ro | ||||
| [l] zh | [l] zh | ||||
| [l] sk | [l] sk | ||||
| [l] ru | [l] ru | ||||
| [l] la | [l] la | ||||
| [l] ca | |||||
| [l] pt | [l] pt | ||||
| [l;] ro | [l;] ro | ||||
| [l] sq | [l] sq | ||||
| r3/r_trill [R2] base | r3/r_trill [R2] base | ||||
| [R3] base | [R3] base | ||||
| [r] af | [r] af | ||||
| [R2] lv | |||||
| [r] nl | [r] nl | ||||
| [R] sk | [R] sk | ||||
| [r*] sr | [r*] sr | ||||
| [x] pt | [x] pt | ||||
| [R2] lv | |||||
| r3/r_trill2 [R] base | r3/r_trill2 [R] base | ||||
| [r] cy | [r] cy | ||||
| [R] hr | [R] hr | ||||
| [r] af | [r] af | ||||
| [r] nl | [r] nl | ||||
| r3/r_trill.wav [R2] base | r3/r_trill.wav [R2] base | ||||
| [R2] lv | |||||
| [R] sk | [R] sk | ||||
| [r*] sr | [r*] sr | ||||
| [x] pt | [x] pt | ||||
| [R2] lv | |||||
| r3/r_u [(u)] base | r3/r_u [(u)] base | ||||
| r3/r_ulv [r"] hy | r3/r_ulv [r"] hy | ||||
| r3/r_uvl [r"] hy | r3/r_uvl [r"] hy | ||||
| [z2] fr | [z2] fr | ||||
| [z3] fr | [z3] fr | ||||
| [s2] hu | [s2] hu | ||||
| [s2] lv | |||||
| [s] es | [s] es | ||||
| [s#] pt | [s#] pt | ||||
| [z;] ro | [z;] ro | ||||
| [s2] is | [s2] is | ||||
| [s2] lv | |||||
| ufric/s! [s] base | ufric/s! [s] base | ||||
| [s2] fi | [s2] fi | ||||
| [s] fr | [s] fr | ||||
| [s2] hu | [s2] hu | ||||
| [s2] lv | |||||
| [s] es | [s] es | ||||
| [s#] pt | [s#] pt | ||||
| [s2] is | [s2] is | ||||
| [s2] lv | |||||
| ufric/s_continue [s2] fi | ufric/s_continue [s2] fi | ||||
| [s2] hu | [s2] hu | ||||
| [s2] is | |||||
| [s2] lv | [s2] lv | ||||
| [s2] is | |||||
| ufric/sh [S] base | ufric/sh [S] base | ||||
| [S] fr | [S] fr | ||||
| [s#] pt_pt | [s#] pt_pt | ||||
| ufric/xx3 [X] base | ufric/xx3 [X] base | ||||
| [Q] hy | [Q] hy | ||||
| ustop/c [c] base | ustop/c [c] base | ||||
| ustop/c_ejc [c`] om | |||||
| ustop/k [k] base | ustop/k [k] base | ||||
| [k] en | [k] en | ||||
| [k] fr | [k] fr | ||||
| [k] fr | [k] fr | ||||
| [kh] hi | [kh] hi | ||||
| [k] hu | [k] hu | ||||
| [k] lv | |||||
| [k] sk | [k] sk | ||||
| [k] el | [k] el | ||||
| [kh] zh | [kh] zh | ||||
| [k] sw | [k] sw | ||||
| [k] sq | [k] sq | ||||
| [kh] bn | [kh] bn | ||||
| [k] lv | |||||
| ustop/k_ejc [k`] om | |||||
| ustop/ki [c] base | ustop/ki [c] base | ||||
| [k] base | [k] base | ||||
| [k] base2 | [k] base2 | ||||
| [k] fi | [k] fi | ||||
| [k] fr | [k] fr | ||||
| [k] hu | [k] hu | ||||
| [k] lv | |||||
| [k] sk | [k] sk | ||||
| [k^] mk | [k^] mk | ||||
| [c] is | [c] is | ||||
| [c] tr | [c] tr | ||||
| [J] ku | [J] ku | ||||
| [c] ku | [c] ku | ||||
| [k] lv | |||||
| ustop/ki_ejc [k`] om | |||||
| ustop/kl [k] base | ustop/kl [k] base | ||||
| [k] base2 | [k] base2 | ||||
| [k] en | [k] en | ||||
| [k] fr | [k] fr | ||||
| [kh] hi | [kh] hi | ||||
| [k] hu | [k] hu | ||||
| [k] lv | |||||
| [k] sk | [k] sk | ||||
| [k] el | [k] el | ||||
| [k] zhy | [k] zhy | ||||
| [k] sw | [k] sw | ||||
| [kh] bn | [kh] bn | ||||
| [k] lv | |||||
| ustop/kr [k] base | ustop/kr [k] base | ||||
| [k] base2 | [k] base2 | ||||
| [k] en | [k] en | ||||
| [k] fr | [k] fr | ||||
| [kh] hi | [kh] hi | ||||
| [k] hu | [k] hu | ||||
| [k] lv | |||||
| [k] sk | [k] sk | ||||
| [k] el | [k] el | ||||
| [k] zhy | [k] zhy | ||||
| [k] sw | [k] sw | ||||
| [kh] bn | [kh] bn | ||||
| [k] lv | |||||
| ustop/k_unasp [k] base | ustop/k_unasp [k] base | ||||
| [k] base2 | [k] base2 | ||||
| [k] fi | [k] fi | ||||
| [k] hi | [k] hi | ||||
| [k] hu | [k] hu | ||||
| [k] lv | |||||
| [k] sk | [k] sk | ||||
| [k] el | [k] el | ||||
| [k] zhy | [k] zhy | ||||
| [k`] ko | [k`] ko | ||||
| [k] sq | [k] sq | ||||
| [k] bn | [k] bn | ||||
| [k] lv | |||||
| [k`] om | |||||
| ustop/k_unasp_ [k] zh | ustop/k_unasp_ [k] zh | ||||
| ustop/null [?] base | ustop/null [?] base | ||||
| [dh] om | |||||
| ustop/p [p] base | ustop/p [p] base | ||||
| [p] fr | [p] fr | ||||
| [p2] fr | [p2] fr | ||||
| [ph] hy | [ph] hy | ||||
| ustop/p_asp [ph] hi | ustop/p_asp [ph] hi | ||||
| [ph] hy | [ph] hy | ||||
| ustop/p_ejc [p`] om | |||||
| ustop/percus10 [(X1] base | ustop/percus10 [(X1] base | ||||
| ustop/pl [p] base | ustop/pl [p] base | ||||
| [p] base2 | [p] base2 | ||||
| [p] hi | [p] hi | ||||
| [ph] hi | [ph] hi | ||||
| [p] hu | [p] hu | ||||
| [p] lv | |||||
| [p] sk | [p] sk | ||||
| [p] la | [p] la | ||||
| [p;] ro | [p;] ro | ||||
| [p] sq | [p] sq | ||||
| [p] bn | [p] bn | ||||
| [ph] bn | [ph] bn | ||||
| [p] lv | |||||
| [ph] hy | [ph] hy | ||||
| ustop/pr [p] base | ustop/pr [p] base | ||||
| [p] base2 | [p] base2 | ||||
| [p] fr | [p] fr | ||||
| [p] hi | [p] hi | ||||
| [p] hu | [p] hu | ||||
| [p] lv | |||||
| [p] sk | [p] sk | ||||
| [p] la | [p] la | ||||
| [p;] ro | [p;] ro | ||||
| [p`] ko | [p`] ko | ||||
| [p] sq | [p] sq | ||||
| [p] bn | [p] bn | ||||
| [p] lv | |||||
| [p`] om | |||||
| ustop/p_unasp_ [p] base2 | ustop/p_unasp_ [p] base2 | ||||
| [p] fi | [p] fi | ||||
| [p] hi | [p] hi | ||||
| [p] hu | [p] hu | ||||
| [p] lv | |||||
| [p] sk | [p] sk | ||||
| [p] la | [p] la | ||||
| [p;] ro | [p;] ro | ||||
| [p] sq | [p] sq | ||||
| [p] bn | [p] bn | ||||
| [p] lv | |||||
| ustop/q [q] base | ustop/q [q] base | ||||
| ustop/q_u [q] base | ustop/q_u [q] base | ||||
| ustop/t [t] base | ustop/t [t] base | ||||
| [t3] fr | [t3] fr | ||||
| [t.] hi | [t.] hi | ||||
| [t.h] hi | [t.h] hi | ||||
| [t] lv | |||||
| [t] sk | [t] sk | ||||
| [t] el | [t] el | ||||
| [th] zh | [th] zh | ||||
| [t] sq | [t] sq | ||||
| [t.] bn | [t.] bn | ||||
| [t.h] bn | [t.h] bn | ||||
| [t] lv | |||||
| ustop/t_dnt [t] base | ustop/t_dnt [t] base | ||||
| [t[] base | [t[] base | ||||
| [t] base2 | [t] base2 | ||||
| [t] sw | [t] sw | ||||
| [t`] ko | [t`] ko | ||||
| [t] bn | [t] bn | ||||
| [t`] om | |||||
| ustop/t_dnt2 [t[] vi | ustop/t_dnt2 [t[] vi | ||||
| ustop/t_ejc [t`] om | |||||
| ustop/t_hi [t] hi | ustop/t_hi [t] hi | ||||
| [t] bn | [t] bn | ||||
| [th] bn | [th] bn | ||||
| [ts;] ro | [ts;] ro | ||||
| [z] zhy | [z] zhy | ||||
| [tsh] zh | [tsh] zh | ||||
| [ts] hy | |||||
| ustop/ts_ [ts] base2 | |||||
| [ts] de | |||||
| [ts] eo | |||||
| [ts] hu | |||||
| [ts] lv | [ts] lv | ||||
| [ts] pl | |||||
| [ts] ru | |||||
| [ts;] ro | |||||
| [ts] hy | [ts] hy | ||||
| ustop/ts2 [ts] lv | |||||
| ustop/tsh [tS] base | ustop/tsh [tS] base | ||||
| [c] zhy | [c] zhy | ||||
| ustop/tsh_ [tS] base | ustop/tsh_ [tS] base | ||||
| [t2] fr | [t2] fr | ||||
| [t3] fr | [t3] fr | ||||
| [t.] hi | [t.] hi | ||||
| [t] lv | |||||
| [t] sk | [t] sk | ||||
| [t] el | [t] el | ||||
| [t] sq | [t] sq | ||||
| [t.] bn | [t.] bn | ||||
| [t] lv | |||||
| ustop/tsh_pzd [tS;] zh | ustop/tsh_pzd [tS;] zh | ||||
| ustop/tsh_pzd_unasp [tS;] zh | ustop/tsh_pzd_unasp [tS;] zh | ||||
| ustop/tsh_sr [tS] sr | ustop/tsh_sr [tS] sr | ||||
| [c] hu | [c] hu | ||||
| [c`] ko | [c`] ko | ||||
| [c] bn | [c] bn | ||||
| [c`] om | |||||
| ustop/ts_pzd3 [tS;] hr | ustop/ts_pzd3 [tS;] hr | ||||
| [dZ;] hr | [dZ;] hr | ||||
| ustop/t_sr [d] sr | ustop/t_sr [d] sr | ||||
| vdiph/8u [oU] en_us | vdiph/8u [oU] en_us | ||||
| [ou] zh | [ou] zh | ||||
| vdiph/aae [aI] en_us | vdiph/aae [aI] en_us | ||||
| vdiph/aai [aai] zhy | |||||
| vdiph/aai [ai] lv | |||||
| [aai] zhy | |||||
| [aI] ne | [aI] ne | ||||
| [ai] lv | |||||
| vdiph/aai_2 [AI] af | vdiph/aai_2 [AI] af | ||||
| [AY] cy | [AY] cy | ||||
| vdiph/aai_3 [ai] fi | vdiph/aai_3 [ai] fi | ||||
| vdiph/aau [au] fi | vdiph/aau [au] fi | ||||
| [au] lv | |||||
| vdiph/aau_2 [aU] en_wi | vdiph/aau_2 [aU] en_wi | ||||
| [aU] de | [aU] de | ||||
| [VU] nl | [VU] nl | ||||
| [eI] hy | [eI] hy | ||||
| vdiph/eei_2 [eI] eo | vdiph/eei_2 [eI] eo | ||||
| [ei] fi | [ei] fi | ||||
| [eI] id | |||||
| [ei] lv | [ei] lv | ||||
| [eI] id | |||||
| vdiph/eei_3 [eI] sk | vdiph/eei_3 [eI] sk | ||||
| [eI] ku | [eI] ku | ||||
| vdiph/eeu [EU] pt | vdiph/eeu [EU] pt | ||||
| [OI] en_n | [OI] en_n | ||||
| [OI] cy | [OI] cy | ||||
| [OY] cy | [OY] cy | ||||
| [OI] eo | |||||
| [oI] eo | |||||
| [oi] fi | [oi] fi | ||||
| [oi] lv | |||||
| [OI] no | [OI] no | ||||
| [oi] zhy | [oi] zhy | ||||
| [oi] lv | |||||
| vdiph/ooi_2 [OI] af | vdiph/ooi_2 [OI] af | ||||
| vdiph/ooi_3 [OI] en_rp | vdiph/ooi_3 [OI] en_rp | ||||
| [aI] en_wm | [aI] en_wm | ||||
| vdiph/ooi_4 [OI] en_us | vdiph/ooi_4 [OI] en_us | ||||
| vdiph/oou [oU] cs | vdiph/oou [oU] cs | ||||
| [OU] grc | [OU] grc | ||||
| [au] lv | |||||
| vdiph/ou [ou] fi | vdiph/ou [ou] fi | ||||
| [ou] zhy | [ou] zhy | ||||
| [oU] ne | [oU] ne | ||||
| vdiph/ui [uI] base2 | vdiph/ui [uI] base2 | ||||
| [uI] eo | [uI] eo | ||||
| [ui] fi | [ui] fi | ||||
| [ui] lv | |||||
| [uI] vi | [uI] vi | ||||
| [ui] zhy | [ui] zhy | ||||
| [uI] ne | [uI] ne | ||||
| [ui] lv | |||||
| vdiph/u-i [yI] vi | vdiph/u-i [yI] vi | ||||
| vdiph/ui_2 [uI] af | vdiph/ui_2 [uI] af | ||||
| vdiph/ui_3 [uI] cy | vdiph/ui_3 [uI] cy | ||||
| [D] es | [D] es | ||||
| voc/dh_ [D] base | voc/dh_ [D] base | ||||
| [D] es | [D] es | ||||
| voc/dh_om [d`] om | |||||
| voc/j [J^] base | voc/j [J^] base | ||||
| voc/Q [Q] base | voc/Q [Q] base | ||||
| [Q^] base | [Q^] base | ||||
| vowel/& [a] en_rp | vowel/& [a] en_rp | ||||
| [&] fi | [&] fi | ||||
| [&:] hi | [&:] hi | ||||
| [&] lv | |||||
| [&:] lv | |||||
| [&] sv | [&] sv | ||||
| [&] bn | [&] bn | ||||
| [&:] bn | [&:] bn | ||||
| [&] lv | |||||
| [&:] lv | |||||
| vowel/0 [0] en | vowel/0 [0] en | ||||
| [O] hi | [O] hi | ||||
| [O] pt | [O] pt | ||||
| [&/] pt | [&/] pt | ||||
| [a#] rw | [a#] rw | ||||
| [a/] rw | [a/] rw | ||||
| [a] om | |||||
| vowel/a_2 [a] base2 | vowel/a_2 [a] base2 | ||||
| [a] en_wi | [a] en_wi | ||||
| [A:] en_wi | [A:] en_wi | ||||
| [A@] en_wi | [A@] en_wi | ||||
| [aa] en_wi | [aa] en_wi | ||||
| [a] eo | [a] eo | ||||
| [a] ca | |||||
| [A] pt | [A] pt | ||||
| [a] pt_pt | [a] pt_pt | ||||
| [a] ro | [a] ro | ||||
| [a/] sw | [a/] sw | ||||
| [a/] sq | [a/] sq | ||||
| [a] kn | [a] kn | ||||
| [a] om | |||||
| vowel/a_3 [a] en_sc | vowel/a_3 [a] en_sc | ||||
| [a/] en_sc | [a/] en_sc | ||||
| [A:] en_sc | [A:] en_sc | ||||
| [a] is | [a] is | ||||
| [A] zh | [A] zh | ||||
| [A] da | [A] da | ||||
| [a:] om | |||||
| vowel/a#_3 [a2] en | vowel/a#_3 [a2] en | ||||
| [a2] en_n | [a2] en_n | ||||
| [a2] en_us | [a2] en_us | ||||
| [@] de | [@] de | ||||
| [a] hi | [a] hi | ||||
| [a#] ru | [a#] ru | ||||
| [a#] ca | |||||
| [&] pt_pt | [&] pt_pt | ||||
| [&/] pt_pt | [&/] pt_pt | ||||
| [@] vi | [@] vi | ||||
| [a] bn | [a] bn | ||||
| vowel/a_4 [a/] el | vowel/a_4 [a/] el | ||||
| [a] vi | [a] vi | ||||
| [a:] om | |||||
| vowel/a_5 [a:] ta | vowel/a_5 [a:] ta | ||||
| [a/] it | [a/] it | ||||
| [a] la | [a] la | ||||
| [a] sq | [a] sq | ||||
| [a:] ml | [a:] ml | ||||
| [a:] kn | [a:] kn | ||||
| [A:] om | |||||
| vowel/a_6 [a] fr | vowel/a_6 [a] fr | ||||
| [a2] fr | [a2] fr | ||||
| vowel/aa [a] fi | vowel/aa [a] fi | ||||
| [A] fr_ca | [A] fr_ca | ||||
| [a] lv | |||||
| [a:] lv | |||||
| [A] no | [A] no | ||||
| [A:] no | [A:] no | ||||
| [aa] zhy | [aa] zhy | ||||
| [a] lv | |||||
| [a:] lv | |||||
| [a] hy | [a] hy | ||||
| vowel/aa# [O] en_us | vowel/aa# [O] en_us | ||||
| [0] en_wi | [0] en_wi | ||||
| [e] hr | [e] hr | ||||
| [e/] it | [e/] it | ||||
| [e:] la | [e:] la | ||||
| [e] ca | |||||
| [e] pt | [e] pt | ||||
| [e] pt_pt | [e] pt_pt | ||||
| [e] grc | [e] grc | ||||
| [E3] sv | [E3] sv | ||||
| [E] ku | [E] ku | ||||
| vowel/e_mid [E] en_rp | vowel/e_mid [E] en_rp | ||||
| [e] jbo | |||||
| [E] fr | [E] fr | ||||
| [E2] fr | [E2] fr | ||||
| [E] fr_ca | [E] fr_ca | ||||
| [E] hr | [E] hr | ||||
| [E] it | [E] it | ||||
| [E] es | [E] es | ||||
| [E] ca | |||||
| [E] pt_pt | [E] pt_pt | ||||
| [E] no | [E] no | ||||
| [E] is | [E] is | ||||
| [E] de | [E] de | ||||
| [E2] de | [E2] de | ||||
| [E:] de | [E:] de | ||||
| [e] jbo | |||||
| [e] fi | [e] fi | ||||
| [e] lv | |||||
| [e:] lv | |||||
| [E] nl | [E] nl | ||||
| [e] sk | [e] sk | ||||
| [e] es | [e] es | ||||
| [e] tr | [e] tr | ||||
| [E] ko | [E] ko | ||||
| [e] kn | [e] kn | ||||
| [e] lv | |||||
| [e:] lv | |||||
| [E] om | [E] om | ||||
| vowel/@_fnt [@] en_wi | vowel/@_fnt [@] en_wi | ||||
| [@2] en_wi | [@2] en_wi | ||||
| [i] fr | [i] fr | ||||
| [i:] fr | [i:] fr | ||||
| [i:] sk | [i:] sk | ||||
| [i:] lv | |||||
| vowel/i_4 [i] fi | vowel/i_4 [i] fi | ||||
| [i] hu | [i] hu | ||||
| [I] it | [I] it | ||||
| [i/] pt_pt | [i/] pt_pt | ||||
| [y] ro | [y] ro | ||||
| vowel/i_6 [i] ta | vowel/i_6 [i] ta | ||||
| [i] lv | |||||
| [i:] lv | |||||
| [i] hr | [i] hr | ||||
| [i] tr | [i] tr | ||||
| [i] ku | [i] ku | ||||
| [i] id | [i] id | ||||
| [i] ml | [i] ml | ||||
| [i] kn | [i] kn | ||||
| [i] lv | |||||
| vowel/i#_6 [i.] zh | vowel/i#_6 [i.] zh | ||||
| vowel/i_7 [i] pl | vowel/i_7 [i] pl | ||||
| vowel/i#_7 [i[] zh | vowel/i#_7 [i[] zh | ||||
| [o] it | [o] it | ||||
| [o/] it | [o/] it | ||||
| [O] la | [O] la | ||||
| [o] ca | |||||
| [o] pt_pt | [o] pt_pt | ||||
| [o] grc | [o] grc | ||||
| [o:] sv | [o:] sv | ||||
| [O] de | [O] de | ||||
| [o] eo | [o] eo | ||||
| [O] es | [O] es | ||||
| [O] ca | |||||
| [o] el | [o] el | ||||
| [O] sv | [O] sv | ||||
| [O] no | [O] no | ||||
| [O@] en_wm | [O@] en_wm | ||||
| [O:] af | [O:] af | ||||
| [o] fi | [o] fi | ||||
| [o] lv | |||||
| [o:] lv | |||||
| [o] sk | [o] sk | ||||
| [o:] sk | [o:] sk | ||||
| [o] hr | [o] hr | ||||
| [o] vi | [o] vi | ||||
| [O/] sq | [O/] sq | ||||
| [o] lv | |||||
| [o:] lv | |||||
| vowel/oo_2 [0] en_sc | vowel/oo_2 [0] en_sc | ||||
| [O] cy | [O] cy | ||||
| [o] cs | [o] cs | ||||
| [U:] ta | [U:] ta | ||||
| vowel/u#_4 [U] en_sc | vowel/u#_4 [U] en_sc | ||||
| [u:] en_sc | [u:] en_sc | ||||
| vowel/u_5 [u] sw | |||||
| vowel/u_5 [u] lv | |||||
| [u:] lv | |||||
| [u] sw | |||||
| vowel/u_6 [U] pt_pt | vowel/u_6 [U] pt_pt | ||||
| [u] pt_pt | [u] pt_pt | ||||
| [u] ku | [u] ku | ||||
| vowel/uu# [U] ku | vowel/uu# [U] ku | ||||
| vowel/uu_2 [U] base2 | vowel/uu_2 [U] base2 | ||||
| [U] de | [U] de | ||||
| [U] ca | |||||
| [U] tr | [U] tr | ||||
| [u] lv | |||||
| [u:] lv | |||||
| vowel/uu_3 [u] af | vowel/uu_3 [u] af | ||||
| [y] zh | [y] zh | ||||
| vowel/uu_4 [U] fi | vowel/uu_4 [U] fi | ||||
| [y] is | [y] is | ||||
| [y] hy | [y] hy | ||||
| vweak/@ [@#] om | vweak/@ [@#] om | ||||
| vweak/a [a#] om | |||||
| vwl_af/@ [@] af | vwl_af/@ [@] af | ||||
| vwl_af/I [I] af | vwl_af/I [I] af | ||||
| vwl_af/r@ [@] af | vwl_af/r@ [@] af | ||||
| vwl_zh/uo [uo] zh | vwl_zh/uo [uo] zh | ||||
| vwl_zh/y& [y&] zh | vwl_zh/y& [y&] zh | ||||
| vwl_zh/yee [yE] zh | vwl_zh/yee [yE] zh | ||||
| w/iw_ [w/] base | |||||
| w/w [w] base | w/w [w] base | ||||
| w/_w [w] base | w/_w [w] base | ||||
| [w] zh | [w] zh | ||||
| w/xw [(@)] base | w/xw [(@)] base | ||||
| [(a)] base | [(a)] base | ||||
| [(e)] base | [(e)] base | ||||
| [(i)] base | |||||
| [(o)] base | [(o)] base | ||||
| [(u)] base | [(u)] base | ||||
| x/b [b] base | x/b [b] base | ||||
| [d] is | [d] is | ||||
| [d] id | [d] id | ||||
| [d.] bn | [d.] bn | ||||
| [d`] om | |||||
| x/d_ [d] base | x/d_ [d] base | ||||
| [d[] base | [d[] base | ||||
| [d] base2 | [d] base2 |
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| //==================================================== | |||||
| // Catalan - based on Spanish and Base2 | |||||
| //==================================================== | |||||
| phoneme a | |||||
| vowel starttype (a) endtype (a) | |||||
| length 180 | |||||
| formants vowel/a_2 | |||||
| reduceto a# 2 | |||||
| endphoneme | |||||
| phoneme a# | |||||
| vowel starttype (@) endtype (@) | |||||
| length 170 | |||||
| formants vowel/a#_3 | |||||
| unstressed | |||||
| endphoneme | |||||
| phoneme e | |||||
| vowel starttype (e) endtype (e) | |||||
| length 170 | |||||
| formants vowel/e | |||||
| reduceto @ 2 | |||||
| endphoneme | |||||
| phoneme E | |||||
| vowel starttype (e) endtype (e) | |||||
| length 180 | |||||
| formants vowel/e_mid | |||||
| reduceto @ 2 | |||||
| endphoneme | |||||
| phoneme O | |||||
| vowel starttype (o) endtype (o) | |||||
| length 170 | |||||
| formants vowel/oo | |||||
| reduceto U 2 | |||||
| endphoneme | |||||
| phoneme o | |||||
| vowel starttype (o) endtype (o) | |||||
| length 170 | |||||
| formants vowel/o | |||||
| reduceto U 2 | |||||
| endphoneme | |||||
| phoneme U | |||||
| vowel starttype (u) endtype (u) | |||||
| length 160 | |||||
| formants vowel/uu_2 | |||||
| unstressed | |||||
| endphoneme | |||||
| phoneme l | |||||
| liquid | |||||
| length 100 | |||||
| lengthmod 7 | |||||
| beforenotvowel l/2 // use 'dark' [l] after a vowel | |||||
| formants l/l | |||||
| after _ l/_l t l/tl | |||||
| endphoneme | |||||
| phoneme aU | phoneme aU | ||||
| vowel starttype (a) endtype (u) | vowel starttype (a) endtype (u) | ||||
| length 230 | |||||
| length 250 | |||||
| formants vdiph/au_4 | formants vdiph/au_4 | ||||
| endphoneme | endphoneme | ||||
| phoneme eU | phoneme eU | ||||
| vowel starttype (e) endtype (u) | vowel starttype (e) endtype (u) | ||||
| length 230 | |||||
| length 250 | |||||
| formants vdiph/eu | formants vdiph/eu | ||||
| endphoneme | endphoneme | ||||
| phoneme aI | phoneme aI | ||||
| vowel starttype (a) endtype (i) | vowel starttype (a) endtype (i) | ||||
| length 240 | |||||
| length 250 | |||||
| formants vdiph/ai | formants vdiph/ai | ||||
| endphoneme | endphoneme | ||||
| phoneme eI | phoneme eI | ||||
| vowel starttype (e) endtype (i) | vowel starttype (e) endtype (i) | ||||
| length 230 | |||||
| length 250 | |||||
| formants vdiph/eei_2 | formants vdiph/eei_2 | ||||
| endphoneme | endphoneme | ||||
| phoneme OI | |||||
| phoneme oI | |||||
| vowel starttype (o) endtype (i) | vowel starttype (o) endtype (i) | ||||
| length 240 | |||||
| length 250 | |||||
| formants vdiph/ooi | formants vdiph/ooi | ||||
| endphoneme | endphoneme | ||||
| phoneme uI | phoneme uI | ||||
| vowel starttype (u) endtype (i) | vowel starttype (u) endtype (i) | ||||
| length 230 | |||||
| length 250 | |||||
| formants vdiph/ui | formants vdiph/ui | ||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| phoneme @ | |||||
| vowel starttype (@) endtype (@) | |||||
| length 120 | |||||
| formants vowel/8_7 | |||||
| endphoneme | |||||
| phoneme i | |||||
| vowel starttype (i) endtype (i) | |||||
| length 110 | |||||
| formants vowel/i_6 | |||||
| linkout ; | |||||
| endphoneme | |||||
| phoneme i: | |||||
| vowel starttype (i) endtype (i) | |||||
| length 300 | |||||
| formants vowel/i_6 | |||||
| linkout ; | |||||
| endphoneme | |||||
| phoneme e | |||||
| vowel starttype (e) endtype (e) | |||||
| length 120 | |||||
| formants vowel/e_mid2 | |||||
| endphoneme | |||||
| phoneme e: | |||||
| vowel starttype (e) endtype (e) | |||||
| length 330 | |||||
| formants vowel/e_mid2 | |||||
| endphoneme | |||||
| phoneme & | |||||
| vowel starttype (a) endtype (a) | |||||
| length 120 | |||||
| formants vowel/& | |||||
| endphoneme | |||||
| phoneme &: | |||||
| vowel starttype (a) endtype (a) | |||||
| length 330 | |||||
| formants vowel/& | |||||
| endphoneme | |||||
| phoneme a | |||||
| vowel starttype (a) endtype (a) | |||||
| length 120 | |||||
| formants vowel/aa | |||||
| endphoneme | |||||
| phoneme a: | |||||
| vowel starttype (a) endtype (a) | |||||
| length 350 | |||||
| formants vowel/aa | |||||
| endphoneme | |||||
| phoneme o | |||||
| vowel starttype (o) endtype (o) | |||||
| length 120 | |||||
| formants vowel/oo_1 | |||||
| endphoneme | |||||
| phoneme o: | |||||
| vowel starttype (o) endtype (o) | |||||
| length 330 | |||||
| formants vowel/oo_1 | |||||
| endphoneme | |||||
| phoneme u | |||||
| vowel starttype (u) endtype (u) | |||||
| length 110 | |||||
| formants vowel/u_5 | |||||
| endphoneme | |||||
| phoneme u: | |||||
| vowel starttype (u) endtype (u) | |||||
| length 330 | |||||
| formants vowel/u_5 | |||||
| endphoneme | |||||
| phoneme ai | |||||
| vowel starttype (a) endtype (i) | |||||
| length 310 | |||||
| long | |||||
| formants vdiph/aai | |||||
| endphoneme | |||||
| phoneme ei | |||||
| vowel starttype (e) endtype (i) | |||||
| length 300 | |||||
| long | |||||
| formants vdiph/eei_2 | |||||
| endphoneme | |||||
| phoneme au | |||||
| vowel starttype (a) endtype (u) | |||||
| length 300 | |||||
| long | |||||
| formants vdiph/aau | |||||
| endphoneme | |||||
| phoneme uo | |||||
| vowel starttype (u) endtype (a) | |||||
| length 300 | |||||
| long | |||||
| // formants vdiph2/uo | |||||
| formants vdiph2/uaa | |||||
| endphoneme | |||||
| phoneme oi | |||||
| vowel starttype (o) endtype (i) | |||||
| length 290 | |||||
| long | |||||
| formants vdiph/ooi | |||||
| endphoneme | |||||
| phoneme ui | |||||
| vowel starttype (u) endtype (i) | |||||
| length 290 | |||||
| long | |||||
| formants vdiph/ui | |||||
| endphoneme | |||||
| phoneme ie | |||||
| vowel starttype (i) endtype (e) | |||||
| length 290 | |||||
| long | |||||
| formants vdiph2/ie_2 | |||||
| endphoneme | |||||
| phoneme iu | |||||
| vowel starttype (i) endtype (u) | |||||
| length 290 | |||||
| long | |||||
| formants vdiph2/iu_2 | |||||
| endphoneme | |||||
| phoneme R2 // this is [R] from Slovak/Czech | |||||
| liquid | |||||
| vowelin f1=0 f2=1700 -300 300 f3=-300 80 | |||||
| vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk | |||||
| formants r3/r_trill+r3/r_trill.wav%50 | |||||
| trill | |||||
| lengthmod 6 | |||||
| endphoneme | |||||
| phoneme ts | |||||
| vls alv afr sibilant lengthenstop | |||||
| vowelin f1=0 f2=1700 -300 300 f3=-100 80 | |||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | |||||
| lengthmod 2 | |||||
| wave ustop/ts2%90 | |||||
| before _ ustop/ts_ | |||||
| endphoneme | |||||
| phoneme t // try disable this and try using English [t] | |||||
| vls alv stop lengthenstop | |||||
| vowelin f1=0 f2=1700 -300 300 f3=-100 80 | |||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | |||||
| lengthmod 2 | |||||
| wave ustop/t_short%115 | |||||
| before _ ustop/t_ | |||||
| switchvoicing d | |||||
| endphoneme | |||||
| phoneme p | |||||
| vls blb stop | |||||
| vowelin f1=0 f2=1000 -50 -100 f3=-200 80 | |||||
| vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30 | |||||
| lengthmod 2 | |||||
| wave ustop/p_unasp%120 | |||||
| before _ ustop/p_unasp_%80 | |||||
| before l ustop/pl | |||||
| switchvoicing b | |||||
| endphoneme | |||||
| phoneme k | |||||
| vls vel stop | |||||
| vowelin f1=0 f2=2300 200 400 f3=-100 80 | |||||
| vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20 | |||||
| lengthmod 2 | |||||
| wave ustop/k_unasp%60 // weaker | |||||
| before _ ustop/k_ | |||||
| before r ustop/kr | |||||
| before l ustop/kl | |||||
| before (i) ustop/ki | |||||
| before l^ ustop/ki | |||||
| switchvoicing g | |||||
| endphoneme | |||||
| phoneme s2 // second part of long [s:] | |||||
| vls alv frc sibilant | |||||
| vowelin f1=0 f2=1700 -300 300 f3=-100 80 | |||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | |||||
| lengthmod 3 | |||||
| wave ufric/s_continue | |||||
| before _ ufric/s_ | |||||
| before p ufric/s! | |||||
| before t ufric/s! | |||||
| before k ufric/s! | |||||
| switchvoicing z | |||||
| endphoneme | |||||
| phoneme e | phoneme e | ||||
| vowel starttype (e) endtype (e) | vowel starttype (e) endtype (e) | ||||
| length 170 | length 170 | ||||
| formants vowel/e_mid | |||||
| formants vowel/e_mid2 | |||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 colr=1 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20 | ||||
| lengthmod 2 | lengthmod 2 | ||||
| wave ustop/ts | wave ustop/ts | ||||
| before _ ustop/ts_ | |||||
| endphoneme | endphoneme | ||||
| phoneme u: | phoneme u: | ||||
| vowel starttype (u) endtype (u) | vowel starttype (u) endtype (u) | ||||
| length 250 | |||||
| length 260 | |||||
| formants vowel/u | formants vowel/u | ||||
| endphoneme | endphoneme | ||||
| formants NULL | formants NULL | ||||
| starttype _ endtype _ | starttype _ endtype _ | ||||
| length 1 | length 1 | ||||
| lengthmod 1 | |||||
| lengthmod 5 | |||||
| endphoneme | endphoneme | ||||
| phoneme _: // Standard pause | phoneme _: // Standard pause | ||||
| before N DFT-40+nn/inn | before N DFT-40+nn/inn | ||||
| before ; DFT-40+j2/xj2 | before ; DFT-40+j2/xj2 | ||||
| before l DFT-40+l/xl | before l DFT-40+l/xl | ||||
| before w DFT-30+w/xw | |||||
| before j DFT-30+j/xj | before j DFT-30+j/xj | ||||
| before r- DFT-60+r/xr | before r- DFT-60+r/xr | ||||
| before r/ DFT+r3/r_i | before r/ DFT+r3/r_i | ||||
| vowelout len=50 | vowelout len=50 | ||||
| length 100 | length 100 | ||||
| formants w/w_ | formants w/w_ | ||||
| after (i) w/iw_ | |||||
| lengthmod 7 | lengthmod 7 | ||||
| beforevowel w | beforevowel w | ||||
| endphoneme | endphoneme | ||||
| phonemetable hu base | phonemetable hu base | ||||
| include ph_hungarian | include ph_hungarian | ||||
| phonemetable lv base | |||||
| include ph_latvian | |||||
| phonemetable nl base | phonemetable nl base | ||||
| include ph_dutch | include ph_dutch | ||||
| phonemetable es_la es | phonemetable es_la es | ||||
| include ph_spanish_la | include ph_spanish_la | ||||
| phonemetable ca es | |||||
| include ph_catalan | |||||
| phonemetable pt base2 | phonemetable pt base2 | ||||
| include ph_pt_brazil | include ph_pt_brazil | ||||
| phonemetable ne hi | phonemetable ne hi | ||||
| include ph_nepali | include ph_nepali | ||||
| phonemetable lv base | |||||
| include ph_latvian | |||||
| phonemetable hy base | phonemetable hy base | ||||
| include ph_armenian_west | include ph_armenian_west | ||||
| phonemetable om base | phonemetable om base | ||||
| include ph_oromo | include ph_oromo | ||||
| {"long", 0x2000000+phLONG}, | {"long", 0x2000000+phLONG}, | ||||
| {"brkafter", 0x2000000+phBRKAFTER}, | {"brkafter", 0x2000000+phBRKAFTER}, | ||||
| {"nonsyllabic",0x2000000+phNONSYLLABIC}, | {"nonsyllabic",0x2000000+phNONSYLLABIC}, | ||||
| {"lengthenstop",0x2000000+phLENGTHENSTOP}, | |||||
| // voiced / unvoiced | // voiced / unvoiced | ||||
| {"vcd", 0x2000000+phVOICED}, | {"vcd", 0x2000000+phVOICED}, | ||||
| float total; | float total; | ||||
| float pkheight; | float pkheight; | ||||
| int marker1_set=0; | int marker1_set=0; | ||||
| int frame_vowelbreak=NULL; | |||||
| int frame_vowelbreak=0; | |||||
| SpectFrame *fr; | SpectFrame *fr; | ||||
| wxString path_sep = _T("/"); | wxString path_sep = _T("/"); | ||||
| int hash_counts[N_HASH_DICT]; | int hash_counts[N_HASH_DICT]; | ||||
| char *hash_chains[N_HASH_DICT]; | char *hash_chains[N_HASH_DICT]; | ||||
| char letterGroupsDefined[N_LETTER_GROUPS]; | |||||
| MNEM_TAB mnem_flags[] = { | MNEM_TAB mnem_flags[] = { | ||||
| // these in the first group put a value in bits0-3 of dictionary_flags | // these in the first group put a value in bits0-3 of dictionary_flags | ||||
| text_not_phonemes = 0; | text_not_phonemes = 0; | ||||
| phonetic = word = nullstring; | phonetic = word = nullstring; | ||||
| if(memcmp(linebuf,"_-",2)==0) | |||||
| { | |||||
| step=1; // TEST | |||||
| } | |||||
| p = linebuf; | p = linebuf; | ||||
| // while(isspace2(*p)) p++; | // while(isspace2(*p)) p++; | ||||
| break; | break; | ||||
| case 1: | case 1: | ||||
| if(c == '-') | |||||
| if((c == '-') && (word[0] != '_')) | |||||
| { | { | ||||
| flag_codes[n_flag_codes++] = BITNUM_FLAG_HYPHENATED; | flag_codes[n_flag_codes++] = BITNUM_FLAG_HYPHENATED; | ||||
| c = ' '; | c = ' '; | ||||
| c = *p++ - '0'; | c = *p++ - '0'; | ||||
| value = *p++ - '0'; | value = *p++ - '0'; | ||||
| c = c * 10 + value; | c = c * 10 + value; | ||||
| if((value < 0) || (value > 9) || (c <= 0) || (c >= N_LETTER_GROUPS)) | |||||
| if((value < 0) || (value > 9)) | |||||
| { | { | ||||
| c = 0; | c = 0; | ||||
| fprintf(f_log,"%5d: Expected 2 digits after 'L'",linenum); | |||||
| fprintf(f_log,"%5d: Expected 2 digits after 'L'\n",linenum); | |||||
| error_count++; | |||||
| } | |||||
| else | |||||
| if((c <= 0) || (c >= N_LETTER_GROUPS) || (letterGroupsDefined[(int)c] == 0)) | |||||
| { | |||||
| fprintf(f_log,"%5d: Letter group L%.2d not defined\n",linenum,c); | |||||
| error_count++; | error_count++; | ||||
| } | } | ||||
| c += 'A'; | c += 'A'; | ||||
| p = input; | p = input; | ||||
| if(!isdigit(p[0]) || !isdigit(p[1])) | if(!isdigit(p[0]) || !isdigit(p[1])) | ||||
| { | { | ||||
| fprintf(f_log,"%5d: Expected 2 digits after '.L'\n",linenum); | |||||
| error_count++; | |||||
| return(1); | return(1); | ||||
| } | } | ||||
| group = atoi(&p[1]); | |||||
| group = atoi(&p[0]); | |||||
| if(group >= N_LETTER_GROUPS) | if(group >= N_LETTER_GROUPS) | ||||
| { | |||||
| fprintf(f_log,"%5d: lettergroup out of range (01-%.2d)\n",linenum,N_LETTER_GROUPS); | |||||
| error_count++; | |||||
| return(1); | return(1); | ||||
| } | |||||
| while(!isspace2(*p)) p++; | while(!isspace2(*p)) p++; | ||||
| fputc(RULE_GROUP_START,f_out); | fputc(RULE_GROUP_START,f_out); | ||||
| fputc(RULE_LETTERGP2,f_out); | fputc(RULE_LETTERGP2,f_out); | ||||
| fputc(group + 'A', f_out); | fputc(group + 'A', f_out); | ||||
| letterGroupsDefined[group] = 1; | |||||
| for(;;) | for(;;) | ||||
| { | { | ||||
| if(memcmp(buf,".L",2)==0) | if(memcmp(buf,".L",2)==0) | ||||
| { | { | ||||
| if(compile_lettergroup(&buf[2], f_out) != 0) | |||||
| { | |||||
| fprintf(f_log,"%5d: Bad lettergroup\n",linenum); | |||||
| error_count++; | |||||
| } | |||||
| compile_lettergroup(&buf[2], f_out); | |||||
| continue; | continue; | ||||
| } | } | ||||
| char path[sizeof(path_home)+40]; // path_dsource+20 | char path[sizeof(path_home)+40]; // path_dsource+20 | ||||
| error_count = 0; | error_count = 0; | ||||
| memset(letterGroupsDefined,0,sizeof(letterGroupsDefined)); | |||||
| debug_flag = flags & 1; | debug_flag = flags & 1; | ||||
| if(dsource == NULL) | if(dsource == NULL) |
| char *w; | char *w; | ||||
| p = letterGroups[group]; | p = letterGroups[group]; | ||||
| if(p == NULL) | |||||
| return(0); | |||||
| while(*p != RULE_GROUP_END) | while(*p != RULE_GROUP_END) | ||||
| { | { | ||||
| int unstressed_word = 0; | int unstressed_word = 0; | ||||
| char *max_output; | char *max_output; | ||||
| int final_ph; | int final_ph; | ||||
| int final_ph2; | |||||
| int mnem; | int mnem; | ||||
| int mnem2; | |||||
| int post_tonic; | int post_tonic; | ||||
| int opt_length; | int opt_length; | ||||
| int done; | int done; | ||||
| } | } | ||||
| if(ix == 0) return; | if(ix == 0) return; | ||||
| final_ph = phonetic[ix-1]; | final_ph = phonetic[ix-1]; | ||||
| final_ph2 = phonetic[ix-2]; | |||||
| max_output = output + (N_WORD_PHONEMES-3); /* check for overrun */ | max_output = output + (N_WORD_PHONEMES-3); /* check for overrun */ | ||||
| else | else | ||||
| { | { | ||||
| mnem = phoneme_tab[final_ph]->mnemonic; | mnem = phoneme_tab[final_ph]->mnemonic; | ||||
| if((mnem != 'n') && (mnem != 's')) | |||||
| mnem2 = phoneme_tab[final_ph2]->mnemonic; | |||||
| if((mnem == 's') && (mnem2 == 'n')) | |||||
| { | |||||
| // -ns stress remains on penultimate syllable | |||||
| } | |||||
| else | |||||
| if(((mnem != 'n') && (mnem != 's')) || (phoneme_tab[final_ph2]->type != phVOWEL)) | |||||
| { | { | ||||
| stressed_syllable = vowel_count - 1; | stressed_syllable = vowel_count - 1; | ||||
| } | } |
| int subtract; | int subtract; | ||||
| int repeat = 0; | int repeat = 0; | ||||
| unsigned int flags; | unsigned int flags; | ||||
| char ph_roman[30]; | |||||
| char number_chars[N_WORD_BYTES]; | char number_chars[N_WORD_BYTES]; | ||||
| static const char *roman_numbers = "ixcmvld"; | static const char *roman_numbers = "ixcmvld"; | ||||
| if(acc > langopts.max_roman) | if(acc > langopts.max_roman) | ||||
| return(0); | return(0); | ||||
| Lookup("_roman",ph_out); // precede by "roman" if _rom is defined in *_list | |||||
| p = &ph_out[strlen(ph_out)]; | |||||
| Lookup("_roman",ph_roman); // precede by "roman" if _rom is defined in *_list | |||||
| p = &ph_out[0]; | |||||
| if((langopts.numbers & NUM_ROMAN_AFTER) == 0) | |||||
| { | |||||
| strcpy(ph_out,ph_roman); | |||||
| p = &ph_out[strlen(ph_out)]; | |||||
| } | |||||
| sprintf(number_chars," %d ",acc); | sprintf(number_chars," %d ",acc); | ||||
| TranslateNumber(&number_chars[1],p,&flags,0); | TranslateNumber(&number_chars[1],p,&flags,0); | ||||
| if(langopts.numbers & NUM_ROMAN_AFTER) | |||||
| strcat(ph_out,ph_roman); | |||||
| return(1); | return(1); | ||||
| } // end of TranslateRoman | } // end of TranslateRoman | ||||
| { | { | ||||
| if((thousandplex > 0) && (value < 1000)) | if((thousandplex > 0) && (value < 1000)) | ||||
| { | { | ||||
| if(langopts.numbers2 & 0x100) | |||||
| { | |||||
| if((thousandplex == 1) && (value >= 100)) | |||||
| { | |||||
| // special word for 100,000's | |||||
| char ph_buf3[20]; | |||||
| sprintf(string,"_%dL",value / 100); | |||||
| if(Lookup(string,ph_buf2) == 0) | |||||
| { | |||||
| LookupNum2(value/100,0,ph_buf2); | |||||
| Lookup("_0L",ph_buf3); | |||||
| strcat(ph_buf2,ph_buf3); | |||||
| } | |||||
| value %= 100; | |||||
| if(value == 0) | |||||
| suppress_null = 1; | |||||
| } | |||||
| } | |||||
| if((suppress_null == 0) && (LookupThousands(value,thousandplex,ph_append))) | if((suppress_null == 0) && (LookupThousands(value,thousandplex,ph_append))) | ||||
| { | { | ||||
| // found an exact match for N thousand | // found an exact match for N thousand |
| #define phBEFORENOTVOWEL2 0x1000 | #define phBEFORENOTVOWEL2 0x1000 | ||||
| #define phSWITCHVOICING 0x0800 | #define phSWITCHVOICING 0x0800 | ||||
| #define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position | |||||
| #define phLONG 0x200000 | |||||
| #define phNONSYLLABIC 0x100000 // don't count this vowel as a syllable when finding the stress position | |||||
| #define phLONG 0x200000 | |||||
| #define phLENGTHENSTOP 0x400000 // make the pre-pause slightly longer | |||||
| // fixed phoneme code numbers, these can be used from the program code | // fixed phoneme code numbers, these can be used from the program code | ||||
| #define phonCONTROL 1 | #define phonCONTROL 1 |
| { | { | ||||
| if((x = (langopts.word_gap & 0x7)) != 0) | if((x = (langopts.word_gap & 0x7)) != 0) | ||||
| { | { | ||||
| insert_ph = pause_phonemes[x]; | |||||
| if((x > 1) || ((insert_ph != phonPAUSE_SHORT) && (insert_ph != phonPAUSE_NOLINK))) | |||||
| { | |||||
| // don't reduce the pause | |||||
| insert_ph = pause_phonemes[x]; | |||||
| } | |||||
| } | } | ||||
| if(option_wordgap > 0) | if(option_wordgap > 0) | ||||
| { | { |
| if((langopts.word_gap & 0x10) && (p->newword)) | if((langopts.word_gap & 0x10) && (p->newword)) | ||||
| p->prepause = 60; | p->prepause = 60; | ||||
| if(p->ph->phflags & phLENGTHENSTOP) | |||||
| p->prepause += 30; | |||||
| if(p->synthflags & SFLAG_LENGTHEN) | if(p->synthflags & SFLAG_LENGTHEN) | ||||
| p->prepause += langopts.long_stop; | p->prepause += langopts.long_stop; | ||||
| break; | break; | ||||
| } | } | ||||
| // calc length modifier | // calc length modifier | ||||
| if(next->ph->code == phonPAUSE_VSHORT) | |||||
| if((next->ph->code == phonPAUSE_VSHORT) && (next2->type == phPAUSE)) | |||||
| { | { | ||||
| // ignore very short pause | |||||
| // if PAUSE_VSHORT is followed by a pause, then use that | |||||
| next = next2; | next = next2; | ||||
| next2 = next3; | next2 = next3; | ||||
| next3 = &phoneme_list[ix+4]; | next3 = &phoneme_list[ix+4]; |
| #include "translate.h" | #include "translate.h" | ||||
| #include "wave.h" | #include "wave.h" | ||||
| const char *version_string = "1.39.22 10.Nov.08"; | |||||
| const char *version_string = "1.39.26 15.Nov.08"; | |||||
| const int version_phdata = 0x013900; | const int version_phdata = 0x013900; | ||||
| int option_device_number = -1; | int option_device_number = -1; |
| case L('e','o'): | case L('e','o'): | ||||
| { | { | ||||
| static const short stress_lengths_eo[8] = {145, 145, 200, 170, 0, 0, 320, 340}; | |||||
| static const short stress_lengths_eo[8] = {145, 145, 230, 170, 0, 0, 360, 370}; | |||||
| static const unsigned char stress_amps_eo[] = {16,14, 20,20, 20,24, 24,22 }; | static const unsigned char stress_amps_eo[] = {16,14, 20,20, 20,24, 24,22 }; | ||||
| static const wchar_t eo_char_apostrophe[2] = {'l',0}; | static const wchar_t eo_char_apostrophe[2] = {'l',0}; | ||||
| tr->char_plus_apostrophe = eo_char_apostrophe; | tr->char_plus_apostrophe = eo_char_apostrophe; | ||||
| tr->langopts.word_gap = 1; | tr->langopts.word_gap = 1; | ||||
| tr->langopts.vowel_pause = 2; | |||||
| tr->langopts.stress_rule = 2; | tr->langopts.stress_rule = 2; | ||||
| tr->langopts.stress_flags = 0x6 | 0x10; | tr->langopts.stress_flags = 0x6 | 0x10; | ||||
| tr->langopts.unstressed_wd1 = 3; | tr->langopts.unstressed_wd1 = 3; | ||||
| break; | break; | ||||
| case L('e','s'): // Spanish | case L('e','s'): // Spanish | ||||
| case L('c','a'): // Catalan | |||||
| { | { | ||||
| static const short stress_lengths_es[8] = {170, 200, 180, 180, 0, 0, 220, 250}; | |||||
| static const short stress_lengths_es[8] = {180, 210, 190, 190, 0, 0, 230, 260}; | |||||
| // static const short stress_lengths_es[8] = {170, 200, 180, 180, 0, 0, 220, 250}; | |||||
| static const unsigned char stress_amps_es[8] = {16,12, 18,18, 20,20, 20,20 }; // 'diminished' is used to mark a quieter, final unstressed syllable | static const unsigned char stress_amps_es[8] = {16,12, 18,18, 20,20, 20,20 }; // 'diminished' is used to mark a quieter, final unstressed syllable | ||||
| static const wchar_t ca_punct_within_word[] = {'\'',0xb7,0}; // ca: allow middle-dot within word | |||||
| tr = new Translator(); | tr = new Translator(); | ||||
| SetupTranslator(tr,stress_lengths_es,stress_amps_es); | SetupTranslator(tr,stress_lengths_es,stress_amps_es); | ||||
| tr->langopts.unstressed_wd2 = 2; | tr->langopts.unstressed_wd2 = 2; | ||||
| tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | tr->langopts.param[LOPT_SONORANT_MIN] = 120; // limit the shortening of sonorants before short vowels | ||||
| tr->langopts.numbers = 0x529 + NUM_ROMAN; | |||||
| tr->langopts.numbers = 0x529 + NUM_ROMAN + NUM_ROMAN_AFTER; | |||||
| if(name2 == L('c','a')) | |||||
| { | |||||
| tr->punct_within_word = ca_punct_within_word; | |||||
| tr->langopts.stress_flags = 0x200 | 0x6 | 0x30; // stress last syllable unless word ends with a vowel | |||||
| } | |||||
| } | } | ||||
| break; | break; | ||||
| tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable | tr->langopts.stress_rule = 6; // stress on last heaviest syllable, excluding final syllable | ||||
| tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable | tr->langopts.stress_flags = 0x10004; // use 'diminished' for unstressed final syllable | ||||
| tr->langopts.numbers = 0x011; | tr->langopts.numbers = 0x011; | ||||
| tr->langopts.numbers2 = 0x100; | |||||
| tr->langopts.numbers2 = NUM2_100000; | |||||
| tr->letter_bits_offset = OFFSET_DEVANAGARI; | tr->letter_bits_offset = OFFSET_DEVANAGARI; | ||||
| SetIndicLetters(tr); | SetIndicLetters(tr); | ||||
| } | } | ||||
| case L_jbo: // Lojban | case L_jbo: // Lojban | ||||
| { | { | ||||
| static const short stress_lengths_jbo[8] = {185,170, 200,200, 0,0, 290,300}; | |||||
| static const short stress_lengths_jbo[8] = {145,145, 170,160, 0,0, 330,350}; | |||||
| static const wchar_t jbo_punct_within_word[] = {'.',',','\'',0x2c8,0}; // allow period and comma within a word, also stress marker (from LOPT_SYLLABLE_CAPS) | static const wchar_t jbo_punct_within_word[] = {'.',',','\'',0x2c8,0}; // allow period and comma within a word, also stress marker (from LOPT_SYLLABLE_CAPS) | ||||
| tr = new Translator(); | tr = new Translator(); | ||||
| SetupTranslator(tr,stress_lengths_jbo,NULL); | SetupTranslator(tr,stress_lengths_jbo,NULL); | ||||
| tr->langopts.stress_rule = 2; | tr->langopts.stress_rule = 2; | ||||
| tr->langopts.vowel_pause = 0x20c; // pause before a word which starts with a vowel, or after a word which ends in a consonant | tr->langopts.vowel_pause = 0x20c; // pause before a word which starts with a vowel, or after a word which ends in a consonant | ||||
| // tr->langopts.word_gap = 1; | |||||
| tr->punct_within_word = jbo_punct_within_word; | tr->punct_within_word = jbo_punct_within_word; | ||||
| tr->langopts.param[LOPT_SYLLABLE_CAPS] = 1; // capitals indicate stressed syllables | tr->langopts.param[LOPT_SYLLABLE_CAPS] = 1; // capitals indicate stressed syllables | ||||
| SetLetterVowel(tr,'y'); | SetLetterVowel(tr,'y'); | ||||
| case L('l','v'): // latvian | case L('l','v'): // latvian | ||||
| { | { | ||||
| static const unsigned char stress_amps_lv[8] = {17,14, 20,20, 20,22, 22,22 }; | |||||
| static const short stress_lengths_lv[8] = {180,140, 210,210, 0,0, 210,210}; | |||||
| tr = new Translator(); | tr = new Translator(); | ||||
| SetupTranslator(tr,stress_lengths_sk,stress_amps_sk); | |||||
| SetupTranslator(tr,stress_lengths_lv,stress_amps_lv); | |||||
| tr->langopts.stress_rule = 0; | tr->langopts.stress_rule = 0; | ||||
| tr->langopts.spelling_stress = 1; | tr->langopts.spelling_stress = 1; | ||||
| } | } | ||||
| break; | break; | ||||
| case L('o','m'): | |||||
| { | |||||
| static const unsigned char stress_amps_om[] = {16,16, 20,20, 20,24, 24,22 }; | |||||
| static const short stress_lengths_om[8] = {200,200, 200,200, 0,0, 200,200}; | |||||
| tr = new Translator(); | |||||
| SetupTranslator(tr,stress_lengths_om,stress_amps_om); | |||||
| tr->langopts.stress_rule = 3; | |||||
| } | |||||
| break; | |||||
| case L('p','l'): // Polish | case L('p','l'): // Polish | ||||
| { | { | ||||
| static const short stress_lengths_pl[8] = {160, 190, 175, 175, 0, 0, 200, 210}; | static const short stress_lengths_pl[8] = {160, 190, 175, 175, 0, 0, 200, 210}; | ||||
| tr->langopts.stress_flags = 0x6 | 0x10; | tr->langopts.stress_flags = 0x6 | 0x10; | ||||
| tr->langopts.numbers = 0x4e1; | tr->langopts.numbers = 0x4e1; | ||||
| tr->langopts.numbers2 = 0x100; | |||||
| tr->langopts.numbers2 = NUM2_100000a; | |||||
| } | } | ||||
| break; | break; | ||||
| if(name2 == L('k','n')) | if(name2 == L('k','n')) | ||||
| { | { | ||||
| tr->letter_bits_offset = OFFSET_KANNADA; | tr->letter_bits_offset = OFFSET_KANNADA; | ||||
| tr->langopts.numbers = 0x1; | |||||
| tr->langopts.numbers2 = NUM2_100000; | |||||
| } | } | ||||
| tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words | tr->langopts.param[LOPT_WORD_MERGE] = 1; // don't break vowels betwen words | ||||
| SetIndicLetters(tr); // call this after setting OFFSET_ | SetIndicLetters(tr); // call this after setting OFFSET_ | ||||
| } | } | ||||
| break; | break; | ||||
| #ifdef deleted | |||||
| case L('t','h'): // Thai | case L('t','h'): // Thai | ||||
| { | { | ||||
| static const short stress_lengths_th[8] = {230,150, 230,230, 230,0, 230,250}; | static const short stress_lengths_th[8] = {230,150, 230,230, 230,0, 230,250}; | ||||
| tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word | tr->langopts.word_gap = 0x21; // length of a final vowel is less dependent on the next consonant, don't merge consonant with next word | ||||
| } | } | ||||
| break; | break; | ||||
| #endif | |||||
| case L('t','r'): // Turkish | case L('t','r'): // Turkish | ||||
| { | { |
| for(ix=0; ix<word_count; ix++) | for(ix=0; ix<word_count; ix++) | ||||
| { | { | ||||
| int j; | |||||
| int nx; | |||||
| int c_temp; | int c_temp; | ||||
| char *pn; | char *pn; | ||||
| char *pw; | char *pw; | ||||
| static unsigned int break_numbers1 = 0x49249248; | |||||
| static unsigned int break_numbers2 = 0x492492a8; // for languages which have numbers for 100,000 and 100,00,000 | |||||
| static unsigned int break_numbers3 = 0x49249268; // for languages which have numbers for 100,000 and 1,000,000 | |||||
| unsigned int break_numbers; | |||||
| char number_buf[80]; | char number_buf[80]; | ||||
| // start speaking at a specified word position in the text? | // start speaking at a specified word position in the text? | ||||
| // digits should have been converted to Latin alphabet ('0' to '9') | // digits should have been converted to Latin alphabet ('0' to '9') | ||||
| word = pw = &sbuf[words[ix].start]; | word = pw = &sbuf[words[ix].start]; | ||||
| if(iswdigit(word[0]) && (langopts.numbers2 & NUM2_100000)) | |||||
| { | |||||
| // 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]) | |||||
| { | |||||
| if(iswdigit(*pw)) | |||||
| { | |||||
| *pn++ = *pw++; | |||||
| } | |||||
| else | |||||
| if((*pw == langopts.thousands_sep) && (pw[1] == ' ') && iswdigit(pw[2])) | |||||
| { | |||||
| pw += 2; | |||||
| ix++; // skip "word" | |||||
| } | |||||
| else | |||||
| { | |||||
| nx = pw - word; | |||||
| memset(word,' ',nx); | |||||
| nx = pn - number_buf; | |||||
| memcpy(word,number_buf,nx); | |||||
| break; | |||||
| } | |||||
| } | |||||
| pw = word; | |||||
| } | |||||
| for(n_digits=0; iswdigit(word[n_digits]); n_digits++); // count consecutive digits | 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[0] != '0')) | ||||
| { | { | ||||
| // word is entirely digits, insert commas and break into 3 digit "words" | // word is entirely digits, insert commas and break into 3 digit "words" | ||||
| number_buf[0] = ' '; | number_buf[0] = ' '; | ||||
| pn = &number_buf[1]; | pn = &number_buf[1]; | ||||
| j = n_digits; | |||||
| nx = n_digits; | |||||
| if(langopts.numbers2 & NUM2_100000a) | |||||
| break_numbers = break_numbers3; | |||||
| else | |||||
| if(langopts.numbers2 & NUM2_100000) | |||||
| break_numbers = break_numbers2; | |||||
| else | |||||
| break_numbers = break_numbers1; | |||||
| while(pn < &number_buf[sizeof(number_buf)-3]) | while(pn < &number_buf[sizeof(number_buf)-3]) | ||||
| { | { | ||||
| if(!isdigit(c = *pw++) && (c != langopts.decimal_sep)) | if(!isdigit(c = *pw++) && (c != langopts.decimal_sep)) | ||||
| break; | break; | ||||
| *pn++ = c; | *pn++ = c; | ||||
| if((--j > 0) && (j % 3)==0) | |||||
| if((--nx > 0) && (break_numbers & (1 << nx))) | |||||
| { | { | ||||
| if(langopts.thousands_sep != ' ') | if(langopts.thousands_sep != ' ') | ||||
| { | |||||
| *pn++ = langopts.thousands_sep; | *pn++ = langopts.thousands_sep; | ||||
| } | |||||
| *pn++ = ' '; | *pn++ = ' '; | ||||
| if(break_numbers & (1 << (nx-1))) | |||||
| { | |||||
| // the next group only has 1 digits (i.e. NUM2_10000), make it three | |||||
| *pn++ = '0'; | |||||
| *pn++ = '0'; | |||||
| } | |||||
| if(break_numbers & (1 << (nx-2))) | |||||
| { | |||||
| // the next group only has 2 digits (i.e. NUM2_10000), make it three | |||||
| *pn++ = '0'; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| pn[0] = ' '; | pn[0] = ' '; | ||||
| for(pw = word; *pw != ' ';) | for(pw = word; *pw != ' ';) | ||||
| { | { | ||||
| memset(number_buf,' ',9); | memset(number_buf,' ',9); | ||||
| j = utf8_in(&c_temp, pw, 0); | |||||
| memcpy(&number_buf[2],pw,j); | |||||
| nx = utf8_in(&c_temp, pw, 0); | |||||
| memcpy(&number_buf[2],pw,nx); | |||||
| TranslateWord2(&number_buf[2], &words[ix], 0, 0 ); | TranslateWord2(&number_buf[2], &words[ix], 0, 0 ); | ||||
| pw += j; | |||||
| pw += nx; | |||||
| } | } | ||||
| } | } | ||||
| #define N_RULE_GROUP2 120 // max num of two-letter rule chains | #define N_RULE_GROUP2 120 // max num of two-letter rule chains | ||||
| #define N_HASH_DICT 1024 | #define N_HASH_DICT 1024 | ||||
| #define N_CHARSETS 20 | #define N_CHARSETS 20 | ||||
| #define N_LETTER_GROUPS 20 | |||||
| #define N_LETTER_GROUPS 25 | |||||
| /* dictionary flags, word 1 */ | /* dictionary flags, word 1 */ | ||||
| unsigned char *length_mods; | unsigned char *length_mods; | ||||
| unsigned char *length_mods0; | unsigned char *length_mods0; | ||||
| #define NUM_ROMAN 0x20000 | |||||
| #define NUM_ROMAN_UC 0x40000 | |||||
| #define NUM_NOPAUSE 0x80000 | |||||
| #define NUM_ROMAN 0x20000 | |||||
| #define NUM_ROMAN_UC 0x40000 | |||||
| #define NUM_NOPAUSE 0x80000 | |||||
| #define NUM_ROMAN_AFTER 0x200000 | |||||
| // bits0-1=which numbers routine to use. | // bits0-1=which numbers routine to use. | ||||
| // bit2= thousands separator must be space | // bit2= thousands separator must be space | ||||
| // bit18=Roman numbers only if upper case | // bit18=Roman numbers only if upper case | ||||
| // bit19=don't add pause after a number | // bit19=don't add pause after a number | ||||
| // bit20='and' before hundreds | // bit20='and' before hundreds | ||||
| // bit21= say "roman" after the number, not before | |||||
| int numbers; | int numbers; | ||||
| #define NUM2_100000 0x100 // numbers for 100,000 and 10,000,000 | |||||
| #define NUM2_100000a 0x500 // numbers for 100,000 and 1,000,000 | |||||
| // bits 1-4 use variant form of numbers before thousands,millions,etc. | // bits 1-4 use variant form of numbers before thousands,millions,etc. | ||||
| // bit6=(LANG=pl) two forms of plural, M or MA | // bit6=(LANG=pl) two forms of plural, M or MA | ||||
| // bit7=(LANG-ru) use MB for 1 thousand, million, etc | // bit7=(LANG-ru) use MB for 1 thousand, million, etc | ||||
| // bit8=(LANG=sw) special word for 100,000s | |||||
| // bit8=(LANG=hi) special word for 100,000 and 10,000,000 | |||||
| // bit9=(LANG=rw) say "thousand" and "million" before its number, not after | // bit9=(LANG=rw) say "thousand" and "million" before its number, not after | ||||
| // bit10=(LANG=sw) special word for 100,000 and 1,000,000 | |||||
| int numbers2; | int numbers2; | ||||
| int max_roman; | int max_roman; |