diff --git a/dictsource/de_rules b/dictsource/de_rules index fb141b56..e3896f33 100644 --- a/dictsource/de_rules +++ b/dictsource/de_rules @@ -256,7 +256,7 @@ e) chen (_ C@n ü) chen (_ C@n - chs ks (_ + chs ks chance SA~s@ chara (kt k%ara _) ch (ic S diff --git a/dictsource/en_list b/dictsource/en_list index 74ca29b9..e1d79dbe 100644 --- a/dictsource/en_list +++ b/dictsource/en_list @@ -3054,6 +3054,7 @@ Katie keIti Keighli keIli Keanu kI'A:nu: Kieran ki@r@n +Kris krIs Laurence l0r@ns Lawrence l0r@ns Leann li:'an diff --git a/dictsource/es_rules b/dictsource/es_rules index b9b0ea9d..e040bb71 100644 --- a/dictsource/es_rules +++ b/dictsource/es_rules @@ -1,4 +1,4 @@ -// translation rules for Spanish +// translation rules for Spanish // This file is UTF-8 encoded // Conditional rules @@ -128,8 +128,9 @@ ll (_ l .group m m m + @) m (_ =m _) mn (em n -_) mb (A mb + _) mb (A mb .group n diff --git a/dictsource/ko_list b/dictsource/ko_list index 2cb02d83..8f7a1e71 100644 --- a/dictsource/ko_list +++ b/dictsource/ko_list @@ -1,28 +1,65 @@ +// eSpeak Korean rules. Changed pronunciation, as numbers were not announced. + + +// Number forms: +_0 j'@N_! +_1 'iR_! +_2 'i_! +_3 s'am_! +_4 s'a_! +_5 'o_! +_6 j'uq_! +_7 tS'h'iR_! +_8 ph'aR_! +_9 g'u_! +_1X s'ip_! +_2X 'i_!||s'ip_! +_3X s'am_!||s'ip_! +_4X s'a_!||s'ip_! +_5X 'o_!||s'ip_! +_6X j'uq_!||s'ip_! +_7X tS'h'iR_!s'ip_! +_8X ph'aR_!||s'ip_! +_9X g'u_!||s'ip_! +_0C p'Eq_! + +// Larger numbers +_0M0 tS'h-@n // 10^3 +_1M0 tS'h-@n +_0M1 m'an // 10^4 +_1M1 m'an +_0M2 '@q // 10^8 +_1M2 '@q +_0M3 tS;'o // 10^12 +_1M3 tS;'o +_0M4 gj'@N +_1M4 gj'@N + +// Character names: +ᄀ gij'@q +ᄁ 's-aNq,ij@q +ᄂ ni;'u-n +ᄃ diq'u-d- +ᄄ 's-aNd,iqu-d- +ᄅ *i;'u-rr +ᄆ mi;'u-m +ᄇ pi;'u-p +ᄈ 's-aNb,i;u-p +ᄉ si;'ot- +ᄊ 's-aNs,i;ot- +ᄋ i;'u-N +ᄌ tS;i;'u-t +ᄍ 's-aNdZ;,i;u-t +ᄎ tSh-'i;u-t +ᄏ khi;'u-k +ᄐ thi;'u-t- +ᄑ phi;'u-p +ᄒ hi;'u-t- +// end of character names. + + $textmode - -_0 ᅧᆼ -_1 ᅵᆯ -_2 ᅵ -_3 삼 -_4 사 -_5 ᅩ -_6 ᅲᆨ -_7 칠 -_8 팔 -_9 구 -_1X 십 -_2X ᅵ십 -_3X 삼십 -_4X 사십 -_5X ᅩ십 -_6X ᅲᆨ십 -_7X 칠십 -_8X 팔십 -_9X 구십 -_0C 백 -_0M1 천 -_1M1 천 - +// Misc: // 사ᅵ시ᅩᆺ 고랫재 고랟째 귓밥 귇빱 diff --git a/dictsource/ko_rules b/dictsource/ko_rules index 328e5a33..6190cbe0 100644 --- a/dictsource/ko_rules +++ b/dictsource/ko_rules @@ -1,5 +1,14 @@ +// eSpeak Korean rules // This file is UTF8 encoded +// char names (mostly to catch "ng" sound): +.group ᄋ +ᄋ i;'u-N + + + + + .replace // Note: These specific range of "normalized" unicode characters of Korean are @@ -15,24 +24,27 @@ // h-finals: ㅎ ㄶㅀ .L03 ᇂ ᆭ ᆶ +// Char names: + + // Initials // Order: ㄱㄲㅋ ㄷㄸㅌ ㅂㅃㅍ ㅅㅆㅈㅉㅊ ㄴㅁ ㄹ ㅎ .group ᄀ // ㄱ - ᄀ g - _) ᄀ k + ᄀ q + _) ᄀ g L01) ᄀ k- L03) ᄀ kh .group ᄁ // ㄲ - ᄁ k- + ᄁ q- .group ᄏ // ㅋ ᄏ kh .group ᄃ // ㄷ ᄃ d - _) ᄃ t + _) ᄃ d L01) ᄃ t- L03) ᄃ th @@ -55,7 +67,7 @@ ᄑ ph .group ᄉ // ㅅ - ᄉ s + ᄉ |s L01) ᄉ s- .group ᄊ // ㅆ @@ -68,16 +80,16 @@ L03) ᄌ tSh; .group ᄍ // ㅉ - ᄍ tS;- // TODO: phoneme + ᄍ 'tS;- // TODO: phoneme .group ᄎ // ㅊ - ᄎ tSh; // TODO: phoneme + ᄎ tSh- // TODO: phoneme .group ᄂ // ㄴ - ᄂ n + ᄂ ;n .group ᄆ // ㅁ - ᄆ m + ᄆ ;m .group ᄅ // ㄹ ᄅ * // TODO: alveolar flap [ɾ] @@ -87,7 +99,7 @@ ᄒ h // TODO: [ɦ] _) ᄒ h -// Medials +// Medials or vowels .group ᅡ // ㅏ ᅡ a @@ -157,7 +169,7 @@ // Order: ㄱㄳㄲㅋ ㄷㅌ ㅂㅍ ㅅㅆㅈㅊ ㄴㅁ ㅇㅎ ㄹ .group ᆨ // ㄱ - ᆨ k // TODO: final stops + ᆨ q // It is actually q, as using k adds unnecessary sound. ᆨᄒ kh .group ᆪ // ㄳ @@ -175,14 +187,14 @@ ᆿ (A kh .group ᆮ // ㄷ - ᆮ t + ᆮ d- // Actually a soft D. ᆮᄂ nn ᆮᄆ mm ᆮᄒ th ᆮ (L02 dZ; .group ᇀ // ㅌ - ᇀ t + ᇀ t- ᇀᄂ nn ᇀᄆ mm ᇀ (A th @@ -202,14 +214,14 @@ ᇁ (A ph .group ᆺ // ㅅ - ᆺ t + ᆺ t- ᆺᄂ nn ᆺᄆ mm ᆺ (A s ᆺᄒ s- .group ᆻ // ㅆ - ᆻ t + ᆻ t- ᆻᄂ nn ᆻᄆ mm ᆻ (A s- @@ -241,14 +253,14 @@ ᆷ m .group ᆼ // ㅇ - ᆼ ng + ᆼ N .group ᇂ // ㅎ - ᇂ t + ᇂ t- ᇂ (A .group ᆯ // ㄹ - ᆯ l + ᆯ rr ᆯᄅ l ᆯ (A * diff --git a/dictsource/pt_list b/dictsource/pt_list index 0c125207..76fcb2fd 100644 --- a/dictsource/pt_list +++ b/dictsource/pt_list @@ -217,7 +217,7 @@ _6o s'est _7o s'EtSim _8o oIt'av _9o n'on -_10o d'Esim +_1Xo d'Esim _2Xo viZ'Ezim _3Xo tRiZ'Ezim _4Xo kwad*aZ'Ezim @@ -644,6 +644,7 @@ governo gov'ernU $noun // $alt changes stressed [e] or [o] phoneme to open [E] or [O] // $alt2 changes stressed [E] or [O] phoneme to close [e] or [o] +aborto $alt $verb acerto $alt2 $noun adereço $alt2 adore $alt @@ -659,10 +660,12 @@ ameba $alt amores $alt2 anoiteça $alt2 anoiteço $alt2 +apego $alt2 apreço $alt2 aperto $alt2 $noun apoio $alt $verb aprendeste $alt2 +arremesso $alt2 $noun assembleia $alt atrozes $alt austera $alt @@ -676,11 +679,13 @@ boleia $alt bolo $alt2 borboleta $alt2 bordo $alt +bromelha $alt cabeça $alt2 cacete $alt2 cachorra $alt2 camiseta $alt2 cantora $alt2 +caractere $alt casebre $alt catorze $alt2 cefaleia $alt @@ -714,9 +719,12 @@ crede $alt2 cresce $alt crescem $alt der $alt +desapego $alt2 $noun desce $alt descem $alt +descordo $alt descova $alt2 +desespero $alt2 $noun desfecho $alt2 desprezo $alt $verb deva $alt2 @@ -727,8 +735,11 @@ discordo $alt dobro $alt2 $noun doce $alt2 droga $alt +emprego $alt2 $noun endereço $alt2 enumerem $alt +enredo $alt $verb +enterro $alt2 $noun enxerto $alt2 $noun epopeia $alt eritreia $alt @@ -740,7 +751,7 @@ esforços $alt esperma $alt espeto $alt2 $noun espiroqueta $alt2 -enterro $alt2 $noun +esqueleto $alt2 estiverdes $alt estiveres $alt estrofe $alt @@ -750,6 +761,7 @@ expeça $alt2 expeço $alt2 farofa $alt febre $alt +fera $alt fere $alt ferem $alt fezes $alt @@ -758,6 +770,7 @@ Fizeram $alt fizerem $alt fizerdes $alt fizeres $alt +folga $alt fogos $alt fores $alt2 forro $alt $verb @@ -765,6 +778,7 @@ fosse $alt2 fossem $alt2 foste $alt2 frevo $alt2 +galera $alt gameta $alt2 geleia $alt gelo $alt $verb @@ -850,10 +864,12 @@ povos $alt poxa p'oS& preta $alt2 preto $alt2 +primavera $alt profere $alt proferem $alt puder $alt puserdes $alt +recomeço $alt2 $noun recordo $alt recorto $alt rede $alt2 @@ -874,11 +890,14 @@ sincero $alt sobe $alt sobem $alt soco $alt2 +soco $alt $verb sofrem $alt sofre $alt sofreste $alt2 +sogra $alt sopre $alt soprem $alt +sopro $alt $verb sorvete $alt2 sossego $alt2 $noun souber $alt @@ -889,6 +908,7 @@ sugere $alt sugerem $alt suor swOr tapete $alt2 +tempero $alt $verb teta $alt2 tiver $alt tiveres $alt diff --git a/dictsource/pt_rules b/dictsource/pt_rules index 227096e9..f25f31b2 100644 --- a/dictsource/pt_rules +++ b/dictsource/pt_rules @@ -16,7 +16,7 @@ // endings .L01 a am o -.L02 a am e em o +.L02 a am e em o ue uem .L03 a am .group a @@ -367,6 +367,13 @@ _compar) e (çL01_ e _desapar) e (çL01_ e _esclar) e (çL01_ e _reapar) e (çL01_ e + _sol) e (trL01_ E +_acont) e (çL03_ e +_envaid) e (çL01_ e + _ofer) e (çL01_ e +_enriqu) e (çL01_ e +_descr) e (vL01_ e +_enfraqu) e (çL01_ e //endsort .group é @@ -653,11 +660,14 @@ _reapar) e (çL01_ e ?1 f) o (rmulá u // eg: formulário, formulários. ?1 v) o (lt O +//sort _m) o (lhL02_ O + _ref) o (gL02_ O c) o (rrL03_ o // escorra, incorra, corra, recorra _m) o (rrL03_ o _ap) oi (L03_ OI p) ostos (_ Ost=Us# // dispostos etc. +//endsort .group ô ô ''o diff --git a/dictsource/tt_list b/dictsource/tt_list index 340e2c8f..b34ce97d 100644 --- a/dictsource/tt_list +++ b/dictsource/tt_list @@ -36,8 +36,8 @@ щ SS;A ъ kAlVnl,Vqbilges'e ы V: -ь neS;kal,ekbilges'e -э e: +ь neS;k&l,ekbilges'e +э e|: ю ju я jA @@ -69,7 +69,7 @@ _4X kVr'Vk _5X ill'e _6X Altm'VS _7X Z;itm'eS -_8X siks'an +_8X siks'&n _9X tuks'An _0C j'Wz _0M1 m'eN @@ -80,4 +80,4 @@ _1M3 milli'Ard _0M4 billi'on _1M4 billi'on -_dpt bWt,en +_dpt _bWt,en diff --git a/dictsource/tt_rules b/dictsource/tt_rules index 09d21a83..2923bff1 100644 --- a/dictsource/tt_rules +++ b/dictsource/tt_rules @@ -6,7 +6,8 @@ а A .group ә - ә a + ә & + әе e: // 'әнкәен' .group б б b @@ -15,13 +16,13 @@ в w // [v] in Russian words .group г - г g // may be [Q] or [r"] ?? + г g // changes to [Q] or [Q"] .group д д d .group е - _) е je2 // may be [je] [jV] + _) е je2 // changes to [je] or [jV] е e .group ё @@ -38,6 +39,7 @@ .group и и i + A) и j .group й й j @@ -54,7 +56,7 @@ .group н н n - н (к N +// н (к N н (г N н (х N @@ -81,9 +83,11 @@ .group у у u // or w + A) у w .group ү ү y // or w + A) ү w .group ф ф f @@ -120,10 +124,10 @@ э e .group ю - ю ju2 // or jy + ю ju2 // changes to ju or jy .group я - я jA2 // or ja + я ja // changes to jA or j& .group $ dolAR diff --git a/espeak-data/voices/test/tt b/espeak-data/voices/test/tt index b91781b3..d1586fe1 100644 --- a/espeak-data/voices/test/tt +++ b/espeak-data/voices/test/tt @@ -1,3 +1,5 @@ name tatar-test language tt - + +tunes s3 c3 q3 e3 + diff --git a/phsource/ph_bulgarian b/phsource/ph_bulgarian index 4a56e0fb..005c03f7 100644 --- a/phsource/ph_bulgarian +++ b/phsource/ph_bulgarian @@ -72,20 +72,7 @@ phoneme l endphoneme phoneme L // velar L - liquid - lengthmod 7 - - IF nextPh(isNotVowel) THEN - ChangePhoneme(l/2) // use 'dark' [l] after a vowel - ENDIF - - VowelEnding(ll/xll, -40) - - IF prevPh(isPause) THEN - FMT(ll/_ll) - ENDIF - - FMT(ll/ll) + import_phoneme base/L endphoneme diff --git a/phsource/ph_english b/phsource/ph_english index 088a6e57..566f3536 100644 --- a/phsource/ph_english +++ b/phsource/ph_english @@ -51,8 +51,7 @@ phoneme l // use dark [l/2] before not-vowel liquid lengthmod 7 - IF nextPhW(isVowel) THEN - ELSE + IF NOT nextPhW(isVowel) THEN IF prevPh(isVowel) OR prevPh(j) OR prevPh(w) THEN ChangePhoneme(l/2) ELSE @@ -110,8 +109,7 @@ phoneme z/2 // used for 's suffix InsertPhoneme(I2) ENDIF - IF prevPh(isVoiced) THEN - ELSE + IF NOT prevPh(isVoiced) THEN ChangePhoneme(s) ENDIF ChangePhoneme(z) diff --git a/phsource/ph_english_us b/phsource/ph_english_us index edf8229f..e564ce9b 100644 --- a/phsource/ph_english_us +++ b/phsource/ph_english_us @@ -235,7 +235,7 @@ endphoneme phoneme u: vowel starttype #u endtype #u length 190 - FMT(vdiph2/uw) + FMT(vdiph2/uw_6) endphoneme diff --git a/phsource/ph_tatar b/phsource/ph_tatar index a6e6b1ff..d37d3e34 100644 --- a/phsource/ph_tatar +++ b/phsource/ph_tatar @@ -1,6 +1,6 @@ -// use 'flag1' for front vowels +// use 'flag1' for front vowels, 'flag2' for back vowels phoneme i vowel flag1 starttype #i endtype #i @@ -15,11 +15,87 @@ phoneme y endphoneme phoneme u - vowel starttype #u endtype #u + vowel flag2 starttype #u endtype #u length 180 FMT(vowel/u) endphoneme + +phoneme e + vowel flag1 starttype #@ endtype #@ + length 110 + FMT(vowel/ii#) +endphoneme + + +phoneme W + vowel flag1 starttype #@ endtype #@ + length 110 + FMT(vowel/oe) +endphoneme + +phoneme o + vowel flag2 starttype #o endtype #o + length 110 + FMT(vowel/o_mid) +endphoneme + +phoneme V + vowel flag2 starttype #@ endtype #@ + length 110 + ipa ɯ + FMT(vowel/@_2) +endphoneme + + +phoneme & + vowel flag1 starttype #e endtype #e + length 180 + FMT(vowel/ee) +endphoneme + +phoneme A + vowel flag2 starttype #a endtype #a + length 180 + IF NOT nextPhW(w) AND NOT thisPh(isTranslationGiven) THEN + IF thisPh(isFirstVowel) THEN + ChangePhoneme(0) + ENDIF + IF prevVowel(0) AND thisPh(isSecondVowel) THEN + ChangePhoneme(0) + ENDIF + ENDIF + FMT(vowel/aa_8) +endphoneme + +phoneme 0 + vowel flag2 starttype #o endtype #o + length 180 + FMT(vowel/0_3) +endphoneme + + +phoneme e: + vowel flag1 starttype #e endtype #e + length 240 + FMT(vowel/e_6) +endphoneme + +phoneme I + vowel flag1 starttype #i endtype #i + length 110 + FMT(vowel/ii) +endphoneme + +phoneme a // letter 'я' + vowel starttype #a endtype #a + length 180 + IF prevVowel(isFlag1) OR nextVowel(isFlag1) THEN // front vowels + ChangePhoneme(&) + ENDIF + ChangePhoneme(A) +endphoneme + phoneme u2 // letter 'ю' vowel starttype #u endtype #u length 180 @@ -30,78 +106,14 @@ phoneme u2 // letter 'ю' ENDIF endphoneme -phoneme e - vowel flag1 starttype #@ endtype #@ - length 100 - FMT(vowel/ii#) -endphoneme - phoneme e2 // 'e' at start of word vowel starttype #@ endtype #@ length 100 - IF nextVowel(isFlag1) THEN + IF nextVowel(isFlag2) THEN + ChangePhoneme(V) + ELSE ChangePhoneme(e) ENDIF - ChangePhoneme(V) -endphoneme - -phoneme W - vowel flag1 starttype #@ endtype #@ - length 100 - FMT(vowel/oe) -endphoneme - -phoneme o - vowel starttype #o endtype #o - length 100 - FMT(vowel/o_mid) -endphoneme - -phoneme V - vowel starttype #@ endtype #@ - length 100 - FMT(vowel/o-_3) -endphoneme - - -phoneme a - vowel flag1 starttype #a endtype #a - length 180 - FMT(vowel/&_2) -endphoneme - -phoneme A - vowel starttype #a endtype #a - length 180 - IF thisPh(isFirstVowel) THEN - ChangePhoneme(0) - ENDIF - IF prevVowel(0) THEN - ChangePhoneme(0) - ENDIF - FMT(vowel/aa) -endphoneme - -phoneme A2 // letter 'я' - vowel starttype #a endtype #a - length 180 - IF prevVowel(isFlag1) OR nextVowel(isFlag1) THEN - ChangePhoneme(a) - ENDIF - ChangePhoneme(A) -endphoneme - -phoneme 0 - vowel starttype #o endtype #o - length 180 - FMT(vowel/0_3) -endphoneme - - -phoneme I - vowel flag1 starttype #i endtype #i - length 100 - FMT(vowel/ii) endphoneme @@ -113,10 +125,39 @@ phoneme r endphoneme phoneme t - import_phoneme base/t[ + import_phoneme base2/t endphoneme phoneme d import_phoneme base/d[ endphoneme +phoneme k + vls vel stop + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN // back vowels + ChangePhoneme(q) + ENDIF + CALL base/k +endphoneme + +phoneme G + import_phoneme base/Q" +endphoneme + +phoneme g + vcd vel frc + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN + ChangePhoneme(G) + ELSE + ChangePhoneme(Q) + ENDIF +endphoneme + + +phoneme l + liquid + IF prevVowel(isFlag2) OR nextVowel(isFlag2) THEN + ChangePhoneme(L) + ENDIF + CALL base/l +endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index dab4c599..0b536b85 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -576,6 +576,29 @@ phoneme l. endphoneme +phoneme L/ + import_phoneme base/l/2 +endphoneme + +phoneme L // velar L + liquid + lengthmod 7 + + IF nextPh(isNotVowel) THEN + ChangePhoneme(L/) // use 'dark' [l] after a vowel + ENDIF + + VowelEnding(ll/xll, -40) + + IF prevPh(isPause) THEN + FMT(ll/_ll) + ENDIF + + FMT(ll/ll) +endphoneme + + + phoneme w liquid diff --git a/phsource/vdiph/aae b/phsource/vdiph/aae index 92973c8e..29232dec 100644 Binary files a/phsource/vdiph/aae and b/phsource/vdiph/aae differ diff --git a/phsource/vowel/V_6 b/phsource/vowel/V_6 index 3e8a2a97..ccf454d1 100644 Binary files a/phsource/vowel/V_6 and b/phsource/vowel/V_6 differ diff --git a/phsource/vowel/aa_8 b/phsource/vowel/aa_8 index 4a4ce732..806c5923 100644 Binary files a/phsource/vowel/aa_8 and b/phsource/vowel/aa_8 differ diff --git a/phsource/vowelcharts/af b/phsource/vowelcharts/af index dea62e4a..429e95b6 100644 --- a/phsource/vowelcharts/af +++ b/phsource/vowelcharts/af @@ -1,7 +1,7 @@ @ 1 536 1416 2320 584 1400 2000 @ 0 536 1420 2420 536 1420 2420 @- 0 525 1441 2340 525 1441 2340 -a 0 -27598 -14028 13533 666 -14224 -23000 +a 0 654 1274 2586 654 1274 2586 i 0 272 2247 3100 288 2247 3100 u 0 352 1000 2240 352 1000 2200 E 0 504 1900 2544 496 1920 2552 @@ -13,6 +13,7 @@ W 0 525 1320 2200 525 1320 2200 &: 0 735 1760 2420 675 1738 2420 @L 0 485 891 2780 450 792 2980 A: 0 664 1040 2800 648 1060 2840 +e@ 0 264 2180 3040 488 1700 2600 o@ 0 336 1060 2360 480 1480 2500 y 0 328 2100 2580 304 2160 2640 iu 0 280 2180 3040 272 900 2300 diff --git a/phsource/vowelcharts/af.png b/phsource/vowelcharts/af.png index b2e4029c..8caf192d 100644 Binary files a/phsource/vowelcharts/af.png and b/phsource/vowelcharts/af.png differ diff --git a/phsource/vowelcharts/ak.png b/phsource/vowelcharts/ak.png index 5817fe26..af0f30da 100644 Binary files a/phsource/vowelcharts/ak.png and b/phsource/vowelcharts/ak.png differ diff --git a/phsource/vowelcharts/am b/phsource/vowelcharts/am index 861a5026..f6a808c2 100644 --- a/phsource/vowelcharts/am +++ b/phsource/vowelcharts/am @@ -6,3 +6,4 @@ e 0 504 1900 2544 496 1920 2552 i 0 336 2210 2800 336 2210 2760 o 0 496 972 2500 496 972 2500 u 0 344 800 2360 344 800 2360 +y 0 408 1760 2540 408 1760 2540 diff --git a/phsource/vowelcharts/am.png b/phsource/vowelcharts/am.png index f605ce4d..fb5d1efe 100644 Binary files a/phsource/vowelcharts/am.png and b/phsource/vowelcharts/am.png differ diff --git a/phsource/vowelcharts/az b/phsource/vowelcharts/az index b1d607c2..6e7a5652 100644 --- a/phsource/vowelcharts/az +++ b/phsource/vowelcharts/az @@ -1,3 +1,4 @@ +@ 0 456 1240 2400 456 1240 2400 a 0 688 1064 2806 672 1100 2806 e 0 504 1900 2544 496 1920 2552 i 0 336 2210 2800 336 2210 2760 diff --git a/phsource/vowelcharts/az.png b/phsource/vowelcharts/az.png index 9623bc2c..e3731955 100644 Binary files a/phsource/vowelcharts/az.png and b/phsource/vowelcharts/az.png differ diff --git a/phsource/vowelcharts/base b/phsource/vowelcharts/base index d840c642..c211890b 100644 --- a/phsource/vowelcharts/base +++ b/phsource/vowelcharts/base @@ -10,3 +10,5 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 diff --git a/phsource/vowelcharts/base.png b/phsource/vowelcharts/base.png index 051292cd..c10eeb99 100644 Binary files a/phsource/vowelcharts/base.png and b/phsource/vowelcharts/base.png differ diff --git a/phsource/vowelcharts/base2 b/phsource/vowelcharts/base2 index aeb59766..71d70554 100644 --- a/phsource/vowelcharts/base2 +++ b/phsource/vowelcharts/base2 @@ -11,6 +11,8 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 a/ 0 760 1420 2600 736 1380 2540 E 0 720 1760 2420 672 1562 2520 O 0 584 940 2580 584 940 2580 diff --git a/phsource/vowelcharts/base2.png b/phsource/vowelcharts/base2.png index c9ff45bd..1417cf3a 100644 Binary files a/phsource/vowelcharts/base2.png and b/phsource/vowelcharts/base2.png differ diff --git a/phsource/vowelcharts/bg b/phsource/vowelcharts/bg index d2fa0857..a1369de9 100644 --- a/phsource/vowelcharts/bg +++ b/phsource/vowelcharts/bg @@ -1,6 +1,8 @@ @ 1 612 1232 2620 612 1240 2620 @ 0 544 1220 2520 544 1260 2520 -a 0 800 1320 2637 800 1320 2637 +a 1 800 1320 2637 800 1320 2637 +a 1 695 1316 2500 695 1316 2500 +a 0 904 1320 2700 896 1340 2660 e 1 504 1900 2544 496 1920 2552 e 0 584 1820 2560 584 1820 2560 i 1 336 2210 2800 336 2210 2760 diff --git a/phsource/vowelcharts/bg.png b/phsource/vowelcharts/bg.png index dd2ad9d1..0b0cc216 100644 Binary files a/phsource/vowelcharts/bg.png and b/phsource/vowelcharts/bg.png differ diff --git a/phsource/vowelcharts/bo b/phsource/vowelcharts/bo index 1cece3d1..7670cea5 100644 --- a/phsource/vowelcharts/bo +++ b/phsource/vowelcharts/bo @@ -3,6 +3,8 @@ e 0 504 1900 2544 496 1920 2552 i 0 280 2280 2840 240 2339 2840 o 0 454 812 2559 432 824 2520 u 0 320 860 2360 320 860 2460 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 i: 0 304 2440 3020 304 2440 3020 e: 0 416 2140 2660 416 2140 2660 a: 0 712 1160 2780 696 1160 2780 diff --git a/phsource/vowelcharts/bo.png b/phsource/vowelcharts/bo.png index bd96d35a..953228f2 100644 Binary files a/phsource/vowelcharts/bo.png and b/phsource/vowelcharts/bo.png differ diff --git a/phsource/vowelcharts/ca b/phsource/vowelcharts/ca index 652c15c9..651caa3f 100644 --- a/phsource/vowelcharts/ca +++ b/phsource/vowelcharts/ca @@ -8,5 +8,5 @@ E 0 584 1820 2560 584 1820 2560 O 0 552 860 2660 552 880 2660 U 0 388 940 2420 394 980 2360 aI 0 912 1320 2740 360 2200 2820 -a# 0 514 514 514 514 514 514 +a# 0 658 1408 2460 658 1408 2460 E2 0 584 1820 2560 584 1820 2560 diff --git a/phsource/vowelcharts/ca.png b/phsource/vowelcharts/ca.png index 064a231f..763045b8 100644 Binary files a/phsource/vowelcharts/ca.png and b/phsource/vowelcharts/ca.png differ diff --git a/phsource/vowelcharts/consonants b/phsource/vowelcharts/consonants index d840c642..c211890b 100644 --- a/phsource/vowelcharts/consonants +++ b/phsource/vowelcharts/consonants @@ -10,3 +10,5 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 diff --git a/phsource/vowelcharts/consonants.png b/phsource/vowelcharts/consonants.png index 051292cd..c10eeb99 100644 Binary files a/phsource/vowelcharts/consonants.png and b/phsource/vowelcharts/consonants.png differ diff --git a/phsource/vowelcharts/cs b/phsource/vowelcharts/cs index c627fdb3..1eb97d34 100644 --- a/phsource/vowelcharts/cs +++ b/phsource/vowelcharts/cs @@ -5,6 +5,8 @@ e 0 584 1820 2560 584 1820 2560 i 0 360 2120 2680 360 2120 2660 o 0 566 890 2641 566 890 2641 u 0 344 800 2360 344 800 2360 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 i: 0 272 2247 3100 288 2247 3100 e: 0 584 1820 2560 584 1820 2560 a: 0 784 1180 2680 776 1200 2680 diff --git a/phsource/vowelcharts/cs.png b/phsource/vowelcharts/cs.png index 6ba3a87e..0dd823da 100644 Binary files a/phsource/vowelcharts/cs.png and b/phsource/vowelcharts/cs.png differ diff --git a/phsource/vowelcharts/cy b/phsource/vowelcharts/cy index 0bbe74ab..d3ae27aa 100644 --- a/phsource/vowelcharts/cy +++ b/phsource/vowelcharts/cy @@ -2,6 +2,7 @@ @- 0 525 1441 2340 525 1441 2340 a 0 904 1320 2700 896 1340 2660 E 0 645 1705 2520 645 1705 2520 +I 0 360 2120 2680 360 2120 2660 Y 0 448 1660 2528 448 1660 2528 O 0 566 890 2641 566 890 2641 U 0 320 740 2400 320 740 2400 @@ -14,6 +15,7 @@ o: 0 424 800 2580 408 780 2600 A: 0 775 1067 2800 795 1122 2580 AY 0 664 1040 2800 312 2240 2940 aI 0 860 1240 2820 415 2044 2600 +aY 0 860 1240 2820 415 2044 2600 aU 0 847 1383 2510 360 800 2360 @I 0 640 1562 2400 355 2222 2720 @Y 0 640 1562 2400 355 2222 2720 @@ -23,3 +25,4 @@ Yu 0 405 1790 2442 344 1080 2200 OI 0 545 780 2720 310 2002 2500 OY 0 545 780 2720 310 2002 2500 uI 0 352 960 2340 343 1911 2586 +uY 0 352 960 2340 343 1911 2586 diff --git a/phsource/vowelcharts/cy.png b/phsource/vowelcharts/cy.png index 9f780944..80bdd6d5 100644 Binary files a/phsource/vowelcharts/cy.png and b/phsource/vowelcharts/cy.png differ diff --git a/phsource/vowelcharts/da.png b/phsource/vowelcharts/da.png index eda204bb..003c4524 100644 Binary files a/phsource/vowelcharts/da.png and b/phsource/vowelcharts/da.png differ diff --git a/phsource/vowelcharts/de.png b/phsource/vowelcharts/de.png index cb23b92a..c58a58dc 100644 Binary files a/phsource/vowelcharts/de.png and b/phsource/vowelcharts/de.png differ diff --git a/phsource/vowelcharts/dv.png b/phsource/vowelcharts/dv.png index cc570ab5..78542d2c 100644 Binary files a/phsource/vowelcharts/dv.png and b/phsource/vowelcharts/dv.png differ diff --git a/phsource/vowelcharts/el.png b/phsource/vowelcharts/el.png index bf4eafaa..d845383f 100644 Binary files a/phsource/vowelcharts/el.png and b/phsource/vowelcharts/el.png differ diff --git a/phsource/vowelcharts/en b/phsource/vowelcharts/en index 2fca00d8..3e8b7804 100644 --- a/phsource/vowelcharts/en +++ b/phsource/vowelcharts/en @@ -9,7 +9,7 @@ I2 0 408 1920 2580 416 1900 2580 @5 0 525 1441 2340 525 1441 2340 U 0 445 902 2620 445 902 2620 @L 0 485 891 2780 450 792 2980 -a# 0 -1 -1 257 257 257 257 +a# 0 658 1408 2460 658 1408 2460 aa 0 904 1320 2700 896 1340 2660 E 0 646 1780 2500 646 1780 2500 I 0 408 1940 2600 408 1940 2600 diff --git a/phsource/vowelcharts/en-n b/phsource/vowelcharts/en-n index 4199959e..3323df65 100644 --- a/phsource/vowelcharts/en-n +++ b/phsource/vowelcharts/en-n @@ -25,8 +25,9 @@ O@ 0 575 891 2640 580 1023 2480 o@ 0 575 891 2640 580 1023 2480 u: 0 332 1527 2256 290 1023 2220 aU 0 660 1562 2360 340 990 2360 -oU 0 20480 0 256 768 578 140 +oU 0 454 812 2559 432 824 2520 aI 0 860 1360 2660 488 1840 2440 +eI 0 456 1980 2540 440 1980 2540 OI 0 545 780 2720 310 2002 2500 e@ 0 647 1778 2530 593 1553 2370 i@ 0 320 2220 2800 528 1520 2360 diff --git a/phsource/vowelcharts/en-n.png b/phsource/vowelcharts/en-n.png index 277bd9df..529a04f9 100644 Binary files a/phsource/vowelcharts/en-n.png and b/phsource/vowelcharts/en-n.png differ diff --git a/phsource/vowelcharts/en-rp.png b/phsource/vowelcharts/en-rp.png index 4863b6da..cea8bae8 100644 Binary files a/phsource/vowelcharts/en-rp.png and b/phsource/vowelcharts/en-rp.png differ diff --git a/phsource/vowelcharts/en-sc b/phsource/vowelcharts/en-sc index 26efbdd7..7357f3f8 100644 --- a/phsource/vowelcharts/en-sc +++ b/phsource/vowelcharts/en-sc @@ -6,6 +6,7 @@ i 0 520 2000 2540 520 2000 2540 3 0 612 1232 2620 612 1240 2620 @2 0 528 1500 2380 528 1500 2380 @5 0 528 1500 2380 528 1500 2380 +U 0 407 1500 2160 392 1500 2160 @L 0 560 900 2780 450 792 2980 a# 0 760 1420 2600 736 1380 2540 aa 0 784 1180 2680 776 1200 2680 @@ -27,8 +28,10 @@ o@ 0 424 780 2680 504 940 1820 u: 1 407 1500 2160 392 1500 2160 u: 0 392 1700 2240 392 1700 2240 aU 0 698 1320 2484 280 1600 2340 +oU 0 412 760 2680 412 760 2680 aI 1 892 1340 2684 552 1800 2480 aI 0 760 1200 2680 352 2280 2780 +eI 0 416 2140 2660 416 2140 2660 OI 0 624 980 2620 328 2127 2940 e@ 0 464 1980 2520 658 1408 2460 i@ 0 368 2156 2720 528 1595 2460 diff --git a/phsource/vowelcharts/en-sc.png b/phsource/vowelcharts/en-sc.png index 407fe471..93d19ba5 100644 Binary files a/phsource/vowelcharts/en-sc.png and b/phsource/vowelcharts/en-sc.png differ diff --git a/phsource/vowelcharts/en-us b/phsource/vowelcharts/en-us index 1cae1998..c1ef39b3 100644 --- a/phsource/vowelcharts/en-us +++ b/phsource/vowelcharts/en-us @@ -9,34 +9,37 @@ I2 0 416 1800 2560 416 1800 2560 @5 0 525 1441 2340 525 1441 2340 U 0 496 1040 2560 496 1040 2560 @L 0 485 891 2780 450 792 2980 -a# 0 -256 255 0 257 257 257 +a# 0 658 1408 2460 658 1408 2460 aa 1 670 1719 2556 710 1672 2671 aa 0 700 1680 2506 652 1488 2470 -E 0 544 1760 2580 608 1600 2580 +E 0 584 1820 2560 608 1600 2580 I 0 408 1920 2580 416 1900 2580 I# 0 448 1660 2528 448 1660 2528 0 0 728 1200 2660 712 1200 2660 -V 0 632 1300 2640 632 1300 2640 +V 0 632 1300 2600 616 1340 2600 A: 1 728 1200 2600 520 1260 1900 A: 0 728 1200 2660 712 1200 2660 A@ 0 728 1200 2600 520 1260 1900 -3: 0 480 1460 2180 464 1440 2000 +3: 0 480 1408 2320 464 1440 2000 i: 0 296 2220 2820 216 2400 2820 O: 1 612 1000 2600 512 1200 1800 O: 0 656 1000 2620 630 960 2700 O 0 657 1100 2703 657 1120 2703 O@ 0 612 1000 2600 512 1200 1800 o@ 0 468 840 2660 520 1160 1900 -u: 0 352 1380 2260 296 1000 2220 +u: 0 352 1420 2260 320 1120 2235 aU 0 784 1320 2620 496 900 2620 oU 0 549 1116 2380 384 800 2460 -aI 0 736 1200 2520 560 1820 2500 +aI 0 796 1260 2610 560 1820 2500 eI 0 536 1800 2540 381 2100 2708 OI 0 552 940 2656 400 1805 2592 e@ 0 536 1776 2540 520 1400 1800 i@ 0 368 2156 2720 528 1595 2460 i@3 0 405 1932 2549 506 1460 1820 U@ 0 456 1080 2400 520 1180 1980 +aI@ 0 736 1220 2700 584 1500 2400 +aI3 0 736 1220 2700 524 1470 2190 +aU@ 0 784 1320 2620 464 1380 2000 IR 0 544 1340 2460 616 1190 2450 VR 0 648 1180 2595 640 1140 2460 o: 0 454 812 2559 432 824 2520 diff --git a/phsource/vowelcharts/en-us.png b/phsource/vowelcharts/en-us.png index 67b7b009..a37c62bc 100644 Binary files a/phsource/vowelcharts/en-us.png and b/phsource/vowelcharts/en-us.png differ diff --git a/phsource/vowelcharts/en-wi.png b/phsource/vowelcharts/en-wi.png index 0d699d0f..7bd2db73 100644 Binary files a/phsource/vowelcharts/en-wi.png and b/phsource/vowelcharts/en-wi.png differ diff --git a/phsource/vowelcharts/en-wm b/phsource/vowelcharts/en-wm index d23d3cfe..8d1742d5 100644 --- a/phsource/vowelcharts/en-wm +++ b/phsource/vowelcharts/en-wm @@ -9,7 +9,7 @@ I2 0 312 2213 2775 312 2213 2775 @5 0 525 1441 2340 525 1441 2340 U 0 445 902 2620 445 902 2620 @L 0 485 891 2780 450 792 2980 -a# 0 511 -1 257 257 257 -1 +a# 0 658 1408 2460 658 1408 2460 aa 0 904 1320 2700 896 1340 2660 E 0 456 1980 2540 440 1980 2540 I 1 384 2030 2610 384 2030 2610 @@ -28,6 +28,8 @@ u: 0 525 1441 2340 340 990 2360 aU 0 660 1562 2360 340 990 2360 oU 0 616 1220 2380 390 957 2140 aI 0 562 943 2656 357 1915 2761 +eI 0 649 1485 2430 355 2222 2720 +OI 0 469 864 2440 310 2040 2440 e@ 0 480 1408 2320 545 1419 2320 i@ 0 328 2190 2770 525 1441 2340 i@3 0 368 2156 2720 528 1595 2460 diff --git a/phsource/vowelcharts/en-wm.png b/phsource/vowelcharts/en-wm.png index e2023f2e..8c887dcc 100644 Binary files a/phsource/vowelcharts/en-wm.png and b/phsource/vowelcharts/en-wm.png differ diff --git a/phsource/vowelcharts/en.png b/phsource/vowelcharts/en.png index 5219814d..dda2fe95 100644 Binary files a/phsource/vowelcharts/en.png and b/phsource/vowelcharts/en.png differ diff --git a/phsource/vowelcharts/eo.png b/phsource/vowelcharts/eo.png index 3b4b9cf8..e221b40a 100644 Binary files a/phsource/vowelcharts/eo.png and b/phsource/vowelcharts/eo.png differ diff --git a/phsource/vowelcharts/es-la.png b/phsource/vowelcharts/es-la.png index dbaba69e..9ef0aac2 100644 Binary files a/phsource/vowelcharts/es-la.png and b/phsource/vowelcharts/es-la.png differ diff --git a/phsource/vowelcharts/es.png b/phsource/vowelcharts/es.png index dbaba69e..9ef0aac2 100644 Binary files a/phsource/vowelcharts/es.png and b/phsource/vowelcharts/es.png differ diff --git a/phsource/vowelcharts/et.png b/phsource/vowelcharts/et.png index 74003384..feb05a68 100644 Binary files a/phsource/vowelcharts/et.png and b/phsource/vowelcharts/et.png differ diff --git a/phsource/vowelcharts/fa b/phsource/vowelcharts/fa index a1ed6ba0..cc057f97 100644 --- a/phsource/vowelcharts/fa +++ b/phsource/vowelcharts/fa @@ -10,6 +10,8 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 A 0 656 1000 2620 630 960 2700 eI 0 547 1855 2536 320 2300 2740 oU 0 496 900 2520 360 800 2140 diff --git a/phsource/vowelcharts/fa.png b/phsource/vowelcharts/fa.png index 36e9ef0d..f4500a36 100644 Binary files a/phsource/vowelcharts/fa.png and b/phsource/vowelcharts/fa.png differ diff --git a/phsource/vowelcharts/fi.png b/phsource/vowelcharts/fi.png index 6e13f68f..77cb36be 100644 Binary files a/phsource/vowelcharts/fi.png and b/phsource/vowelcharts/fi.png differ diff --git a/phsource/vowelcharts/fr b/phsource/vowelcharts/fr index 42cde02d..574e3eef 100644 --- a/phsource/vowelcharts/fr +++ b/phsource/vowelcharts/fr @@ -17,7 +17,7 @@ O~ 0 344 700 2620 344 700 2620 W 0 552 1441 2400 552 1441 2400 j/ 0 355 2222 2720 355 2222 2720 a- 0 856 1320 2700 856 1320 2700 -a# 0 -1 -1 257 257 257 257 +a# 0 658 1408 2460 658 1408 2460 e- 0 488 1990 2540 488 1990 2540 E- 0 584 1820 2560 584 1820 2560 I 0 408 1940 2600 408 1940 2600 diff --git a/phsource/vowelcharts/fr-ca b/phsource/vowelcharts/fr-ca index 5c1c6420..3d1cba3e 100644 --- a/phsource/vowelcharts/fr-ca +++ b/phsource/vowelcharts/fr-ca @@ -11,6 +11,8 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 y 1 280 1720 2340 280 1720 2340 y 0 280 1720 2340 280 1720 2340 E 0 584 1820 2560 584 1820 2560 @@ -21,7 +23,7 @@ O~ 0 344 700 2620 344 700 2620 W 0 552 1441 2400 552 1441 2400 j/ 0 355 2222 2720 355 2222 2720 a- 0 856 1320 2700 856 1320 2700 -a# 0 -1 -1 257 257 257 257 +a# 0 658 1408 2460 658 1408 2460 e- 0 488 1990 2540 488 1990 2540 E- 0 584 1820 2560 584 1820 2560 I 0 384 2030 2610 384 2030 2610 diff --git a/phsource/vowelcharts/fr-ca.png b/phsource/vowelcharts/fr-ca.png index bcf235ba..7fc1d891 100644 Binary files a/phsource/vowelcharts/fr-ca.png and b/phsource/vowelcharts/fr-ca.png differ diff --git a/phsource/vowelcharts/fr.png b/phsource/vowelcharts/fr.png index 9fc82caf..b2dcd181 100644 Binary files a/phsource/vowelcharts/fr.png and b/phsource/vowelcharts/fr.png differ diff --git a/phsource/vowelcharts/ga.png b/phsource/vowelcharts/ga.png index c1e1123d..150bf7e8 100644 Binary files a/phsource/vowelcharts/ga.png and b/phsource/vowelcharts/ga.png differ diff --git a/phsource/vowelcharts/gd b/phsource/vowelcharts/gd index d840c642..c211890b 100644 --- a/phsource/vowelcharts/gd +++ b/phsource/vowelcharts/gd @@ -10,3 +10,5 @@ m- 0 512 1300 2340 370 1040 2300 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 N- 0 504 1824 2548 490 2100 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 diff --git a/phsource/vowelcharts/gd.png b/phsource/vowelcharts/gd.png index 051292cd..c10eeb99 100644 Binary files a/phsource/vowelcharts/gd.png and b/phsource/vowelcharts/gd.png differ diff --git a/phsource/vowelcharts/grc.png b/phsource/vowelcharts/grc.png index b61aa7ec..bea00c8b 100644 Binary files a/phsource/vowelcharts/grc.png and b/phsource/vowelcharts/grc.png differ diff --git a/phsource/vowelcharts/hi b/phsource/vowelcharts/hi index 97ee73c5..10df5fc8 100644 --- a/phsource/vowelcharts/hi +++ b/phsource/vowelcharts/hi @@ -4,6 +4,8 @@ a 0 658 1408 2460 658 1408 2460 e 0 416 2140 2660 416 2140 2660 i 0 296 2220 2880 288 2260 2900 o 0 454 812 2559 432 824 2520 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 V 1 584 1440 2460 600 1440 2460 V 0 695 1316 2500 695 1316 2500 @3 0 528 1500 2380 528 1500 2380 diff --git a/phsource/vowelcharts/hi.png b/phsource/vowelcharts/hi.png index cbdd703f..741f4f8f 100644 Binary files a/phsource/vowelcharts/hi.png and b/phsource/vowelcharts/hi.png differ diff --git a/phsource/vowelcharts/hr b/phsource/vowelcharts/hr index 24c6495a..5ad00b70 100644 --- a/phsource/vowelcharts/hr +++ b/phsource/vowelcharts/hr @@ -4,6 +4,8 @@ e 0 456 1980 2540 440 1980 2540 i 0 296 2220 2880 288 2260 2900 o 0 512 860 2648 512 860 2648 u 0 320 740 2400 320 740 2400 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 E 0 584 1820 2560 584 1820 2560 O 0 536 920 2600 536 920 2600 i: 0 272 2247 3100 288 2247 3100 diff --git a/phsource/vowelcharts/hr.png b/phsource/vowelcharts/hr.png index 326f00b2..4dfe6b63 100644 Binary files a/phsource/vowelcharts/hr.png and b/phsource/vowelcharts/hr.png differ diff --git a/phsource/vowelcharts/ht.png b/phsource/vowelcharts/ht.png index 2c8f0da3..80b35a23 100644 Binary files a/phsource/vowelcharts/ht.png and b/phsource/vowelcharts/ht.png differ diff --git a/phsource/vowelcharts/hu.png b/phsource/vowelcharts/hu.png index 38f99673..ca5a35f6 100644 Binary files a/phsource/vowelcharts/hu.png and b/phsource/vowelcharts/hu.png differ diff --git a/phsource/vowelcharts/hy.png b/phsource/vowelcharts/hy.png index fa82db87..35e29fce 100644 Binary files a/phsource/vowelcharts/hy.png and b/phsource/vowelcharts/hy.png differ diff --git a/phsource/vowelcharts/id.png b/phsource/vowelcharts/id.png index 55be61a0..e99c08d2 100644 Binary files a/phsource/vowelcharts/id.png and b/phsource/vowelcharts/id.png differ diff --git a/phsource/vowelcharts/is.png b/phsource/vowelcharts/is.png index 40365699..fe2da5c8 100644 Binary files a/phsource/vowelcharts/is.png and b/phsource/vowelcharts/is.png differ diff --git a/phsource/vowelcharts/it.png b/phsource/vowelcharts/it.png index 2d503316..fcf21b80 100644 Binary files a/phsource/vowelcharts/it.png and b/phsource/vowelcharts/it.png differ diff --git a/phsource/vowelcharts/jbo b/phsource/vowelcharts/jbo index bba56953..19678dad 100644 --- a/phsource/vowelcharts/jbo +++ b/phsource/vowelcharts/jbo @@ -7,6 +7,8 @@ o 0 512 860 2648 512 860 2648 u 0 320 860 2360 320 860 2460 n- 1 496 1512 2380 480 1500 2540 n- 0 496 1512 2380 380 1780 2540 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 aU 0 847 1383 2510 360 800 2360 aI 0 912 1320 2740 360 2200 2820 eI 0 547 1855 2536 320 2300 2740 diff --git a/phsource/vowelcharts/jbo.png b/phsource/vowelcharts/jbo.png index 3b944c7f..b48bf25f 100644 Binary files a/phsource/vowelcharts/jbo.png and b/phsource/vowelcharts/jbo.png differ diff --git a/phsource/vowelcharts/ka.png b/phsource/vowelcharts/ka.png index 783efda7..34b4bcff 100644 Binary files a/phsource/vowelcharts/ka.png and b/phsource/vowelcharts/ka.png differ diff --git a/phsource/vowelcharts/kk.png b/phsource/vowelcharts/kk.png index 2cef486b..2c7dc0fa 100644 Binary files a/phsource/vowelcharts/kk.png and b/phsource/vowelcharts/kk.png differ diff --git a/phsource/vowelcharts/kn b/phsource/vowelcharts/kn index 1a2320ac..ccfd4e5c 100644 --- a/phsource/vowelcharts/kn +++ b/phsource/vowelcharts/kn @@ -1,8 +1,10 @@ @ 0 525 1441 2340 525 1441 2340 +a 0 728 1300 2595 736 1300 2595 e 0 456 1980 2540 440 1980 2540 i 0 296 2220 2880 288 2260 2900 o 0 454 812 2559 432 824 2520 u 0 368 880 2440 368 900 2440 +r- 0 648 1200 2300 640 1200 2260 i: 0 280 2280 2840 240 2339 2840 I 0 360 2120 2680 360 2120 2660 e: 0 456 1980 2540 440 1980 2540 diff --git a/phsource/vowelcharts/kn.png b/phsource/vowelcharts/kn.png index 250879b9..33c32cd7 100644 Binary files a/phsource/vowelcharts/kn.png and b/phsource/vowelcharts/kn.png differ diff --git a/phsource/vowelcharts/ko b/phsource/vowelcharts/ko new file mode 100644 index 00000000..312f86fe --- /dev/null +++ b/phsource/vowelcharts/ko @@ -0,0 +1,8 @@ +@ 0 566 890 2641 566 890 2641 +a 0 728 1200 2660 712 1200 2660 +e 0 456 1980 2540 440 1980 2540 +i 0 280 2280 2840 240 2339 2840 +o 0 412 760 2680 412 760 2680 +u 0 320 740 2400 320 740 2400 +E 0 646 1780 2500 646 1780 2500 +u- 0 336 1440 2460 336 1440 2460 diff --git a/phsource/vowelcharts/ko.png b/phsource/vowelcharts/ko.png new file mode 100644 index 00000000..f3b6bb69 Binary files /dev/null and b/phsource/vowelcharts/ko.png differ diff --git a/phsource/vowelcharts/ku.png b/phsource/vowelcharts/ku.png index 2ea98815..0586192a 100644 Binary files a/phsource/vowelcharts/ku.png and b/phsource/vowelcharts/ku.png differ diff --git a/phsource/vowelcharts/la.png b/phsource/vowelcharts/la.png index eef95c83..1d4eaf81 100644 Binary files a/phsource/vowelcharts/la.png and b/phsource/vowelcharts/la.png differ diff --git a/phsource/vowelcharts/lt b/phsource/vowelcharts/lt index e43c8252..7010be06 100644 --- a/phsource/vowelcharts/lt +++ b/phsource/vowelcharts/lt @@ -5,6 +5,7 @@ e 0 584 1820 2560 584 1820 2560 i 0 272 2247 3100 288 2247 3100 o 0 512 860 2648 512 860 2648 u 0 320 860 2360 320 860 2460 +l 0 352 1240 3020 352 1200 3020 w 0 320 860 2360 320 860 2460 A 0 784 1180 2680 776 1200 2680 a: 0 784 1180 2680 776 1200 2680 diff --git a/phsource/vowelcharts/lt.png b/phsource/vowelcharts/lt.png index 8065d6ce..5dbd1bff 100644 Binary files a/phsource/vowelcharts/lt.png and b/phsource/vowelcharts/lt.png differ diff --git a/phsource/vowelcharts/lv b/phsource/vowelcharts/lv index 6e52617f..10d660b1 100644 --- a/phsource/vowelcharts/lv +++ b/phsource/vowelcharts/lv @@ -8,6 +8,7 @@ i: 0 296 2220 2880 288 2260 2900 e: 0 584 1820 2560 584 1820 2560 & 0 736 1540 2500 752 1540 2500 &: 0 736 1540 2500 752 1540 2500 +a# 0 632 1300 2600 616 1340 2600 a: 0 784 1180 2680 776 1200 2680 o: 0 512 860 2648 512 860 2648 u: 0 320 860 2360 320 860 2460 diff --git a/phsource/vowelcharts/lv.png b/phsource/vowelcharts/lv.png index 69840de0..24be4b44 100644 Binary files a/phsource/vowelcharts/lv.png and b/phsource/vowelcharts/lv.png differ diff --git a/phsource/vowelcharts/mk b/phsource/vowelcharts/mk index f92f0104..866c3ed0 100644 --- a/phsource/vowelcharts/mk +++ b/phsource/vowelcharts/mk @@ -5,6 +5,8 @@ e 0 456 1980 2540 440 1980 2540 i 0 296 2220 2880 288 2260 2900 o 0 512 860 2648 512 860 2648 u 0 320 740 2400 320 740 2400 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 E 0 584 1820 2560 584 1820 2560 i: 0 272 2247 3100 288 2247 3100 & 0 728 1300 2595 736 1300 2595 diff --git a/phsource/vowelcharts/mk.png b/phsource/vowelcharts/mk.png index 4f22f004..cae2f738 100644 Binary files a/phsource/vowelcharts/mk.png and b/phsource/vowelcharts/mk.png differ diff --git a/phsource/vowelcharts/ml b/phsource/vowelcharts/ml index 0f3d2969..f04029a4 100644 --- a/phsource/vowelcharts/ml +++ b/phsource/vowelcharts/ml @@ -5,6 +5,7 @@ e 0 456 1980 2540 440 1980 2540 i 0 296 2220 2880 288 2260 2900 o 0 454 812 2559 432 824 2520 u 0 320 860 2360 320 860 2460 +r- 0 648 1200 2300 640 1200 2260 V 1 584 1440 2460 600 1440 2460 V 0 695 1316 2500 695 1316 2500 i: 0 280 2280 2840 240 2339 2840 @@ -16,3 +17,4 @@ o: 0 454 812 2559 432 824 2520 u: 0 320 860 2360 320 860 2460 aI 0 912 1320 2740 360 2200 2820 aU 0 724 1130 2760 472 780 2500 +y 0 407 1500 2160 392 1500 2160 diff --git a/phsource/vowelcharts/ml.png b/phsource/vowelcharts/ml.png index 5238864e..635e2132 100644 Binary files a/phsource/vowelcharts/ml.png and b/phsource/vowelcharts/ml.png differ diff --git a/phsource/vowelcharts/mt b/phsource/vowelcharts/mt index 2a426993..e148a2d5 100644 --- a/phsource/vowelcharts/mt +++ b/phsource/vowelcharts/mt @@ -4,6 +4,7 @@ e 0 504 1900 2544 496 1920 2552 i 0 744 1540 2500 328 2280 2720 o 0 512 860 2648 512 860 2648 u 0 320 740 2400 320 740 2400 +l- 0 352 1240 3020 352 1200 3020 I 0 408 1940 2600 408 1940 2600 Y 0 448 1520 2420 463 1520 2400 U 0 368 800 2660 368 800 2660 diff --git a/phsource/vowelcharts/mt.png b/phsource/vowelcharts/mt.png index cfc399a5..1550121b 100644 Binary files a/phsource/vowelcharts/mt.png and b/phsource/vowelcharts/mt.png differ diff --git a/phsource/vowelcharts/nci.png b/phsource/vowelcharts/nci.png index 9dca6502..47567fc5 100644 Binary files a/phsource/vowelcharts/nci.png and b/phsource/vowelcharts/nci.png differ diff --git a/phsource/vowelcharts/ne.png b/phsource/vowelcharts/ne.png index 23e022da..34e2be12 100644 Binary files a/phsource/vowelcharts/ne.png and b/phsource/vowelcharts/ne.png differ diff --git a/phsource/vowelcharts/nl.png b/phsource/vowelcharts/nl.png index 73a8f052..8a243919 100644 Binary files a/phsource/vowelcharts/nl.png and b/phsource/vowelcharts/nl.png differ diff --git a/phsource/vowelcharts/no b/phsource/vowelcharts/no index a7d2aad4..5cc832dc 100644 --- a/phsource/vowelcharts/no +++ b/phsource/vowelcharts/no @@ -17,6 +17,7 @@ O 0 552 860 2660 552 880 2660 o: 0 424 800 2580 408 780 2600 U 0 368 880 2440 368 900 2440 u: 0 320 740 2400 320 740 2400 +u- 0 323 1520 2140 323 1520 2160 u-: 0 272 1520 2100 280 1560 2120 AI 0 624 980 2620 328 2127 2940 aI 0 776 1340 2540 355 2222 2720 diff --git a/phsource/vowelcharts/no.png b/phsource/vowelcharts/no.png index 794c25a6..da2cd38e 100644 Binary files a/phsource/vowelcharts/no.png and b/phsource/vowelcharts/no.png differ diff --git a/phsource/vowelcharts/nso.png b/phsource/vowelcharts/nso.png index c6965fdc..1e81276b 100644 Binary files a/phsource/vowelcharts/nso.png and b/phsource/vowelcharts/nso.png differ diff --git a/phsource/vowelcharts/pa b/phsource/vowelcharts/pa index fbe593db..b7270e67 100644 --- a/phsource/vowelcharts/pa +++ b/phsource/vowelcharts/pa @@ -5,6 +5,7 @@ e 0 416 2140 2660 416 2140 2660 i 0 304 2440 3020 304 2440 3020 o 0 454 812 2559 432 824 2520 u 0 320 740 2400 320 740 2400 +r- 0 648 1200 2300 640 1200 2260 V 1 584 1440 2460 600 1440 2460 V 0 695 1316 2500 695 1316 2500 i: 0 304 2440 3020 304 2440 3020 diff --git a/phsource/vowelcharts/pa.png b/phsource/vowelcharts/pa.png index 3397c831..7bdd6c9e 100644 Binary files a/phsource/vowelcharts/pa.png and b/phsource/vowelcharts/pa.png differ diff --git a/phsource/vowelcharts/pl b/phsource/vowelcharts/pl index 6cb9249f..ce4d4cbe 100644 --- a/phsource/vowelcharts/pl +++ b/phsource/vowelcharts/pl @@ -1,9 +1,11 @@ a 0 904 1320 2700 896 1340 2660 i 0 264 2340 2880 240 2339 2860 u 0 320 740 2400 320 740 2400 +a# 0 728 1300 2595 736 1300 2595 E 1 720 1760 2420 672 1562 2520 E 0 584 1820 2560 584 1820 2560 E# 0 656 1560 2440 648 1536 2444 O 0 536 920 2600 536 920 2600 +y 0 408 1760 2540 408 1760 2540 E~ 0 688 1620 2640 391 990 2580 O~ 0 552 896 2680 440 820 2692 diff --git a/phsource/vowelcharts/pl.png b/phsource/vowelcharts/pl.png index 8c93e081..67392fb1 100644 Binary files a/phsource/vowelcharts/pl.png and b/phsource/vowelcharts/pl.png differ diff --git a/phsource/vowelcharts/prs.png b/phsource/vowelcharts/prs.png index 3ae31867..1f1a7a17 100644 Binary files a/phsource/vowelcharts/prs.png and b/phsource/vowelcharts/prs.png differ diff --git a/phsource/vowelcharts/pt b/phsource/vowelcharts/pt index 4d9ca6ac..00eb8bfa 100644 --- a/phsource/vowelcharts/pt +++ b/phsource/vowelcharts/pt @@ -25,6 +25,7 @@ o~ 0 448 840 2598 448 840 2598 u~ 0 328 900 2360 328 900 2360 &~ 0 664 1408 2460 664 1408 2460 &U~ 0 658 1408 2460 392 520 2580 +oI~ 0 456 840 2598 312 2040 2780 & 0 658 1408 2460 658 1408 2460 &/ 0 658 1408 2460 658 1408 2460 A 0 896 1440 2710 896 1440 2710 diff --git a/phsource/vowelcharts/pt-pt b/phsource/vowelcharts/pt-pt index 4b715e33..fa70e6e1 100644 --- a/phsource/vowelcharts/pt-pt +++ b/phsource/vowelcharts/pt-pt @@ -8,6 +8,7 @@ u 0 320 940 2360 320 900 2360 E 0 584 1820 2560 584 1820 2560 O 0 630 920 2627 616 940 2627 U 0 320 940 2360 320 900 2360 +y 0 376 1515 2460 376 1515 2460 aU 0 847 1383 2510 360 800 2360 eU 0 460 1929 2512 327 947 2367 iU 0 280 2280 2820 328 957 2140 @@ -21,7 +22,7 @@ o~ 0 448 840 2598 448 840 2598 u~ 0 328 900 2360 328 900 2360 &~ 0 670 1719 2556 710 1672 2671 &U~ 0 658 1408 2460 392 520 2580 -& 0 257 -1 257 257 257 257 +& 0 658 1408 2460 658 1408 2460 &/ 0 658 1408 2460 658 1408 2460 A 0 896 1440 2710 896 1440 2710 i/ 0 376 1515 2460 376 1515 2460 diff --git a/phsource/vowelcharts/pt-pt.png b/phsource/vowelcharts/pt-pt.png index 33fec8ff..d0c9ea6e 100644 Binary files a/phsource/vowelcharts/pt-pt.png and b/phsource/vowelcharts/pt-pt.png differ diff --git a/phsource/vowelcharts/pt.png b/phsource/vowelcharts/pt.png index 525080c3..2ba01830 100644 Binary files a/phsource/vowelcharts/pt.png and b/phsource/vowelcharts/pt.png differ diff --git a/phsource/vowelcharts/ro b/phsource/vowelcharts/ro index f2b56e24..65a05c6a 100644 --- a/phsource/vowelcharts/ro +++ b/phsource/vowelcharts/ro @@ -6,6 +6,7 @@ i 0 280 2280 2840 240 2339 2840 o 0 496 972 2500 496 972 2500 u 0 344 800 2360 344 800 2360 O 0 584 940 2580 584 940 2580 +y 0 376 1515 2460 376 1515 2460 Y 0 448 1520 2420 463 1520 2400 aU 0 847 1383 2510 360 800 2360 eU 0 460 1929 2512 327 947 2367 diff --git a/phsource/vowelcharts/ro.png b/phsource/vowelcharts/ro.png index a02f232d..8be80a3b 100644 Binary files a/phsource/vowelcharts/ro.png and b/phsource/vowelcharts/ro.png differ diff --git a/phsource/vowelcharts/ru.png b/phsource/vowelcharts/ru.png index 2d530565..95672297 100644 Binary files a/phsource/vowelcharts/ru.png and b/phsource/vowelcharts/ru.png differ diff --git a/phsource/vowelcharts/rw.png b/phsource/vowelcharts/rw.png index 94e25766..b71380f9 100644 Binary files a/phsource/vowelcharts/rw.png and b/phsource/vowelcharts/rw.png differ diff --git a/phsource/vowelcharts/si.png b/phsource/vowelcharts/si.png index 92c56af1..225b6998 100644 Binary files a/phsource/vowelcharts/si.png and b/phsource/vowelcharts/si.png differ diff --git a/phsource/vowelcharts/sk b/phsource/vowelcharts/sk index 91d004d6..9b2e652e 100644 --- a/phsource/vowelcharts/sk +++ b/phsource/vowelcharts/sk @@ -5,6 +5,8 @@ e 0 504 1900 2544 496 1920 2552 i 0 360 2120 2680 360 2120 2660 o 0 512 860 2648 512 860 2648 u 0 344 800 2360 344 800 2360 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 i: 0 272 2247 3100 288 2247 3100 & 0 680 1660 2520 680 1660 2520 e: 0 584 1820 2560 584 1820 2560 @@ -16,3 +18,5 @@ eU 0 460 1929 2512 327 947 2367 oU 0 496 900 2520 360 800 2140 aI 0 912 1320 2740 360 2200 2820 eI 0 608 1800 2529 408 1960 2600 +r: 0 648 1200 2300 640 1200 2260 +l: 0 352 1240 3020 352 1200 3020 diff --git a/phsource/vowelcharts/sk.png b/phsource/vowelcharts/sk.png index 152949ec..c1c6272e 100644 Binary files a/phsource/vowelcharts/sk.png and b/phsource/vowelcharts/sk.png differ diff --git a/phsource/vowelcharts/sl b/phsource/vowelcharts/sl index 3b494ca6..d6fc804c 100644 --- a/phsource/vowelcharts/sl +++ b/phsource/vowelcharts/sl @@ -6,6 +6,7 @@ o 0 454 812 2559 432 824 2520 u 0 344 800 2360 344 800 2360 E 0 720 1760 2420 672 1562 2520 O 0 536 920 2600 536 920 2600 +y 0 408 1760 2540 408 1760 2540 i: 0 272 2247 3100 288 2247 3100 e: 0 584 1820 2560 584 1820 2560 a: 0 904 1320 2700 896 1340 2660 diff --git a/phsource/vowelcharts/sl.png b/phsource/vowelcharts/sl.png index 3b59cd26..5e571006 100644 Binary files a/phsource/vowelcharts/sl.png and b/phsource/vowelcharts/sl.png differ diff --git a/phsource/vowelcharts/sq.png b/phsource/vowelcharts/sq.png index 6005a776..c0119188 100644 Binary files a/phsource/vowelcharts/sq.png and b/phsource/vowelcharts/sq.png differ diff --git a/phsource/vowelcharts/sr b/phsource/vowelcharts/sr index bda09819..4da3f29e 100644 --- a/phsource/vowelcharts/sr +++ b/phsource/vowelcharts/sr @@ -4,10 +4,12 @@ e 0 456 1980 2540 440 1980 2540 i 0 296 2220 2880 288 2260 2900 o 0 512 860 2648 512 860 2648 u 0 320 740 2400 320 740 2400 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 E 0 584 1820 2560 584 1820 2560 O 0 536 920 2600 536 920 2600 i: 0 272 2247 3100 288 2247 3100 -& 0 0 0 0 0 0 0 +& 0 760 1420 2600 736 1380 2540 e: 0 584 1820 2560 584 1820 2560 a: 0 904 1320 2700 896 1340 2660 o: 0 512 860 2648 512 860 2648 diff --git a/phsource/vowelcharts/sr.png b/phsource/vowelcharts/sr.png index 21ae40a1..293ee6c1 100644 Binary files a/phsource/vowelcharts/sr.png and b/phsource/vowelcharts/sr.png differ diff --git a/phsource/vowelcharts/sv b/phsource/vowelcharts/sv index 3590c7c3..d2246ac4 100644 --- a/phsource/vowelcharts/sv +++ b/phsource/vowelcharts/sv @@ -5,10 +5,12 @@ i: 0 280 2255 3030 264 2255 3030 I 0 360 2120 2680 360 2120 2660 e: 0 416 2140 2660 416 2140 2660 E 0 647 1778 2530 647 1778 2530 +E- 0 592 1580 2480 592 1580 2460 E: 0 720 1760 2420 672 1562 2520 E3 0 680 1660 2520 680 1660 2520 y: 0 280 1980 2340 280 1980 2340 y 0 384 1920 2480 384 1920 2440 +u- 0 360 1540 2220 360 1560 2280 Y: 0 480 1560 2420 516 1520 2340 W 0 587 1500 2300 587 1500 2300 8 0 496 1040 2560 496 1040 2560 diff --git a/phsource/vowelcharts/sv.png b/phsource/vowelcharts/sv.png index 8a651ced..7ec8a617 100644 Binary files a/phsource/vowelcharts/sv.png and b/phsource/vowelcharts/sv.png differ diff --git a/phsource/vowelcharts/sw.png b/phsource/vowelcharts/sw.png index 25c25148..824c9ae2 100644 Binary files a/phsource/vowelcharts/sw.png and b/phsource/vowelcharts/sw.png differ diff --git a/phsource/vowelcharts/ta b/phsource/vowelcharts/ta index 7d2fda9d..b28eeab4 100644 --- a/phsource/vowelcharts/ta +++ b/phsource/vowelcharts/ta @@ -12,7 +12,9 @@ e: 0 456 1980 2540 440 1980 2540 E 0 584 1820 2560 584 1820 2560 a: 0 834 1220 2690 834 1220 2690 o: 0 454 812 2559 432 824 2520 +U 0 349 1700 2290 349 1700 2290 u: 0 320 940 2360 320 900 2360 aI 0 904 1320 2700 304 2360 2980 aU 0 830 1364 2440 488 900 2240 u2 0 320 940 2360 320 900 2360 +U: 0 349 1700 2290 349 1700 2290 diff --git a/phsource/vowelcharts/ta.png b/phsource/vowelcharts/ta.png index 1b49a118..620dddb1 100644 Binary files a/phsource/vowelcharts/ta.png and b/phsource/vowelcharts/ta.png differ diff --git a/phsource/vowelcharts/te b/phsource/vowelcharts/te index 43d71382..2c5eef42 100644 --- a/phsource/vowelcharts/te +++ b/phsource/vowelcharts/te @@ -4,6 +4,8 @@ e 0 504 1900 2544 496 1920 2552 i 0 296 2220 2880 288 2260 2900 o 0 454 812 2559 432 824 2520 u 0 320 940 2360 320 900 2360 +r- 0 648 1200 2300 640 1200 2260 +l- 0 352 1240 3020 352 1200 3020 V 1 584 1440 2460 600 1440 2460 V 0 695 1316 2500 695 1316 2500 i: 0 280 2280 2840 240 2339 2840 diff --git a/phsource/vowelcharts/te.png b/phsource/vowelcharts/te.png index 2ef2ebe7..39189946 100644 Binary files a/phsource/vowelcharts/te.png and b/phsource/vowelcharts/te.png differ diff --git a/phsource/vowelcharts/tn.png b/phsource/vowelcharts/tn.png index ccef0e5b..30dfc8e6 100644 Binary files a/phsource/vowelcharts/tn.png and b/phsource/vowelcharts/tn.png differ diff --git a/phsource/vowelcharts/tr b/phsource/vowelcharts/tr index ff59d736..ae2f5c7c 100644 --- a/phsource/vowelcharts/tr +++ b/phsource/vowelcharts/tr @@ -1,3 +1,4 @@ +@ 0 456 1240 2400 456 1240 2400 a 0 800 1320 2637 800 1320 2637 e 0 504 1900 2544 496 1920 2552 i 0 296 2220 2880 288 2260 2900 diff --git a/phsource/vowelcharts/tr.png b/phsource/vowelcharts/tr.png index 213f2eec..0a884b3e 100644 Binary files a/phsource/vowelcharts/tr.png and b/phsource/vowelcharts/tr.png differ diff --git a/phsource/vowelcharts/tt b/phsource/vowelcharts/tt index 78041713..c47d3034 100644 --- a/phsource/vowelcharts/tt +++ b/phsource/vowelcharts/tt @@ -1,11 +1,12 @@ -a 0 872 1440 2720 840 1440 2690 e 0 448 1660 2528 448 1660 2528 i 0 280 2280 2840 240 2339 2840 o 0 488 900 2520 488 920 2520 u 0 320 860 2360 320 860 2460 y 0 280 1720 2340 280 1720 2340 W 0 525 1320 2200 525 1320 2200 -V 0 448 1000 2520 448 1000 2520 -A 0 688 1064 2806 672 1100 2806 +V 0 500 1412 2320 500 1412 2340 +& 0 647 1778 2530 647 1778 2530 +A 0 728 1200 2660 712 1200 2660 0 0 656 1000 2620 630 960 2700 +e: 0 436 2076 2604 436 2076 2604 I 0 384 2030 2610 384 2030 2610 diff --git a/phsource/vowelcharts/tt.png b/phsource/vowelcharts/tt.png index 625c6f39..591a7a87 100644 Binary files a/phsource/vowelcharts/tt.png and b/phsource/vowelcharts/tt.png differ diff --git a/phsource/vowelcharts/vi.png b/phsource/vowelcharts/vi.png index a195a7a6..ce88b315 100644 Binary files a/phsource/vowelcharts/vi.png and b/phsource/vowelcharts/vi.png differ diff --git a/phsource/vowelcharts/wo.png b/phsource/vowelcharts/wo.png index dfaee703..10816584 100644 Binary files a/phsource/vowelcharts/wo.png and b/phsource/vowelcharts/wo.png differ diff --git a/phsource/vowelcharts/zh.png b/phsource/vowelcharts/zh.png index 62c7dcea..ab0408c9 100644 Binary files a/phsource/vowelcharts/zh.png and b/phsource/vowelcharts/zh.png differ diff --git a/phsource/vowelcharts/zhy.png b/phsource/vowelcharts/zhy.png index c5b9408b..a63a12e6 100644 Binary files a/phsource/vowelcharts/zhy.png and b/phsource/vowelcharts/zhy.png differ diff --git a/phsource/vwl_en_us/3_us b/phsource/vwl_en_us/3_us index b390b26c..e6eee317 100644 Binary files a/phsource/vwl_en_us/3_us and b/phsource/vwl_en_us/3_us differ diff --git a/phsource/vwl_en_us/3_us2 b/phsource/vwl_en_us/3_us2 index c79e3c81..673df821 100644 Binary files a/phsource/vwl_en_us/3_us2 and b/phsource/vwl_en_us/3_us2 differ diff --git a/phsource/vwl_en_us/ee b/phsource/vwl_en_us/ee index bd9f6937..a0ced591 100644 Binary files a/phsource/vwl_en_us/ee and b/phsource/vwl_en_us/ee differ diff --git a/platforms/riscos/Makefile b/platforms/riscos/Makefile index 2cd3b0da..e996cc63 100644 --- a/platforms/riscos/Makefile +++ b/platforms/riscos/Makefile @@ -16,11 +16,11 @@ Squeezeflags = -o $@ @.o.intonation @.o.readclause @.o.setlengths @.o.synthdata \ @.o.synthesize @.o.translate @.o.tr_languages @.o.numbers \ @.o.synth_mbrola @.o.phonemelist \ - @.o.tr_english @.o.wavegen @.o.voices @.o.assemb @.o.cmhgfile + @.o.wavegen @.o.voices @.o.assemb @.o.cmhgfile Link $(Linkflags) C:o.stubs C:o.c++lib @.o.speak_riscos @.o.compiledict \ @.o.dictionary @.o.intonation @.o.readclause @.o.setlengths \ @.o.synthdata @.o.synthesize @.o.numbers @.o.synth_mbrola \ - @.o.translate @.o.tr_english @.o.wavegen @.o.tr_languages \ + @.o.translate @.o.wavegen @.o.tr_languages \ @.o.voices @.o.phonemelist @.o.assemb @.o.cmhgfile @@ -51,8 +51,6 @@ Squeezeflags = -o $@ c++ $(c++flags) -o @.o.synthesize @.CPP.synthesize @.o.translate: @.CPP.translate c++ $(c++flags) -o @.o.translate @.CPP.translate -@.o.tr_english: @.CPP.tr_english - c++ $(c++flags) -o @.o.tr_english @.CPP.tr_english @.o.tr_languages: @.CPP.tr_languages c++ $(c++flags) -o @.o.tr_languages @.CPP.tr_languages @.o.voices: @.CPP.voices diff --git a/platforms/riscos/copysource b/platforms/riscos/copysource index 4bfece70..b63ca50e 100644 --- a/platforms/riscos/copysource +++ b/platforms/riscos/copysource @@ -18,6 +18,5 @@ copy .^.src.sintab/h .h.sintab fq~c copy .^.src.speak_lib/h .h.speak_lib fq~c copy .^.src.synthesize/h .h.synthesize fq~c copy .^.src.translate/h .h.translate fq~c -copy .^.src.tr_languages/h .h.tr_languages fq~c copy .^.src.voice/h .h.voice fq~c copy .^.src.wave/h .h.wave fq~c diff --git a/platforms/riscos/s/cmhgfile b/platforms/riscos/s/cmhgfile index ac15c21b..ba4640af 100644 --- a/platforms/riscos/s/cmhgfile +++ b/platforms/riscos/s/cmhgfile @@ -3,7 +3,7 @@ initialisation-code: user_init title-string: Speak -help-string: Speak 3.46 Text to Speech (32 bit) +help-string: Speak 3.40 Text to Speech (32 bit) swi-chunk-base-number: &4ad80 swi-handler-code: swi_handler diff --git a/src/Makefile.espeakedit b/src/Makefile.espeakedit index 07f93094..281fbaf5 100644 --- a/src/Makefile.espeakedit +++ b/src/Makefile.espeakedit @@ -10,17 +10,17 @@ SRCS= compiledata.cpp compiledict.cpp debug.cpp dictionary.cpp espeak_command.cp OBJS=$(patsubst %.cpp,%.o,$(SRCS)) -WX_LIBS = -pthread -lwx_gtk2u_xrc-2.6 -lwx_gtk2u_qa-2.6 -lwx_gtk2u_html-2.6 \ - -lwx_gtk2u_adv-2.6 -lwx_gtk2u_core-2.6 -lwx_baseu_xml-2.6 -lwx_baseu_net-2.6 -lwx_baseu-2.6 +WX_LIBS = -pthread -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 \ + -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8 LIBS=-lstdc++ -lportaudio -CPPFLAGS = -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 - -I/usr/include/wx-2.6 \ +CPPFLAGS = -Wall -g -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.8 + -I/usr/include/wx-2.8 \ -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT -CXXFLAGS = -O2 -Wall -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.6 -I/usr/include/wx-2.6 \ +CXXFLAGS = -O2 -Wall -fexceptions -I/usr/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 \ -DGTK_NO_CHECK_CASTS -D__WXGTK__ -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT all: espeakedit diff --git a/src/compiledata.cpp b/src/compiledata.cpp index d0f005b1..de977964 100644 --- a/src/compiledata.cpp +++ b/src/compiledata.cpp @@ -71,6 +71,7 @@ typedef struct { #define k_AND 1 #define k_OR 2 #define k_THEN 3 +#define k_NOT 4 #define kTHISSTRESS 0x800 @@ -90,6 +91,7 @@ static keywtab_t k_conditions[] = { {"AND", 0, k_AND}, {"OR", 0, k_OR}, {"THEN", 0, k_THEN}, + {"NOT", 0, k_NOT}, {"prevPh", tWHICH_PHONEME, 0}, {"prevPhW", tWHICH_PHONEME, 5}, {"thisPh", tWHICH_PHONEME, 1}, @@ -2257,10 +2259,11 @@ int CompileIf(int elif) int key; int finish = 0; int word = 0; - int word2 = 0; + int word2; int data; int bitmap; int brackets; + int not_flag; USHORT *prog_last_if = NULL; then_count = 2; @@ -2268,6 +2271,8 @@ int CompileIf(int elif) while(!finish) { + not_flag = 0; + word2 = 0; if(prog_out >= prog_out_max) { error("Phoneme program too large", NULL); @@ -2277,6 +2282,13 @@ int CompileIf(int elif) if((key = NextItem(tCONDITION)) < 0) error("Expected a condition, not '%s'",item_string); + if((item_type == 0) && (key == k_NOT)) + { + not_flag = 1; + if((key = NextItem(tCONDITION)) < 0) + error("Expected a condition, not '%s'",item_string); + } + if(item_type == tWHICH_PHONEME) { // prevPh(), thisPh(), nextPh(), next2Ph() etc @@ -2331,7 +2343,9 @@ int CompileIf(int elif) *prog_out++ = word | i_CONDITION; if(word2 != 0) - *prog_out++ = word2; + *prog_out++ = word2; + if(not_flag) + *prog_out++ = i_NOT; // expect AND, OR, THEN switch(NextItem(tCONDITION)) diff --git a/src/dictionary.cpp b/src/dictionary.cpp index 85a4ead6..0aa1d63c 100644 --- a/src/dictionary.cpp +++ b/src/dictionary.cpp @@ -521,7 +521,7 @@ sprintf(outptr,"* "); unsigned short ipa1[96] = { 0x20,0x21,0x22,0x2b0,0x24,0x25,0x0e6,0x2c8,0x28,0x27e,0x2a,0x2b,0x2cc,0x2d,0x2e,0x2f, 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, +0x259,0x251,0x3b2,0xe7,0xf0,0x25b,0x46,0x262,0x127,0x26a,0x25f,0x4b,0x29f,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,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 diff --git a/src/espeakedit.cpp b/src/espeakedit.cpp index 6f5a22e0..2fe14c59 100644 --- a/src/espeakedit.cpp +++ b/src/espeakedit.cpp @@ -21,7 +21,6 @@ #include "wx/wfstream.h" -#include "wx/notebook.h" #include "wx/image.h" #include "wx/filename.h" #include "wx/numdlg.h" @@ -74,8 +73,6 @@ extern void VowelChart(int control, char *fname); extern void MakeVowelLists(void); extern void MakeWordFreqList(); -extern const char *dict_name; - extern wxMenu *speak_menu; extern wxMenu *data_menu; @@ -83,15 +80,16 @@ extern wxMenu *data_menu; MyFrame *myframe = NULL; SpectDisplay *currentcanvas = NULL; -ChildFrProsody *prosodyframe = NULL; ProsodyDisplay *prosodycanvas = NULL; wxNotebook *notebook = NULL; +wxNotebook *screenpages = NULL; + wxProgressDialog *progress; int progress_max; int gui_flag = 0; int frame_x, frame_y, frame_w, frame_h; -wxList my_children; +int adding_page = 0; // fix for wxWidgets (2,8,7) bug, adding first page to a wxNotebook gives emptystring for GetPageTex() in Notebook_Page_Changed event. wxFont FONT_SMALL(8,wxSWISS,wxNORMAL,wxNORMAL); wxFont FONT_MEDIUM(9,wxSWISS,wxNORMAL,wxNORMAL); @@ -166,7 +164,7 @@ if(argc > 1) if((frame_w == 0) || (frame_h == 0)) { - frame_w = 1024; + frame_w = 800; frame_h = 768; } @@ -191,7 +189,7 @@ if(argc > 1) return TRUE; } -BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) +BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_CHAR(MyFrame::OnKey) EVT_MENU(MENU_ABOUT, MyFrame::OnAbout) EVT_MENU(MENU_DOCS, MyFrame::OnAbout) @@ -213,7 +211,6 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_MENU(MENU_SORT_DICTIONARY, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_MBROLA, MyFrame::OnTools) EVT_MENU(MENU_COMPILE_INTONATION, MyFrame::OnTools) - EVT_MENU(MENU_CLOSE_ALL, MyFrame::OnQuit) EVT_MENU(MENU_QUIT, MyFrame::OnQuit) EVT_MENU(MENU_SPEAK_TRANSLATE, MyFrame::OnSpeak) EVT_MENU(MENU_SPEAK_RULES, MyFrame::OnSpeak) @@ -238,14 +235,22 @@ BEGIN_EVENT_TABLE(MyFrame, wxMDIParentFrame) EVT_MENU(MENU_TEST, MyFrame::OnTools) EVT_MENU(MENU_TEST2, MyFrame::OnTools) + EVT_MENU(SPECTSEQ_SAVE, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVEAS, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVESELECT, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_CLOSE, MyFrame::PageCmd) + EVT_MENU(SPECTSEQ_SAVEPITCH, MyFrame::PageCmd) + EVT_MENU(MENU_CLOSE_ALL, MyFrame::PageCmd) + + + EVT_NOTEBOOK_PAGE_CHANGED(ID_SCREENPAGES, MyFrame::OnPageChanged) EVT_TIMER(1, MyFrame::OnTimer) - EVT_SIZE(MyFrame::OnSize) - EVT_SASH_DRAGGED(ID_WINDOW_LEFT, MyFrame::OnSashDrag) END_EVENT_TABLE() MyFrame::~MyFrame(void) {//==================== + myframe->Maximize(false); myframe->Show(false); myframe->Iconize(false); // os=Windows, get the non-iconsized size myframe->GetPosition(&frame_x, &frame_y); @@ -254,7 +259,7 @@ MyFrame::~MyFrame(void) MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style): - wxMDIParentFrame(parent, id, title, pos, size, style) + wxFrame(parent, id, title, pos, size, style) {//=================================================================================================================== // Main Frame constructor @@ -262,16 +267,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c int result; int param; - // Another window to the left of the client window - m_leftWindow = new wxSashLayoutWindow(this, ID_WINDOW_LEFT, - wxDefaultPosition, wxSize(298, 30), - wxNO_BORDER | wxSW_3D | wxCLIP_CHILDREN); - m_leftWindow->SetDefaultSize(wxSize(310, 1000)); - m_leftWindow->SetOrientation(wxLAYOUT_VERTICAL); - m_leftWindow->SetAlignment(wxLAYOUT_LEFT); - m_leftWindow->SetSashVisible(wxSASH_RIGHT, TRUE); - - notebook = new wxNotebook(m_leftWindow,-1); + notebook = new wxNotebook(this, ID_NOTEBOOK, wxDefaultPosition, wxSize(312,760)); // notebook->AddPage(voicedlg,_T("Voice"),FALSE); formantdlg = new FormantDlg(notebook); notebook->AddPage(formantdlg,_T(" Spect"),FALSE); @@ -281,6 +277,29 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c notebook->AddPage(transldlg,_T("Text"),TRUE); + screenpages = new wxNotebook(this, ID_SCREENPAGES, wxDefaultPosition, wxSize(554,702)); + + wxBoxSizer *framesizer = new wxBoxSizer( wxHORIZONTAL ); + + + framesizer->Add( + notebook, + 0, // make horizontally stretchable + wxEXPAND | // make vertically stretchable + wxALL, // and make border all around + 4 ); // set border width + + framesizer->Add( + screenpages, + 1, // make horizontally stretchable + wxEXPAND | // make vertically stretchable + wxALL, // and make border all around + 4 ); // set border width + + SetSizer( framesizer ); // use the sizer for layout + framesizer->SetSizeHints( this ); // set size hints to honour minimum size + SetSize(pos.x, pos.y, size.GetWidth(), size.GetHeight()); + LoadConfig(); WavegenInitSound(); @@ -310,7 +329,7 @@ MyFrame::MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, c for(param=0; paramGetSelection(); + + switch(event.GetId()) + { + case SPECTSEQ_SAVE: + currentcanvas->Save(currentcanvas->savepath); + break; + case SPECTSEQ_SAVEAS: + currentcanvas->Save(); + break; + case SPECTSEQ_SAVESELECT: + currentcanvas->Save(_T(""), 1); + break; + case SPECTSEQ_CLOSE: + if(screenpages->GetPageText(pagenum) != _T("Prosody")) + { + currentcanvas->OnActivate(0); + } + screenpages->DeletePage(pagenum); + + if((n_pages = screenpages->GetPageCount()) > 0) + { + if(pagenum >= n_pages) + pagenum--; + page = (SpectDisplay *)screenpages->GetPage(pagenum); + + if(screenpages->GetPageText(pagenum) == _T("Prosody")) + { + MakeMenu(3, NULL); + } + else + { + page->OnActivate(1); + MakeMenu(2, NULL); + } + } + else + { + MakeMenu(1, NULL); + } + break; + + case MENU_CLOSE_ALL: + n_pages = screenpages->GetPageCount(); + for(ix=n_pages-1; ix>=0; ix--) + { + screenpages->DeletePage(ix); + } + currentcanvas = NULL; + MakeMenu(1, NULL); + break; + case SPECTSEQ_SAVEPITCH: + currentcanvas->SavePitchenv(currentcanvas->spectseq->pitchenv); + break; + } + } +} + + + +void MyFrame::OnPageChanged(wxNotebookEvent& event) +{//================================================= + int pagenum; + wxString title; + SpectDisplay *page; + + pagenum = event.GetSelection(); + + if(event.GetId() == ID_SCREENPAGES) + { + title = screenpages->GetPageText(pagenum); + + if((title != _T("Prosody")) && (adding_page != 2)) + { + page = (SpectDisplay *)screenpages->GetPage(pagenum); + + if(page != currentcanvas) + { + if(currentcanvas != NULL) + { + currentcanvas->OnActivate(0); + } + page->OnActivate(1); + } + MakeMenu(2, NULL); + } + else + { + MakeMenu(3, NULL); + } + } + adding_page = 0; // work around for wxNotebook bug (version 2.8.7) +} + + void MyFrame::OnKey(wxKeyEvent& event) { int key; @@ -624,7 +747,7 @@ void MyFrame::OnTools(wxCommandEvent& event) case MENU_COMPILE_INTONATION: CompileIntonation(); break; - + case MENU_COMPILE_DICT_DEBUG: debug_flag =1; // and drop through to next case case MENU_COMPILE_DICT: @@ -729,105 +852,4 @@ void MyFrame::OnSpeak(wxCommandEvent& event) } -void MyFrame::OnSashDrag(wxSashEvent& event) -{ - int w, h; - - if (event.GetDragStatus() == wxSASH_STATUS_OUT_OF_RANGE) - return; - - GetClientSize(&w, &h); - - switch (event.GetId()) - { - case ID_WINDOW_LEFT: - { - m_leftWindow->SetDefaultSize(wxSize(event.GetDragRect().width, h)); - break; - } - } - wxLayoutAlgorithm layout; - layout.LayoutMDIFrame(this); - - // Leaves bits of itself behind sometimes - GetClientWindow()->Refresh(); -} - - - -void MyFrame::OnSize(wxSizeEvent& WXUNUSED(event)) -{ - wxLayoutAlgorithm layout; - layout.LayoutMDIFrame(this); -} - -// Note that SASHTEST_NEW_WINDOW and SASHTEST_ABOUT commands get passed -// to the parent window for processing, so no need to -// duplicate event handlers here. - -BEGIN_EVENT_TABLE(MyChild, wxMDIChildFrame) - EVT_MENU(SPECTSEQ_CLOSE, MyChild::OnQuit) - EVT_MENU(SPECTSEQ_SAVE, MyChild::OnSave) - EVT_MENU(SPECTSEQ_SAVEAS, MyChild::OnSaveAs) - EVT_MENU(SPECTSEQ_SAVESELECT, MyChild::OnSaveSelect) - EVT_MENU(SPECTSEQ_SAVEPITCH, MyChild::OnSavePitchenv) - - EVT_ACTIVATE(MyChild::OnActivate) -END_EVENT_TABLE() - -MyChild::MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, -const long style): - wxMDIChildFrame(parent, -1, title, pos, size, style) -{ - canvas = NULL; - my_children.Append(this); -} - -MyChild::~MyChild(void) -{ - canvas = NULL; -#ifndef PLATFORM_WINDOWS - wxWindow *w; - // bug in wxMDIChildFrame, we need to explicitly remove the ChildFrame from the ClientWindow - w = myframe->GetClientWindow(); - w->RemoveChild(this); -#endif - my_children.DeleteObject(this); -} - -//extern void CloseCanvas(); - -void MyChild::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - Destroy(); - -} - -void MyChild::OnSave(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(canvas->savepath); -} - -void MyChild::OnSaveAs(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(); -} - -void MyChild::OnSaveSelect(wxCommandEvent& WXUNUSED(event)) -{ - canvas->Save(_T(""),1); -} - -void MyChild::OnSavePitchenv(wxCommandEvent& WXUNUSED(event)) -{ - canvas->SavePitchenv(canvas->spectseq->pitchenv); -} - -void MyChild::OnActivate(wxActivateEvent& event) -{ - if(canvas) - canvas->OnActivate(event.GetActive()); - - -} diff --git a/src/formantdlg.cpp b/src/formantdlg.cpp index 96d20b07..a7795b0c 100644 --- a/src/formantdlg.cpp +++ b/src/formantdlg.cpp @@ -97,7 +97,7 @@ void FormantDlg::OnSpin(wxSpinEvent& event) currentcanvas->SetFocus(); } -FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,wxSize(400,1000)) +FormantDlg::FormantDlg(wxWindow *parent) : wxPanel(parent,-1,wxDefaultPosition,wxSize(400,800)) {//============================================================================================= int ix; int y; @@ -395,7 +395,7 @@ void FormantDlg::ShowFrame(SpectSeq *spectseq, int frame, int pk, int field) { value.Printf(_T("%3d"),peak->klt_bp); t_klt_bp[ix]->SetValue(value); - } + } } } @@ -469,12 +469,12 @@ void ByteGraph::DrawSpectrum(wxDC& dc) numframes = seq->numframes; if(numframes == 0) return; - + GetClientSize(&width,&height); if(((length = seq->frames[numframes-1]->time)==0) && (numframes>1)) length = seq->frames[numframes-2]->time; - + length = length - seq->frames[0]->time; yscale = height/3000.0; @@ -518,7 +518,7 @@ void ByteGraph::OnDraw(wxDC &dc) double xscale, yscale; if(show_spectrum) DrawSpectrum(dc); - + if(npoints==0) return; GetClientSize(&width,&height); @@ -559,7 +559,7 @@ void ByteGraph::OnMouse(wxMouseEvent& event) wxPoint pt(event.GetLogicalPosition(dc)); t0 = t2 = seq->frames[0]->time; time = (double(pt.x) / spectrum_scale) + t0; - + for(ix=1; ixnumframes; ix++) { t1=t2; diff --git a/src/main.h b/src/main.h index 80632ce7..0402f15b 100644 --- a/src/main.h +++ b/src/main.h @@ -2,6 +2,7 @@ #include "wx/toolbar.h" #include "wx/laywin.h" #include "wx/progdlg.h" +#include "wx/notebook.h" typedef unsigned short USHORT; typedef unsigned char UCHAR; @@ -32,44 +33,45 @@ class MyApp: public wxApp }; // Define a new frame -class MyFrame: public wxMDIParentFrame +class MyFrame: public wxFrame { public: MyFrame(wxWindow *parent, const wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); ~MyFrame(void); - void OnSize(wxSizeEvent& event); + void OnAbout(wxCommandEvent& event); void OnQuit(wxCommandEvent& event); void OnOptions(wxCommandEvent& event); - void OnSpeak(wxCommandEvent& event); + void OnSpeak(wxCommandEvent& event); void OnTools(wxCommandEvent& event); - void OnSashDrag(wxSashEvent& event); void OnKey(wxKeyEvent& event); void OnTimer(wxTimerEvent& event); void LoadWavFile(void); void OnNewWindow(wxCommandEvent& event); void OnProsody(wxCommandEvent& event); + void PageCmd(wxCommandEvent& event); void SetVoiceTitle(char *voice_name); - + void OnPageChanged(wxNotebookEvent& event); protected: - wxSashLayoutWindow* m_leftWindow; wxTimer m_timer; DECLARE_EVENT_TABLE() }; -class MyChild: public wxMDIChildFrame + +#ifdef deleted +class MyChild: public wxPanel { public: SpectDisplay *canvas; - MyChild(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); + MyChild(wxNotebook *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); ~MyChild(void); void OnActivate(wxActivateEvent& event); - + void OnQuit(wxCommandEvent& event); void OnSave(wxCommandEvent& event); void OnSaveAs(wxCommandEvent& event); @@ -79,7 +81,7 @@ class MyChild: public wxMDIChildFrame DECLARE_EVENT_TABLE() }; - +#endif class TranslDlg : public wxPanel @@ -103,6 +105,7 @@ private: }; extern MyFrame *myframe; +extern wxNotebook* screenpages; extern TranslDlg *transldlg; extern wchar_t ipa1[256]; @@ -171,10 +174,12 @@ enum { SPECTSEQ_SAVEAS, SPECTSEQ_SAVESELECT, SPECTSEQ_SAVEPITCH, - SPECTSEQ_VOICEDLG + SPECTSEQ_VOICEDLG, + + ID_SCREENPAGES, + ID_NOTEBOOK }; -#define ID_WINDOW_LEFT 101 diff --git a/src/menus.cpp b/src/menus.cpp index 50db8d1a..b405b71a 100644 --- a/src/menus.cpp +++ b/src/menus.cpp @@ -24,10 +24,13 @@ wxMenu *speak_menu; wxMenu *data_menu = NULL; +wxMenuBar *menu_bar = NULL; + wxMenuBar *MakeMenu(int type, const char *dict_name) -{//================================================= +{//=================================================== char buf[100]; + wxMenu *old_menu; wxMenu *file_menu; wxMenu *help_menu; wxMenu *option_menu = NULL; @@ -42,118 +45,126 @@ wxMenuBar *MakeMenu(int type, const char *dict_name) file_menu->Append(MENU_SPECTRUM, _("&Open...")); file_menu->Append(MENU_SPECTRUM2, _("O&pen2...")); // file_menu->Append(MENU_PROSODY, _T("&Prosody window")); - if(type==0) + if(type<=1) { - } - else - if(type==1) - { - file_menu->Append(SPECTSEQ_SAVE, _("&Save")); - file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); - file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection")); - file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); - file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); -// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); } else if(type==2) { file_menu->Append(SPECTSEQ_SAVE, _("&Save")); file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); -// file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); + file_menu->Append(SPECTSEQ_SAVESELECT, _("Save Selection")); + file_menu->Append(SPECTSEQ_SAVEPITCH, _T("Save Pitch &Envelope")); file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); -// file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); + file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); + } + else + if(type==3) + { +// file_menu->Append(SPECTSEQ_SAVE, _("&Save")); +// file_menu->Append(SPECTSEQ_SAVEAS, _("Save &As...")); + file_menu->Append(SPECTSEQ_CLOSE, _("&Close")); + file_menu->Append(MENU_CLOSE_ALL, _T("Close &All")); } file_menu->Append(MENU_QUIT, _("&Quit")); - // SPEAK_MENU - speak_menu = new wxMenu; - speak_menu->Append(MENU_SPEAK_TRANSLATE, _("&Translate")); - speak_menu->Append(MENU_SPEAK_RULES, _("Show &Rules")); - speak_menu->Append(MENU_SPEAK_IPA, _("Show &IPA")); - speak_menu->Append(MENU_SPEAK_TEXT, _("&Speak")); - speak_menu->AppendSeparator(); - speak_menu->Append(MENU_SPEAK_FILE, _("Speak &file...")); - speak_menu->Append(MENU_SPEAK_PAUSE, _("&Pause")); - speak_menu->Append(MENU_SPEAK_STOP, _("St&op")); + if(type==0) + { + // Initialization, make all the menus + // SPEAK_MENU + speak_menu = new wxMenu; + speak_menu->Append(MENU_SPEAK_TRANSLATE, _("&Translate")); + speak_menu->Append(MENU_SPEAK_RULES, _("Show &Rules")); + speak_menu->Append(MENU_SPEAK_IPA, _("Show &IPA")); + speak_menu->Append(MENU_SPEAK_TEXT, _("&Speak")); + speak_menu->AppendSeparator(); + speak_menu->Append(MENU_SPEAK_FILE, _("Speak &file...")); + speak_menu->Append(MENU_SPEAK_PAUSE, _("&Pause")); + speak_menu->Append(MENU_SPEAK_STOP, _("St&op")); - // VOICE MENU - voice_menu = new wxMenu; - voice_menu->Append(MENU_SPEAK_VOICE, _("Select &Voice..")); - voice_menu->Append(MENU_SPEAK_VOICE_VARIANT, _("Select Voice Va&riant...")); + // VOICE MENU + voice_menu = new wxMenu; + voice_menu->Append(MENU_SPEAK_VOICE, _("Select &Voice..")); + voice_menu->Append(MENU_SPEAK_VOICE_VARIANT, _("Select Voice Va&riant...")); - // DATA MENU - data_menu = new wxMenu; - data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); - data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); - data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); - data_menu->AppendSeparator(); - data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); - data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); - data_menu->AppendSeparator(); - data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); - data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); + // DATA MENU + data_menu = new wxMenu; + data_menu->Append(MENU_COMPILE_PH, _("Compile &phoneme data")); + data_menu->Append(MENU_COMPILE_DICT, _("Compile &dictionary")); + data_menu->Append(MENU_COMPILE_DICT_DEBUG, _("Compile dictionary (debu&g)")); + data_menu->AppendSeparator(); + data_menu->Append(MENU_COMPILE_MBROLA, _("Compile &mbrola phonemes list...")); + data_menu->Append(MENU_COMPILE_INTONATION, _("Compile &intonation data")); + data_menu->AppendSeparator(); + data_menu->Append(MENU_FORMAT_DICTIONARY, _("&Layout *_rules file")); + data_menu->Append(MENU_SORT_DICTIONARY, _("&Sort *_rules file")); - sprintf(buf,"Compile &dictionary '%s'",dict_name); - data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); - sprintf(buf,"&Layout '%s_rules' file",dict_name); - data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); - sprintf(buf,"&Sort '%s_rules' file",dict_name); - data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"Compile &dictionary '%s'",dict_name); + data_menu->SetLabel(MENU_COMPILE_DICT, wxString(buf,wxConvLocal)); + sprintf(buf,"&Layout '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_FORMAT_DICTIONARY, wxString(buf,wxConvLocal)); + sprintf(buf,"&Sort '%s_rules' file",dict_name); + data_menu->SetLabel(MENU_SORT_DICTIONARY, wxString(buf,wxConvLocal)); - // OPTIONS MENU - paths_menu = new wxMenu; - paths_menu->Append(MENU_PATH0, _("Master phonemes file...")); - paths_menu->Append(MENU_PATH1, _("Phoneme data source...")); - paths_menu->Append(MENU_PATH2, _("Dictionary data source...")); - paths_menu->Append(MENU_PATH3, _("Synthesized sound WAV file...")); - paths_menu->AppendSeparator(); - paths_menu->Append(MENU_PATH4, _("Voice file to modify formant peaks...")); + // OPTIONS MENU + paths_menu = new wxMenu; + paths_menu->Append(MENU_PATH0, _("Master phonemes file...")); + paths_menu->Append(MENU_PATH1, _("Phoneme data source...")); + paths_menu->Append(MENU_PATH2, _("Dictionary data source...")); + paths_menu->Append(MENU_PATH3, _("Synthesized sound WAV file...")); + paths_menu->AppendSeparator(); + paths_menu->Append(MENU_PATH4, _("Voice file to modify formant peaks...")); - option_menu = new wxMenu; - option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu); - option_menu->Append(MENU_OPT_SPEED, _("Speed...")); - option_menu->Append(MENU_OPT_PUNCT, _("Speak punctiation")); - option_menu->Append(MENU_OPT_SPELL, _("Speak character names")); + option_menu = new wxMenu; + option_menu->Append(MENU_PATHS, _("Set &paths"), paths_menu); + option_menu->Append(MENU_OPT_SPEED, _("Speed...")); + option_menu->Append(MENU_OPT_PUNCT, _("Speak punctiation")); + option_menu->Append(MENU_OPT_SPELL, _("Speak character names")); - // TOOLS - vowelchart_menu = new wxMenu; - vowelchart_menu->Append(MENU_VOWELCHART1, _("From compiled phoneme data")); -// vowelchart_menu->Append(MENU_VOWELCHART2, _("From list of formants...")); - vowelchart_menu->Append(MENU_VOWELCHART3, _("From directory of vowel files...")); + // TOOLS + vowelchart_menu = new wxMenu; + vowelchart_menu->Append(MENU_VOWELCHART1, _("From compiled phoneme data")); + // vowelchart_menu->Append(MENU_VOWELCHART2, _("From list of formants...")); + vowelchart_menu->Append(MENU_VOWELCHART3, _("From directory of vowel files...")); - lexicon_menu = new wxMenu; - lexicon_menu->Append(MENU_LEXICON_RU, _("Russian")); - lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); - lexicon_menu->Append(MENU_LEXICON_DE, _("German")); - lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); -// lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); + lexicon_menu = new wxMenu; + lexicon_menu->Append(MENU_LEXICON_RU, _("Russian")); + lexicon_menu->Append(MENU_LEXICON_BG, _("Bulgarian")); + lexicon_menu->Append(MENU_LEXICON_DE, _("German")); + lexicon_menu->Append(MENU_LEXICON_IT, _("Italian")); + // lexicon_menu->Append(MENU_LEXICON_TEST, _("Test")); - tools_menu = new wxMenu; - tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); -// tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); - tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); - tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); - tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); - tools_menu->Append(MENU_TEST , _("Test (temporary)")); -// tools_menu->Append(MENU_TEST2 , _T("Test2")); + tools_menu = new wxMenu; + tools_menu->Append(MENU_VOWELCHART, _("Make &Vowels Chart"), vowelchart_menu); + // tools_menu->Append(MENU_LOAD_WAV, _T("Analyse WAV file")); + tools_menu->Append(MENU_LEXICON, _("Process &Lexicon"), lexicon_menu); + tools_menu->Append(MENU_TO_UTF8, _("Convert file to &UTF8...")); + tools_menu->Append(MENU_COUNT_WORDS, _("Count word &frequencies...")); + tools_menu->Append(MENU_TEST , _("Test (temporary)")); + // tools_menu->Append(MENU_TEST2 , _T("Test2")); - // HELP MENU - help_menu = new wxMenu; - help_menu->Append(MENU_DOCS, _("eSpeak &Documentation")); - help_menu->Append(MENU_ABOUT, _("&About")); + // HELP MENU + help_menu = new wxMenu; + help_menu->Append(MENU_DOCS, _("eSpeak &Documentation")); + help_menu->Append(MENU_ABOUT, _("&About")); - wxMenuBar *menu_bar = new wxMenuBar; - - menu_bar->Append(file_menu, _("&File")); - menu_bar->Append(speak_menu, _("&Speak")); - menu_bar->Append(voice_menu, _("&Voice")); - menu_bar->Append(option_menu, _("&Options")); - menu_bar->Append(tools_menu, _("&Tools")); - menu_bar->Append(data_menu, _("&Compile")); - menu_bar->Append(help_menu, _("&Help")); + menu_bar = new wxMenuBar; + menu_bar->Append(file_menu, _("&File")); + menu_bar->Append(speak_menu, _("&Speak")); + menu_bar->Append(voice_menu, _("&Voice")); + menu_bar->Append(option_menu, _("&Options")); + menu_bar->Append(tools_menu, _("&Tools")); + menu_bar->Append(data_menu, _("&Compile")); + menu_bar->Append(help_menu, _("&Help")); + } + else + { + // Just replace the File menu + old_menu = menu_bar->Replace(0, file_menu, _("&File")); + delete old_menu; + } return(menu_bar); } // end of MakeMenu diff --git a/src/numbers.cpp b/src/numbers.cpp index 5a521d0c..10a9fea7 100644 --- a/src/numbers.cpp +++ b/src/numbers.cpp @@ -1137,8 +1137,8 @@ static int LookupThousands(Translator *tr, int value, int thousandplex, int thou } // end f LookupThousands -static int LookupNum2(Translator *tr, int value, int control, char *ph_out) -{//======================================================================== +static int LookupNum2(Translator *tr, int value, const int control, char *ph_out) +{//============================================================================= // Lookup a 2 digit number // control bit 0: ordinal number // control bit 1: final tens and units (not number of thousands) (use special form of '1', LANG=de "eins") @@ -1151,6 +1151,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) int ix; int units; int tens; + int is_ordinal; int used_and=0; int found_ordinal = 0; int next_phtype; @@ -1175,6 +1176,8 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) ord_type = 'q'; } + is_ordinal = control & 1; + if((control & 2) && (n_digit_lookup == 2)) { // pronunciation of the final 2 digits has already been found @@ -1187,11 +1190,12 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) // is there a special pronunciation for this 2-digit number if(control & 8) { + // is there a feminine form? sprintf(string,"_%df",value); found = Lookup(tr, string, ph_digits); } else - if(control & 1) + if(is_ordinal) { strcpy(ph_ordinal, ph_ordinal2); @@ -1229,8 +1233,15 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) if(!found) { - sprintf(string,"_%d",value); - found = Lookup(tr, string, ph_digits); + if((is_ordinal) && (tr->langopts.numbers2 & NUM2_NO_TEEN_ORDINALS)) + { + // don't use numbers 10-99 to make ordinals, always use _1Xo etc (lang=pt) + } + else + { + sprintf(string,"_%d",value); + found = Lookup(tr, string, ph_digits); + } } } } @@ -1251,7 +1262,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) else { - if((control & 1) && + if((is_ordinal) && ((units == 0) || (tr->langopts.numbers & NUM_SWAP_TENS) || (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL))) { sprintf(string,"_%dX%c", tens, ord_type); @@ -1300,7 +1311,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) sprintf(string,"_%df",units); found = Lookup(tr, string, ph_digits); } - if((control & 1) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0)) + if((is_ordinal) && ((tr->langopts.numbers & NUM_SWAP_TENS) == 0)) { // ordinal sprintf(string,"_%d%c",units,ord_type); @@ -1335,7 +1346,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) } } - if((control & 1) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) + if((is_ordinal) && (found_ordinal == 0) && (ph_ordinal[0] == 0)) { if((value >= 20) && (((value % 10) == 0) || (tr->langopts.numbers & NUM_SWAP_TENS))) Lookup(tr, "_ord20", ph_ordinal); @@ -1347,7 +1358,7 @@ static int LookupNum2(Translator *tr, int value, int control, char *ph_out) { Lookup(tr, "_0and", ph_and); - if((control & 1) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)) + if((is_ordinal) && (tr->langopts.numbers2 & NUM2_MULTIPLE_ORDINAL)) ph_and[0] = 0; if(tr->langopts.numbers & NUM_SWAP_TENS) @@ -1406,6 +1417,7 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null int ix; int exact; int ordinal; + int tplex; int say_zero_hundred=0; char string[12]; // for looking up entries in **_list char buf1[100]; @@ -1465,10 +1477,16 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null if ((value % 1000) == 0) exact = 1; - if(LookupThousands(tr, hundreds / 10, thousandplex+1, exact | ordinal, ph_10T) == 0) + tplex = thousandplex+1; + if(tr->langopts.numbers2 & NUM2_MYRIADS) + { + tplex = 0; + } + + if(LookupThousands(tr, hundreds / 10, tplex, exact | ordinal, ph_10T) == 0) { x = 0; - if(tr->langopts.numbers2 & (1 << (thousandplex+1))) + if(tr->langopts.numbers2 & (1 << tplex)) x = 8; // use variant (feminine) for before thousands and millions LookupNum2(tr, hundreds/10, x, ph_digits); } @@ -1615,6 +1633,23 @@ static int LookupNum3(Translator *tr, int value, char *ph_out, int suppress_null } // end of LookupNum3 +bool CheckThousandsGroup(char *word, int group_len) +{//================================================ +// Is this a group of 3 digits which looks like a thousands group? + int ix; + + if(isdigit(word[group_len]) || isdigit(-1)) + return(false); + + for(ix=0; ix < group_len; ix++) + { + if(!isdigit(word[ix])) + return(false); + } + return(true); +} + + static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int *flags, WORD_TAB *wtab, int control) {//===================================================================================================================== // Number translation with various options @@ -1640,6 +1675,7 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned int decimal_mode; int suffix_ix; int skipwords = 0; + int group_len; char *p; char string[32]; // for looking up entries in **_list char buf1[100]; @@ -1662,8 +1698,12 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned n_digits = ix; value = this_value = atoi(word); + group_len = 3; + if(tr->langopts.numbers2 & NUM2_MYRIADS) + group_len = 4; + // is there a previous thousands part (as a previous "word") ? - if((n_digits == 3) && (word[-2] == tr->langopts.thousands_sep) && isdigit(word[-3])) + if((n_digits == group_len) && (word[-2] == tr->langopts.thousands_sep) && isdigit(word[-3])) { prev_thousands = 1; } @@ -1777,14 +1817,19 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned // a "thousand"/"million" suffix to this one digix = n_digits + thousands_inc; - while(((wtab[thousandplex+1].flags & FLAG_MULTIPLE_SPACES) == 0) && - isdigit(word[digix]) && isdigit(word[digix+1]) && isdigit(word[digix+2]) && !isdigit(word[digix+3]) && !isdigit(word[digix-1])) + while(((wtab[thousandplex+1].flags & FLAG_MULTIPLE_SPACES) == 0) && CheckThousandsGroup(&word[digix], group_len)) { - if((word[digix] != '0') || (word[digix+1] != '0') || (word[digix+2] != '0')) - thousands_exact = 0; + for(ix=0; ixlangopts.thousands_sep) || ((tr->langopts.numbers & NUM_ALLOW_SPACE) && (word[digix] == ' '))) { suffix_ix = digix+2; @@ -1820,7 +1865,8 @@ static int TranslateNumber_1(Translator *tr, char *word, char *ph_out, unsigned { if(thousands_inc > 0) { - if((thousandplex > 0) && (value < 1000)) + if(thousandplex > 0) +// if((thousandplex > 0) && (value < 1000)) { if((suppress_null == 0) && (LookupThousands(tr,value,thousandplex, thousands_exact, ph_append))) { diff --git a/src/prosodydisplay.cpp b/src/prosodydisplay.cpp index f7706e35..a6735ec6 100644 --- a/src/prosodydisplay.cpp +++ b/src/prosodydisplay.cpp @@ -31,7 +31,6 @@ #include "translate.h" extern MyFrame *myframe; -extern ChildFrProsody *prosodyframe; extern ProsodyDisplay *prosodycanvas; wxMenu *menu_prosody; @@ -60,6 +59,7 @@ ProsodyDisplay::ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSiz scalex = 0.5; scaley = double(LINESEP*6)/150.0; selected_ph = -1; + SetBackgroundColour(wxColour(245,245,245)); } // end of ProsodyDisplay::ProsodyDisplay @@ -119,7 +119,7 @@ void ProsodyDisplay::RefreshLine(int line) int ProsodyDisplay::GetWidth(PHONEME_LIST *p) {//======================================== int w; - + if(p->ph == NULL) return(0); @@ -279,7 +279,7 @@ void ProsodyDisplay::OnKey(wxKeyEvent& event) {//======================================== PHONEME_LIST *p; int display=1; - + if(selected_ph < 0) selected_ph = 0; @@ -301,7 +301,7 @@ void ProsodyDisplay::OnKey(wxKeyEvent& event) if(selected_ph < (numph-2)) selected_ph++; break; - + case WXK_UP: if(event.ControlDown()) ChangePh(-1,2); @@ -360,7 +360,7 @@ void ProsodyDisplay::DrawEnv(wxDC& dc, int x1, int y1, int width, PHONEME_LIST * PHONEME_DATA phdata_tone; if(width <= 0) return; - + if((pitchr = ph->pitch2 - ph->pitch1) < 0) { pitchr = -pitchr; @@ -425,6 +425,7 @@ void ProsodyDisplay::DrawPitchline(wxDC& dc, int line, int x1, int x2) y = LINEBASE+LINESEP; dc.SetPen(*wxLIGHT_GREY_PEN); +// dc.SetPen(*wxCYAN_PEN); for(ix=0; ix<5; ix++) { dc.DrawLine(0,offy-y,linewidth,offy-y); @@ -520,6 +521,12 @@ void ProsodyDisplay::OnDraw(wxDC& dc) int line, start, end; + GetClientSize(&x1, &y1); + if(x1 != linewidth) + { + LayoutData(NULL, 0); + } + wxRegionIterator upd(GetUpdateRegion()); // get the update rect list while (upd) @@ -549,15 +556,18 @@ void ProsodyDisplay::LayoutData(PHONEME_LIST *ph_list, int n_ph) int xpos; int w; int ix; + int height; PHONEME_LIST *p; - - - numph = n_ph; - phlist = ph_list; + if(ph_list != NULL) + { + numph = n_ph; + phlist = ph_list; + } num_lines = 0; linetab[0] = 1; + GetClientSize(&linewidth, &height); xpos = linewidth; // could improve this to do 'wordwrap' - only split on word boundary @@ -584,86 +594,35 @@ void ProsodyDisplay::LayoutData(PHONEME_LIST *ph_list, int n_ph) } // end of ProsodyDisplay::LayoutData +extern int adding_page; void MyFrame::OnProsody(wxCommandEvent& WXUNUSED(event)) {//===================================================== - // Open the Prosody display window - // Make another frame, containing a canvas + int width, height; + int ix, npages; - int h, w, w2; - - if(prosodyframe != NULL) + if(prosodycanvas != NULL) { // The Prosody window is already open - prosodyframe->Activate(); + + // ?? select the prosody page ?? + npages = screenpages->GetPageCount(); + for(ix=0; ixGetPage(ix) == (wxWindow*)prosodycanvas) + { + screenpages->ChangeSelection(ix); + break; + } + } return; } - m_leftWindow->GetSize(&w2, &h); - GetClientSize(&w, &h); - prosodyframe = new ChildFrProsody(myframe, _T(""), - wxPoint(0, 100), wxSize(w-w2, 420), - wxDEFAULT_FRAME_STYLE | - wxNO_FULL_REPAINT_ON_RESIZE); - - prosodyframe->SetTitle(_T("Prosody")); - - // Give it a status line - prosodyframe->CreateStatusBar(); - - int width, height; - wxMDIClientWindow *clientwin = (wxMDIClientWindow *)this->GetClientWindow(); - clientwin->GetClientSize(&width, &height); - -#ifdef deleted - wxPanel *panel = new wxPanel(prosodyframe,-1,wxPoint(0,0), wxSize(width,50)); - ProsodyDisplay *canvas = new ProsodyDisplay(prosodyframe, wxPoint(0, 50), wxSize(width-2, height-50)); -#else - ProsodyDisplay *canvas = new ProsodyDisplay(prosodyframe, wxPoint(0, 50), wxSize(width-10, height)); -#endif - - prosodycanvas = canvas; - - // Associate the menu bar with the frame - prosodyframe->SetMenuBar(MakeMenu(2,translator->dictionary_name)); - prosodyframe->prosodycanvas = canvas; - prosodyframe->Show(TRUE); + screenpages->GetClientSize(&width, &height); + prosodycanvas = new ProsodyDisplay(screenpages, wxPoint(0, 50), wxSize(width-10, height)); + adding_page = 2; // work around for wxNotebook bug (version 2.8.7) + screenpages->AddPage(prosodycanvas, _T("Prosody"), true); } -BEGIN_EVENT_TABLE(ChildFrProsody, wxMDIChildFrame) - EVT_MENU(SPECTSEQ_CLOSE, ChildFrProsody::OnQuit) - -// EVT_ACTIVATE(ChildFrProsody::OnActivate) -END_EVENT_TABLE() - -extern wxList my_children; - -ChildFrProsody::ChildFrProsody(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, -const long style): - wxMDIChildFrame(parent, -1, title, pos, size, style) -{ - my_children.Append(this); -} - -ChildFrProsody::~ChildFrProsody(void) -{ - wxWindow *w; - my_children.DeleteObject(this); - prosodycanvas = NULL; - prosodyframe = NULL; - -#ifndef PLATFORM_WINDOWS - // bug in wxMDIChildFrame, we need to explicitly remove the ChildFrame from the ClientWindow - w = myframe->GetClientWindow(); - w->RemoveChild(this); -#endif -} - -void ChildFrProsody::OnQuit(wxCommandEvent& WXUNUSED(event)) -{ - Close(TRUE); -} - - diff --git a/src/prosodydisplay.h b/src/prosodydisplay.h index 0351954f..e2c1ce09 100644 --- a/src/prosodydisplay.h +++ b/src/prosodydisplay.h @@ -15,7 +15,7 @@ class ProsodyDisplay: public wxScrolledWindow public: ProsodyDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& size); ~ProsodyDisplay(); - + virtual void OnDraw(wxDC& dc); void OnMouse(wxMouseEvent& event); void OnKey(wxKeyEvent& event); @@ -32,7 +32,7 @@ class ProsodyDisplay: public wxScrolledWindow int GetWidth(PHONEME_LIST *p); void ChangePh(int pitch1, int pitch2); void SelectPh(int index); - + int linewidth; // height for drawing pitch double scalex; // scale length values double scaley; // scale pitch values @@ -47,18 +47,4 @@ class ProsodyDisplay: public wxScrolledWindow }; // end class ProsodyDisplay -class ChildFrProsody: public wxMDIChildFrame -{ - public: - ProsodyDisplay *prosodycanvas; - ChildFrProsody(wxMDIParentFrame *parent, const wxString& title, const wxPoint& pos, const wxSize& size, const long style); - ~ChildFrProsody(void); - void OnActivate(wxActivateEvent& event); - - void OnQuit(wxCommandEvent& event); - void OnSave(wxCommandEvent& event); - void OnSaveAs(wxCommandEvent& event); - -DECLARE_EVENT_TABLE() -}; diff --git a/src/spect.h b/src/spect.h index e415d01e..ed365860 100644 --- a/src/spect.h +++ b/src/spect.h @@ -121,7 +121,7 @@ typedef struct { PEAKS7 peak_data[7]; unsigned char data[1]; /* firstly harmonic data, then f3,f4,f5 data */ } CYCLE; /* VARIABLE LENGTH Structure */ - + extern int SPC2_size_cycle(CYCLE *cy); //============================================================================================== @@ -142,7 +142,7 @@ public: void CopyPeaks(SpectFrame *sf); void ToggleMarker(int n); void ApplyVoiceMods(); - + void MakeWaveF(int peaks, PitchEnvelope &pitch, int amplitude, int duration); void MakeHtab(int numh, int *htab, int pitch); double GetRms(int amp); diff --git a/src/spectdisplay.cpp b/src/spectdisplay.cpp index 376fdd61..080ed3fd 100644 --- a/src/spectdisplay.cpp +++ b/src/spectdisplay.cpp @@ -42,9 +42,6 @@ extern MyFrame *frame ; #define SCROLLUNITS 20 -#define N_CANVASLIST 50 -static int canvaslistix=0; -static SpectDisplay *canvaslist[N_CANVASLIST]; SpectSeq *clipboard_spect=NULL; wxMenu *menu_spectdisplay=NULL; @@ -77,37 +74,14 @@ SpectDisplay::SpectDisplay(wxWindow *parent, const wxPoint& pos, const wxSize& s pk_num = 1; SetExtent(); - - if(canvaslistix < N_CANVASLIST-1) - canvaslist[canvaslistix++] = this; -// WavegenInitPkData(0); + } // end of SpectDisplay::SpectDisplay SpectDisplay::~SpectDisplay() {//========================== - // delete this from the canvaslist - int ix; - - for(ix=0; ix 0) - currentcanvas = canvaslist[0]; - else - currentcanvas = NULL; - } + // ?? change currentcanvas } @@ -174,6 +148,7 @@ void SpectDisplay::OnActivate(int active) { formantdlg->GetValues(spectseq, sframe); ReadDialogValues(); + currentcanvas = NULL; } } @@ -209,7 +184,7 @@ int GetNumeric(wxTextCtrl *t) void SpectDisplay::WriteDialogLength() {//=================================== wxString string; - + string.Printf(_T("%d mS"),int(spectseq->GetKeyedLength()+0.5)); formantdlg->t_orig_seq->SetLabel(string); } @@ -220,7 +195,7 @@ void SpectDisplay::WriteDialogValues() //{=============================== { wxString string; - + SetSpinCtrl(formantdlg->t_amplitude,spectseq->amplitude); string.Printf(_T("%d - %d Hz %d mS"), @@ -229,7 +204,7 @@ void SpectDisplay::WriteDialogValues() pitchgraph->SetData(128,spectseq->pitchenv.env); voicedlg->SetFromSpect(spectseq); - + WriteDialogLength(); } @@ -456,15 +431,13 @@ void SpectDisplay::SavePitchenv(PitchEnvelope &pitch) } // end of SpectDisplay::SavePitchenv -// WX_DECLARE_LIST(MyChild,ChildList); -// WX_DEFINE_LIST(ChildList); void SpectDisplay::PlayChild(int number, PitchEnvelope pitchenv) {//========================================================= +#ifdef deleted SpectSeq *seq; - if(number >= canvaslistix) return; if((seq = canvaslist[number]->spectseq) == NULL) @@ -472,6 +445,7 @@ void SpectDisplay::PlayChild(int number, PitchEnvelope pitchenv) ReadDialogValues(); seq->MakeWave(0,seq->numframes-1,pitchenv); +#endif } // end of PlayChild @@ -481,7 +455,7 @@ void SpectDisplay::SetKeyframe(SpectFrame *sf, int yes) sf->keyframe = yes; pitchgraph->Refresh(); - + WriteDialogLength(); } @@ -731,7 +705,7 @@ void SpectDisplay::OnKey(wxKeyEvent& event) spectseq->bass_reduction ^= 1; Refresh(); break; - + case 0x1043: // CTRL-C spectseq->ClipboardCopy(); break; @@ -923,6 +897,7 @@ void SpectDisplay::OnMouse(wxMouseEvent& event) int frame; int ix; + SetFocus(); if(event.RightDown()) { PopupMenu(menu_spectdisplay); @@ -935,7 +910,7 @@ void SpectDisplay::OnMouse(wxMouseEvent& event) wxPoint pt(event.GetLogicalPosition(dc)); if(spectseq->numframes==0) return; - + frame = (int)(pt.y/(FRAME_HEIGHT*zoomy)); if(!event.ControlDown()) @@ -1018,30 +993,16 @@ void MyFrame::OnNewWindow(wxCommandEvent& event) else path_spectload2 = path.GetPath(); - // Make another frame, containing a canvas + + GetClientSize(&width, &height); - MyChild *subframe = new MyChild(myframe, _T("Spectrum"), - wxPoint(10, 0), wxSize(500, height), - wxDEFAULT_FRAME_STYLE | - wxNO_FULL_REPAINT_ON_RESIZE); - - subframe->SetTitle(leaf); - - // Give it a status line - subframe->CreateStatusBar(); - - subframe->GetClientSize(&width, &height); - SpectDisplay *canvas = new SpectDisplay(subframe, wxPoint(0, 0), wxSize(width, height), spectseq); + SpectDisplay *canvas = new SpectDisplay(screenpages, wxDefaultPosition, wxSize(width, height), spectseq); + screenpages->AddPage(canvas, leaf, true); canvas->savepath = filename; - currentcanvas = canvas; - - // Associate the menu bar with the frame - subframe->SetMenuBar(MakeMenu(1,translator->dictionary_name)); - subframe->canvas = canvas; - subframe->Show(TRUE); - + currentcanvas = canvas; } + void InitSpectrumDisplay() {//======================= wxMenu *menu_markers = new wxMenu; diff --git a/src/synthdata.cpp b/src/synthdata.cpp index eb557105..e70a4e48 100644 --- a/src/synthdata.cpp +++ b/src/synthdata.cpp @@ -35,7 +35,7 @@ #include "translate.h" #include "wave.h" -const char *version_string = "1.46.24 11.Sep.12"; +const char *version_string = "1.46.26 17.Sep.12"; const int version_phdata = 0x014624; int option_device_number = -1; @@ -881,39 +881,57 @@ static void SwitchOnVowelType(PHONEME_LIST *plist, PHONEME_DATA *phdata, USHORT } // end of SwitchVowelType -static int NumInstnWords(USHORT *prog) -{//=================================== +int NumInstnWords(USHORT *prog) +{//============================ int instn; int instn2; int instn_type; int n; - static const char n_words[16] = {1,1,0,0,1,1,1,1,1,2,4,0,0,0,0,0}; + int type2; + static const char n_words[16] = {0,1,0,0,1,1,0,1,1,2,4,0,0,0,0,0}; instn = *prog; instn_type = instn >> 12; if((n = n_words[instn_type]) > 0) return(n); - if(instn_type < 4) + switch(instn_type) { + case 0: + if(((instn & 0xf00) >> 8) == i_IPA_NAME) + { + n = ((instn & 0xff) + 1) / 2; + return(n+1); + } + return(1);; + + case 6: + type2 = (instn & 0xf00) >> 9; + if((type2 == 5) || (type2 == 6)) + return(12); // switch on vowel type + return(1); + + case 2: + case 3: // a condition, check for a 2-word instruction if(((n = instn & 0x0f00) == 0x600) || (n == 0x0d00)) return(2); return(1); - } - // instn_type 11 to 15, 2 words - instn2 = prog[2]; - if((instn2 >> 12) == 0xf) - { - // This instruction is followed by addWav(), 2 more words - return(4); + default: + // instn_type 11 to 15, 2 words + instn2 = prog[2]; + if((instn2 >> 12) == 0xf) + { + // This instruction is followed by addWav(), 2 more words + return(4); + } + if(instn2 == i_CONTINUE) + { + return(3); + } + return(2); } - if(instn2 == i_CONTINUE) - { - return(3); - } - return(2); } // end of NumInstnWords @@ -929,6 +947,7 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ int instn2; int or_flag; bool truth; + bool truth2; int data; int end_flag; int ix; @@ -1044,14 +1063,20 @@ void InterpretPhoneme(Translator *tr, int control, PHONEME_LIST *plist, PHONEME_ while((instn & 0xe000) == 0x2000) { // process a sequence of conditions, using boolean accumulator - if(or_flag) - truth = (truth || InterpretCondition(tr, control, plist, prog, worddata)); - else - truth = (truth && InterpretCondition(tr, control, plist, prog, worddata)); - or_flag = instn & 0x1000; + truth2 = InterpretCondition(tr, control, plist, prog, worddata); prog += NumInstnWords(prog); + if(*prog == i_NOT) + { + truth2 = truth2 ^ 1; + prog++; + } + + if(or_flag) + truth = truth || truth2; + else + truth = truth && truth2; + or_flag = instn & 0x1000; instn = *prog; -// instn = *(++prog); } if(truth == false) diff --git a/src/synthesize.h b/src/synthesize.h index 10151e09..fb9c7e7a 100644 --- a/src/synthesize.h +++ b/src/synthesize.h @@ -273,6 +273,7 @@ typedef struct { #define i_RETURN 0x0001 #define i_CONTINUE 0x0002 +#define i_NOT 0x0003 // Group 0 instrcutions with 8 bit operand. These values go into bits 8-15 of the instruction #define i_CHANGE_PHONEME 0x01 @@ -570,6 +571,7 @@ int DoSpect2(PHONEME_TAB *this_ph, int which, FMT_PARAMS *fmt_params, PHONEME_L int PauseLength(int pause, int control); int LookupPhonemeTable(const char *name); unsigned char *GetEnvelope(int index); +int NumInstnWords(USHORT *prog); void InitBreath(void); diff --git a/src/tr_languages.cpp b/src/tr_languages.cpp index 7f0b9b69..dfd15b3b 100644 --- a/src/tr_languages.cpp +++ b/src/tr_languages.cpp @@ -957,6 +957,9 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = 8; // ?? 1st syllable if it is heavy, else 2nd syllable tr->langopts.param[LOPT_UNPRONOUNCABLE] = 1; // disable check for unpronouncable words tr->langopts.numbers = NUM_OMIT_1_HUNDRED; + tr->langopts.numbers2 = NUM2_MYRIADS; + tr->langopts.break_numbers = 0x1111110; + tr->langopts.max_digits = 20; } break; @@ -1113,7 +1116,7 @@ SetLengthMods(tr,3); // all equal tr->langopts.stress_rule = STRESSPOSN_1R; // stress on final syllable tr->langopts.stress_flags = 0x6 | 0x10 | 0x2000 | 0x20000; tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_DFRACTION_2 | NUM_HUNDRED_AND | NUM_AND_UNITS | NUM_ROMAN; - tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL; + tr->langopts.numbers2 = NUM2_MULTIPLE_ORDINAL | NUM2_NO_TEEN_ORDINALS; SetLetterVowel(tr,'y'); ResetLetterBits(tr,0x2); SetLetterBits(tr,1,"bcdfgjkmnpqstvxz"); // B hard consonants, excluding h,l,r,w,y diff --git a/src/translate.cpp b/src/translate.cpp index aa06eed1..fdc7e40c 100644 --- a/src/translate.cpp +++ b/src/translate.cpp @@ -3206,7 +3206,8 @@ if((c == '/') && (tr->langopts.testing & 2) && IsDigit09(next_in) && IsAlpha(pre break; *pn++ = c; - if((--nx > 0) && (tr->langopts.break_numbers & (1 << nx))) + nx--; + if((nx > 0) && (tr->langopts.break_numbers & (1 << nx))) { memcpy(&num_wtab[nw++], &words[ix], sizeof(WORD_TAB)); // copy the 'words' entry for each word of numbers diff --git a/src/translate.h b/src/translate.h index 9beb3e78..a8192956 100644 --- a/src/translate.h +++ b/src/translate.h @@ -445,7 +445,9 @@ typedef struct { int numbers; #define NUM2_MULTIPLE_ORDINAL 0x1000 -#define NUM2_ENGLISH_NUMERALS 0x2000 +#define NUM2_NO_TEEN_ORDINALS 0x2000 +#define NUM2_MYRIADS 0x4000 +#define NUM2_ENGLISH_NUMERALS 0x8000 #define NUM2_THOUSANDS_VAR1 0x40 #define NUM2_THOUSANDS_VAR2 0x80 #define NUM2_THOUSANDS_VAR3 0xc0 @@ -455,7 +457,9 @@ typedef struct { // bits 6-8 use different forms of thousand, million, etc (M MA MB) // bit9=(LANG=rw) say "thousand" and "million" before its number, not after // bit12=(LANG=el,es) use ordinal form of hundreds and tens as well as units - // bit13=(LANG=ne) speak (non-replaced) English numerals in English + // bit13=(LANG=pt) don't use 11-19 numbers to make ordinals + // bit14=(LANG=ko) use myriads (groups of 4 digits) not thousands (groups of 3) + // bit15=(LANG=ne) speak (non-replaced) English numerals in English int numbers2; #define BREAK_THOUSANDS 0x49249248 diff --git a/src/transldlg.cpp b/src/transldlg.cpp index fce227c1..c095a4e3 100644 --- a/src/transldlg.cpp +++ b/src/transldlg.cpp @@ -325,12 +325,12 @@ void TranslDlg::SpeakFile(void) wxFileName fname; FILE *f_text; char buf[200]; - + fname = wxFileName(path_speaktext); file = wxFileSelector(_T("Text file to speak"),fname.GetPath(),fname.GetName(),_T(""),_T("*"),wxOPEN); if(file == wxEmptyString) return; - + strcpy(buf,file.mb_str(wxConvLocal)); f_text = fopen(buf,"r"); if(f_text == NULL) @@ -338,9 +338,9 @@ void TranslDlg::SpeakFile(void) wxLogError(_T("Failed to read: ")+file); return; } - + path_speaktext = file; - + InitText(0); SpeakNextClause(f_text,NULL,0); return; @@ -465,11 +465,9 @@ void TranslDlg::OnCommand(wxCommandEvent& event) case T_PROCESS: case MENU_SPEAK_TEXT: - if(prosodycanvas == NULL) - { - myframe->OnProsody(event); - } + myframe->OnProsody(event); prosodycanvas->LayoutData(ph_list,n_ph_list); + myframe->Refresh(); option_phoneme_events = espeakINITIALIZE_PHONEME_EVENTS; option_log_frames = 1; MakeWave2(ph_list,n_ph_list); diff --git a/src/vowelchart.cpp b/src/vowelchart.cpp index 642bd66c..b555afb9 100644 --- a/src/vowelchart.cpp +++ b/src/vowelchart.cpp @@ -525,42 +525,17 @@ static void FindVowelFmt(int prog_start, int length) prog_end = prog_start + length; n_vowelfmt_addr = 0; - for(prog = &phoneme_index[prog_start]; prog < &phoneme_index[prog_end]; prog++) + for(prog = &phoneme_index[prog_start]; prog < &phoneme_index[prog_end]; prog += NumInstnWords(prog)) { instn = *prog; - switch(instn >> 12) + if((instn >> 12) == 11) { - case 2: - case 3: - // conditions - while((instn & 0xe000) == 0x2000) - { - instn = *(++prog); - } - prog--; - break; - - case 10: // Vowelin, Vowelout - prog += 3; - break; - - case 9: - case 12: // WAV - case 13: // VowelStart - case 14: // VowelEnd - case 15: // addWav - prog++; - break; - - case 11: // FMT + // FMT instruction if(n_vowelfmt_addr < N_VOWELFMT_ADDR) { vowelfmt_addr[n_vowelfmt_addr++] = ((instn & 0xf) << 18) + (prog[1] << 2); } - prog++; - - break; } } } // end of FindVowelFmt