diff --git a/Makefile.am b/Makefile.am index 825d0a1e..7bada1b8 100644 --- a/Makefile.am +++ b/Makefile.am @@ -412,6 +412,7 @@ phsource/phonemes.stamp: \ phsource/ph_punjabi \ phsource/ph_pyash \ phsource/ph_quechua \ + phsource/ph_quenya \ phsource/ph_romanian \ phsource/ph_russian \ phsource/ph_russian_lv \ @@ -419,6 +420,7 @@ phsource/phonemes.stamp: \ phsource/ph_serbian \ phsource/ph_setswana \ phsource/ph_shan \ + phsource/ph_sindarin \ phsource/ph_sindhi \ phsource/ph_sinhala \ phsource/ph_slovak \ @@ -589,11 +591,13 @@ dictionaries: \ espeak-ng-data/qdb_dict \ espeak-ng-data/qu_dict \ espeak-ng-data/quc_dict \ + espeak-ng-data/qya_dict \ espeak-ng-data/ro_dict \ espeak-ng-data/ru_dict \ espeak-ng-data/sd_dict \ espeak-ng-data/shn_dict \ espeak-ng-data/si_dict \ + espeak-ng-data/sjn_dict \ espeak-ng-data/sk_dict \ espeak-ng-data/sl_dict \ espeak-ng-data/smj_dict \ @@ -861,6 +865,9 @@ espeak-ng-data/qu_dict: dictsource/qu_list dictsource/qu_rules dictsource/qu_ext quc: espeak-ng-data/quc_dict espeak-ng-data/quc_dict: dictsource/quc_list dictsource/quc_rules dictsource/quc_extra dictsource/quc_emoji +qya: espeak-ng-data/qya_dict +espeak-ng-data/qya_dict: dictsource/qya_list dictsource/qya_rules + ro: espeak-ng-data/ro_dict espeak-ng-data/ro_dict: dictsource/ro_list dictsource/ro_rules dictsource/ro_extra dictsource/ro_emoji @@ -882,6 +889,9 @@ espeak-ng-data/shn_dict: dictsource/shn_list dictsource/shn_rules dictsource/shn si: espeak-ng-data/si_dict espeak-ng-data/si_dict: dictsource/si_list dictsource/si_rules dictsource/si_extra dictsource/si_emoji +sjn: espeak-ng-data/sjn_dict +espeak-ng-data/sjn_dict: dictsource/sjn_list dictsource/sjn_rules + sk: espeak-ng-data/sk_dict espeak-ng-data/sk_dict: dictsource/sk_list dictsource/sk_rules dictsource/sk_extra dictsource/sk_emoji diff --git a/dictsource/qya_list b/dictsource/qya_list new file mode 100644 index 00000000..ed20a8b3 --- /dev/null +++ b/dictsource/qya_list @@ -0,0 +1,31 @@ +// words with a single light syllable which should not be stressed + +// conjunctions: +a $u +an $u +ar $u +hya $u +i $u +mal $u +nan $u +o $u +qui $u +ta $u +var $u +// prepositions: +et $u +han $u +ho $u +lo $u +mi $u +mil $u +no $u +nu $u +or $u +pa $u +po $u +tar $u +ter $u +va $u +ve $u +yo $u diff --git a/dictsource/qya_rules b/dictsource/qya_rules new file mode 100644 index 00000000..2ac2bbec --- /dev/null +++ b/dictsource/qya_rules @@ -0,0 +1,180 @@ +// syllable nuclei: vowels (any length) and diphthongs +.L01 i e a o u í é á ó ú î ê â ô û ui oi ai iu eu au +// front vowels (finally): after these, ht is [çt] +.L02 i e í é î ê ui oi ai +// back vowels (finally): after these, ht is [xt] +.L03 a o u á ó ú â ô û iu eu au + +.replace + // turn x into cs, both because that’s how it’s pronounced + // and to free up x as a single letter for ch (see immediately below) + x cs + // turn ch, dh, th into single consonants for stress purposes + ch x + dh ð + th þ + // turn k into c: both letters are equivalent in Tolkien’s languages, + // with c usually reserved for Eldarin languages and k for others + k c + +.group a + a a + ai (+ aI + au (+ aU + // light penultimate syllable: put stress on antepenultimate + a (L01X =a + a (CL01X =a + +.group á + á a: + +.group â + â a:: + +.group b + b b + bb b: + +.group c + c k + cc k: + // recall that ch was replaced with x earlier + +.group x + x X + +.group d + d d + db d: + // recall that dh was replaced with ð earlier + +.group ð + ð D + +.group e + e E + eu (+ EU + // light penultimate syllable: put stress on antepenultimate + e (L01X =E + e (CL01X =E + +.group é + é e: + +.group ê + ê e:: + +.group f + f f + f (_ v + +.group g + g g + gg g: + +.group h + h h + L02) ht Ct + L03) ht xt + hl l# + hr hR + hw w# + hy C + +.group i + i I + iu (+ iu + // light penultimate syllable: put stress on antepenultimate + i (L01X =I + i (CL01X =I + +.group í + í i: + +.group î + î i:: + +// j does not occur in Quenya + +// recall that k was replaced with c earlier + +.group l + l l + +.group m + m m + +.group n + n n + +.group ng + ng Ng + ng (_ N + +.group o + o O + oi (+ OI + // light penultimate syllable: put stress on antepenultimate + o (L01X =O + o (CL01X =O + +.group ó + ó o: + +.group ô + ô o:: + +.group p + p p + pp p: + +.group ph + ph f + A) ph (A f: + +.group q + q kw // (immature) Qenya + qu kw + +.group r + r R + +.group s + s s + +.group t + t t + tt t: + // recall that th was replaced with þ earlier + +.group þ + þ T + +.group ty + ty tj + +.group u + u u + ui (+ uI + // light penultimate syllable: put stress on antepenultimate + u (L01X =u + u (CL01X =u + +.group ú + ú u: + +.group û + û u:: + +.group v + v v + +.group w + w w + +// recall that x was replaced with cs earlier + +.group y + y j + +// z does not occur in Quenya diff --git a/dictsource/sjn_list b/dictsource/sjn_list new file mode 100644 index 00000000..01b2cbf7 --- /dev/null +++ b/dictsource/sjn_list @@ -0,0 +1,32 @@ +// potential “muta cum liquida” rule: +// the use of these words in poems suggests that they are stressed on the antepenultimate syllable, +// rather than the penultimate one, even though the penultimate syllable is heavy; +// see for details + +imladris $1 // Seek for the Sword that was broken, line 2 +menegroþ $1 // Lay of Leithian Recommenced, line 65 +nargoþrond $1 // The world was young, the mountains green, line 13 + +// words with a single light syllable which should not be stressed + +// conjunctions: +// a – exception: also an interjection, should still be stressed then +ach $u +ah $u +ir $u +sui $u +// prepositions: +am $u +an $u +ben $u +bo $u +dan $u +na $u +ned $u +nef $u +nu $u +o $u +or $u +os $u +pen $u +vi $u diff --git a/dictsource/sjn_rules b/dictsource/sjn_rules new file mode 100644 index 00000000..662b8c5c --- /dev/null +++ b/dictsource/sjn_rules @@ -0,0 +1,183 @@ +// syllable nuclei: vowels (any length) and diphthongs +.L01 i e a o u y í é á ó ú ý î ê â ô û ŷ ae ai ei oe ui au + +.replace + // turn x into cs, both because that’s how it’s pronounced + // (strictly speaking only in some Quenya, but let’s do it here too) + // and to free up x as a single letter for ch (see immediately below) + x cs + // turn ch, dh, th into single consonants for stress purposes + ch x + dh ð + th þ + // turn k into c: both letters are equivalent in Tolkien’s languages, + // with c usually reserved for Eldarin languages and k for others + k c + +.group a + a a + ae (+ aE + ai (+ aI + au (+ aU + // light penultimate syllable: put stress on antepenultimate + a (L01X =a + a (CL01X =a + +.group á + á a: + +.group â + â a:: + +.group b + b b + bb b: + +.group c + c k + cc c: + // recall that ch was replaced with x earlier + +.group x + x X + +.group d + d d + dd d: + // recall that dh was replaced with ð earlier + +.group ð + ð D + +.group e + e E + ei (+ EI + // light penultimate syllable: put stress on antepenultimate + e (L01X =E + e (CL01X =E + +.group é + é E: + +.group ê + ê E:: + +.group f + f f + f (_ v + +.group g + g g + gg g: + +.group h + h h + hw w# + +.group i + i I + _) i (A+ j + // light penultimate syllable: put stress on antepenultimate + i (L01X =I + i (CL01X =I + +.group í + í i: + +.group î + î i:: + +// j does not occur in Sindarin + +// recall that k was replaced with c earlier + +.group l + l l + lh l# + +.group m + m m + +.group n + n n + +.group ng + ng Ng + ng (_ N + +.group o + o O + oe (+ OI + // light penultimate syllable: put stress on antepenultimate + o (L01X =O + o (CL01X =O + +.group ó + ó O: + +.group ô + ô O:: + +.group p + p p + pp p: + +.group ph + ph f + A) ph (A f: + +.group q + q _^_qya // q does not occur in Sindarin + +.group r + r R + rh hR + +.group s + s s + +.group t + t t + tt t: + // recall that th was replaced with þ earlier + +.group þ + þ T + +.group ty + ty tj + +.group u + u u + ui (+ uI + // light penultimate syllable: put stress on antepenultimate + u (L01X =u + u (CL01X =u + +.group û + û u:: + +.group ú + ú u: + +.group v + v v + +.group w + w w + +// recall that x was replaced with cs earlier + +.group y + y y + // light penultimate syllable: put stress on antepenultimate + y (L01X =y + y (CL01X =y + +.group ý + ý y: + +.group ŷ + ŷ y:: + +// z does not occur in Sindarin diff --git a/espeak-ng-data/lang/art/qya b/espeak-ng-data/lang/art/qya new file mode 100644 index 00000000..2b515813 --- /dev/null +++ b/espeak-ng-data/lang/art/qya @@ -0,0 +1,4 @@ +name Quenya +language qya +stressRule 2 +// rule=penultimate, with qya_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable diff --git a/espeak-ng-data/lang/art/sjn b/espeak-ng-data/lang/art/sjn new file mode 100644 index 00000000..f927bc93 --- /dev/null +++ b/espeak-ng-data/lang/art/sjn @@ -0,0 +1,4 @@ +name Sindarin +language sjn +stressRule 2 +// rule=penultimate, with sjn_rules for light penultimate syllables to move primary stress to the preceding (antepenultimate) syllable diff --git a/phsource/ph_quenya b/phsource/ph_quenya new file mode 100644 index 00000000..6a2c7374 --- /dev/null +++ b/phsource/ph_quenya @@ -0,0 +1,51 @@ +phoneme n + IF nextPhW(isVelar) THEN // /n/ is velarized to /N/ when before velar stops + ChangePhoneme(N) + ENDIF + CALL base1/n +endphoneme + +phoneme O + vwl starttype #o endtype #o + length 200 + FMT(vowel/oo) +endphoneme + +phoneme w# + vls glt apr // [h] + ipa ʍ + + IF nextPh(isVowel) THEN + NextVowelStarts + VowelStart(w/w@) + VowelStart(w/wa) + VowelStart(w/we) + VowelStart(w/wi) + VowelStart(w/wo) + VowelStart(w/wu) + EndSwitch + ENDIF + + WAV(h/hu, 70) +endphoneme + + +phoneme aI + vwl starttype #a endtype #i + length 240 + FMT(vdiph/ai) +endphoneme + +phoneme uI + vwl starttype #u endtype #i + length 290 + lng + FMT(vdiph/ui) +endphoneme + +phoneme iu + vwl starttype #i endtype #u + length 280 + lng + FMT(vdiph2/iu_2) +endphoneme diff --git a/phsource/ph_sindarin b/phsource/ph_sindarin new file mode 100644 index 00000000..2fa0c527 --- /dev/null +++ b/phsource/ph_sindarin @@ -0,0 +1,56 @@ +phoneme n + IF nextPhW(isVelar) THEN // /n/ is velarized to /N/ when before velar stops + ChangePhoneme(N) + ENDIF + CALL base1/n +endphoneme + +phoneme O + vwl starttype #o endtype #o + length 200 + FMT(vowel/oo) +endphoneme + +phoneme w# + vls glt apr // [h] + ipa ʍ + + IF nextPh(isVowel) THEN + NextVowelStarts + VowelStart(w/w@) + VowelStart(w/wa) + VowelStart(w/we) + VowelStart(w/wi) + VowelStart(w/wo) + VowelStart(w/wu) + EndSwitch + ENDIF + + WAV(h/hu, 70) +endphoneme + + +phoneme aE + vwl starttype #a endtype #e + length 270 + FMT(vdiph/ae) +endphoneme + +phoneme aI + vwl starttype #a endtype #i + length 240 + FMT(vdiph/ai) +endphoneme + +phoneme EI + vwl starttype #e endtype #i + length 230 + FMT(vdiph/eei) +endphoneme + +phoneme uI + vwl starttype #u endtype #i + length 290 + lng + FMT(vdiph/ui) +endphoneme diff --git a/phsource/phonemes b/phsource/phonemes index 377f39b7..26e0dd18 100644 --- a/phsource/phonemes +++ b/phsource/phonemes @@ -1920,6 +1920,12 @@ include ph_lojban phonemetable py eo include ph_pyash +phonemetable qya la +include ph_quenya + +phonemetable sjn la +include ph_sindarin + phonemetable es-la es include ph_spanish_la diff --git a/tests/language-pronunciation.test b/tests/language-pronunciation.test index 5309a3ef..daf3f0e8 100755 --- a/tests/language-pronunciation.test +++ b/tests/language-pronunciation.test @@ -186,6 +186,7 @@ S'a 'OksidU p'or- z'&~Ng&U~_:_: ,E*&U~ p,&l'avR&Z dU p,u*@-tug'es#" "Luís argüia à Júlia que «brações, fé, chá, óxido, pôr, zângão» eram palavras do português." "Latn" +test_phon qya ",aInul'Indal,E ald'INga aNk'alIm,a and'u:RIl at'akwE k,alak'IRja k,uIvI;'e:nEn ,EaR'EndIl El'EndIl ,ElEnt'a:RI; El'EssaR 'ENkwI;,E E'OnwE ER'EssE,a h,ElkaR'aksE w#'Esta C'aRmEn Is'IlduR l'ap:a m'axtan nam'a:RI;,E n'at:IR,a n,u:mEn'o:RE 'OROm,E Ot'OkwE pEl'Ek:O pEl'o:RI s'aUROn tan'IkwEt,Il t,Elum'ECtaR t'ulkas tuR'ambaR und'o:mI;,El ut'umnO" "Ainulindalë aldinga ancalima Andúril ataquë Calacirya Cuiviénen Eärendil Elendil Elentári Elessar enquië Eönwe Eressëa Helcaraxë hwesta Hyarmen Isildur lappa Mahtan Namárië nattira Númenórë Orome otoquë pelecco Pelóri Sauron Taniquetil Telumehtar Tulkas Turambar Undómiel Utumno" "Quenya" test_phon ro "m,uzikol'og@_! yn b'eZ v'ynd wh'iski Si tekw'ila p@-*'ets f'iks" "Muzicologă în bej vând whisky și tequila, preț fix." "Latn" test_phon ru "Syr'okVja E#l;ikt@-r;if;ik'Atsyja 'juZnyx gub;'ern;ij d'Ast m'oS;nyj tVltS;'ok pVdj'8mu s;'elskVvV xVz;'Ajstva#" "Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства." "Cyrl" @@ -193,6 +194,7 @@ test_phon sd "s'Indhi b'o:li; 'Ind.o: jo:R'Vpi xa:nd'a:n s'a~: t[a:l'Vq R,@k#@nd J'Vnhn t['e: ,aRb'i: bo:l'i:;a J'o: b'I t[@m'a:m v'Vd.o: as'VR ,a:he: h'Ina v'aqt s'Indhi b'o:li s'Indh J'e: m'Vk# b'o:li_! 'ae~ d,@f@t['VRi z@b'a:n ,a:he:" "سنڌي ٻولي انڊو يورپي خاندان سان تعلق رکندڙ آريائي ٻولي آھي، جنھن تي عربي ٻوليءَ جو بہ تمام وڏو اثر آهي. هن وقت سنڌي ٻولي سنڌ جي مک ٻولي ۽ دفتري زبان آھي." "Arab" test_phon si "t'aw@t st#'a:n@ k'i:p@j,@kin w'a:rta: w'u: s'ul.u p'ipiri:m s'ah@ d'e:s@p,a:l@n@ p'akS@ k r'ija:k,a:ri:n 'at@r@ '&tiwu: g'&t.um h'e:tuwen 'ek 'ajeku m'ij@gos k'i:p@ d'eneku t'uwa:l@ l'aba: t'ibe:" "තවත් ස්ථාන කීපයකින් වාර්තා වූ සුළු පිපිරීම් සහ දේශපාලන පක්ෂ ක්‍රියාකාරීන් අතර ඇතිවූ ගැටුම් හේතුවෙන් එක් අයෙකු මියගොස් කීප දෙනෙකු තුවාල ලබා තිබේ." "Sinh" +test_phon sjn "'alf 'aman 'amaRT 'amOn 'aRag,ORn aRn'OIdI;,ad 'aRvEd,uI bEl'ERI;,and b'OROm,IR bRag'OllaX bR'ETIl bRIT'OmbaR bR'uInEn k'aIR kaR'aDRas k,ElEbR'i:an kRIss'aEgRIm d'EnET,OR dR'ENgIst d'u::n EkT'ElI;,On 'Emyn ER'I;ad,OR f'Ean,OR fInd'uIlas f'INgOn fINg'OlfIn fIn'aRfIn f'OROX,El g'alaD,On gal'adRI;,El gR'Ond gw'aIhIR w#'and j'aRwaIn 'ImladR,Is j'ORET IT'IlI;,En l#'u::n lOTl'O:RI;,En m'EnEgR,OT mIT'EITEl mITR'andIR mOR'annOn m'ORI;,a n'aRgOTR,Ond OR'OffIn Osg'IlI;,aT pal'anti:R p,alant'i:RI pEl'EnnOR p,ERI;'annaT hR'u::n sIl'IvREn TOR'OndOR" "alph Aman Amarth Amon Aragorn Arnoediad Arvedui Beleriand Boromir Bragollach Brethil Brithombar Bruinen Cair Caradhras Celebrían Crissaegrim Denethor Drengist dûn Ecthelion Emyn Eriador Fëanor Finduilas Fingon Fingolfin Finarfin Forochel Galadhon Galadriel Grond Gwaihir hwand Iarwain Imladris Ioreth Ithilien lhûn Lothlórien Menegroth Mitheithel Mithrandir Morannon Moria Nargothrond Orophin Osgiliath Palantír Palantíri Pelennor Periannath rhûn Silivren Thorondor" "Sindarin" test_phon sk "k'r:d;el^ St;'astni:Q d;'atl^ow 'utSi: pR'i;u:st;i: v'a:hu m'l:kveho k'on^a 'ophRi:zat; k'uoRu_:_: a ZR'at; tS'eRstve: m'eso p'et;ti:Zdn^,ove: v'l:tSata: n'eRvo:zn^e St;'ekaju: n'amu,ojho d;'atl^a_! v_ t'r:n^i:" "Kŕdeľ šťastných ďatľov učí pri ústí Váhu mĺkveho koňa obhrýzať kôru a žrať čerstvé mäso. Päťtýždňové vĺčatá nervózne štekajú na môjho ďatľa v tŕní." "Latn" test_phon sl "xiSn'i:tSin bR'a:tEts uzg'a:ja p'o:wZE p'o:t fik'u:sOm" "Hišničin bratec vzgaja polže pod fikusom." "Latn"