Commit Graph
377 Commits
Author SHA1 Message Date
Samuel Thibault f23265419d tests: Check value returned by espeak-ng
Otherwise we would miss errors produced on shutdown.
2022-03-28 00:55:41 +02:00
Valdis Vitolins 22005d5c86 Test before pull request #1126: MatchRule: Do not overflow the text 2022-03-25 22:49:33 +02:00
Valdis Vitolins 602fc3bed3 Merge pull request #1099 2022-03-16 22:05:49 +02:00
Valdis Vitolins c14636b3bd Add phoneme test 2022-03-16 22:03:06 +02:00
Samuel Thibault 7f1222c6ad Properly maintain margin in ph_list2
TranslateWord2 uses phonemes in ph_list2. Apart from the breakable loops, it
may statically require up to 7 phonemes. Then TranslateClause always
uses 2 phonemes. We thus have to keep these margins along the loops to
avoid any overflow.

Fixes #1073 #1095
2022-03-15 15:47:09 +01:00
Ulrich Müller 889092c9d6 tests: Add unit test for ieee80.c
Signed-off-by: Ulrich Müller <ulm@gentoo.org>
2022-02-10 17:53:19 +01:00
Valdis Vitolins f78bb1bec5 en: fix issue #1069: Ligature ſt is st, not ft 2022-01-25 20:23:31 +02:00
Valdis Vitolins 86bc55c5c4 Revert fixes for Russian from ineiev@gnu.org
This reverts commit 433d219eca.
2022-01-18 21:33:48 +02:00
Ineiev 2ecff9fd40 ru: add pronunciation for common acronym, сша 2022-01-18 20:09:12 +02:00
Ineiev aa663ad7f7 ru: improve definitions for l and l; 2022-01-18 20:09:12 +02:00
Ineiev 55fa5ea5d3 ru: use s. and z. instead of S and Z 2022-01-18 20:09:12 +02:00
Ineiev b5115298b4 ru: improve source for y 2022-01-18 20:09:12 +02:00
Ineiev e105e98747 ru: add palatalized velars 2022-01-18 20:09:12 +02:00
Ineiev d8f56d14a3 sr, ru: use t from Serbian in Russian 2022-01-18 20:09:11 +02:00
Ineiev 433d219eca ru: fix name of vcd pal nas pzd 2022-01-18 20:09:11 +02:00
Valdis Vitolins 1664cee135 Merge pull request #1046 2021-12-04 23:45:40 +02:00
Valdis Vitolins cded9518ab Fix test for Arabic 2021-12-04 23:43:47 +02:00
bespsm 7aacdef65d Add initial suport for Belarusian 2021-11-15 15:35:28 +02:00
Marco BARNIG be962b067b Add support for Luxembourgish 2021-11-11 22:05:09 +02:00
Valdis Vitolins 7211bb77ec Revert "ar: issue #1009: improve sound of Ain"
This reverts commit 02783150cd.
2021-09-16 13:26:46 +03:00
Valdis Vitolins 078ff000ad Revert "ar: issue #1009: change r to trilling R"
This reverts commit aa765c7680.
2021-09-16 13:26:31 +03:00
Valdis Vitolins 02783150cd ar: issue #1009: improve sound of Ain 2021-09-13 23:07:32 +03:00
Valdis Vitolins aa765c7680 ar: issue #1009: change r to trilling R 2021-09-13 22:31:28 +03:00
Valdis Vitolins 9425be8386 Allow several pipe delimited hash values for Klatt tests 2021-07-30 23:05:33 +03:00
Juho Hiltunen 01f094346d nb: fix regression for language options.
182aba4cc started calling Norwegian nb instead of no. The result is that
code in tr_languages.c was never run.
2021-07-23 18:32:33 +03:00
Juho Hiltunen 88cb55ee0f tests: add missing phoneme tests.
Added tests are copied from existing tests from the same language family
or English. The tested phonemes should be adapted for better test
coverage.
2021-07-23 16:57:36 +03:00
Juho Hiltunen ddde4b1060 tests: add a test to make sure each language has a phoneme test 2021-07-23 16:57:23 +03:00
Lucas Werkmeister 2dfc8ae66e Add Elvish ⟨k⟩ as equivalent of ⟨c⟩
According to Appendix E of The Lord of the Rings, ⟨k⟩ is used with the
same value as ⟨c⟩ in names from non-Elvish languages (both representing
/k/). However, in the Silmarillion, ⟨k⟩ is also used in some Elvish
names, such as Tulkas and Kementári, as well as in some words in the
Appendix (Elements in Quenya and Sindarin Names), e.g. kir- as an
element or root in Calacirya, Cirth, and other words. And in earlier
versions of the language (when Quenya was called Qenya and Sindarin
Gnomish), ⟨k⟩ also often occurs. Therefore, let’s support it as an
alternative spelling of ⟨c⟩.

Currently, eSpeak NG doesn’t seem to do the two-step replacement of
⟨kh⟩→⟨ch⟩→⟨x⟩, which means that ⟨kh⟩ is ultimately pronounced as /kh/
(or /kʰ/?) rather than [χ]; according to Appendix E, this is correct in
Dwarvish, while in Orkish and Adûnaic ⟨kh⟩ should be equivalent to ⟨ch⟩.
Since we’re not really aiming for pronouncing any of these languages,
either way is fine.
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 95d74edd86 Fix Elvish double plosives
Consonants written twice always represent long consonants, not actual
repetation. eSpeak NG’s default behavior when speaking a doubled
consonant phoneme seems to work well enough for non-plosive consonants,
but for plosives, we need to tell it that the two input characters
correspond to one long phoneme, not a repeated regular one.

All three doubled voiceless plosives – ⟨tt⟩, ⟨pp⟩, ⟨cc⟩ – are regularly
found in Quenya, according to the Ambar Eldaron Quenya Dictionary [1].
Their voiced counterparts – ⟨dd⟩, ⟨bb⟩, ⟨gg⟩ – apparently don’t occur,
nor are any doubled plosives to be found in the Omikhleia Sindarin
Dictionary [2], voiced or not. But let’s define all six pairs in both
languages anyways, since it doesn’t cost us much to do so, and it seems
fairly clear that this is how these double consonants should be
pronounced, if they ever occurred.

[1]: https://ambar-eldaron.com/telechargements/quenya-engl-A4.pdf
[2]: https://www.jrrvf.com/hisweloke/sindar/index.html
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 3ad8114e4a Fix Elvish ⟨o⟩, ⟨ó⟩, ⟨ê⟩ vowels
⟨o⟩ almost certainly represents [ɔ] – Appendix E of The Lord of the
Rings describes it as the sound in English “for”. This means we should
use a phoneme [[O]], not [[o]]; we should also create our own phoneme
for this, since the one we inherit from Latin sounds much more like [o]
to me.

In Quenya, long ⟨ó⟩ (and, presumably, ⟨ô⟩) is, according to Appendix E,
“tenser and ‘closer’”, which presumably means [o]. (Online sources seem
to agree.) The Latin [[o:]] phoneme works well enough for this.

In Sindarin, ⟨ó⟩ has “the same quality” as ⟨o⟩ according to Appendix E,
so emit it as [[O:]] for [ɔː]. This sounds sensible enough te me.

I’m undecided whether “Lothlórien” should be in sjn_list, to pronounce
it with [oː] instead of [ɔː]. It’s composed of Sindarin “loth” and
Quenya “Lórien”, so that could potentially justify a pronunciation with
a Quenya ⟨ó⟩. But then again, maybe it should be a standard Sindarin
⟨ó⟩. For now, I’ve opted to not add it; in the film The Fellowship of
the Ring, Aragorn (Viggo Mortensen) says “Lothlórien” after the
Fellowship leave Moria, and to me his ⟨ó⟩ sounds more like [ɔː] than
[oː], so if this is wrong, at least it’s no more wrong than the famous
movie adaptation :)
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 4ed36b07ec Fix Elvish ⟨e⟩, ⟨é⟩, ⟨ê⟩ vowels
⟨e⟩ almost certainly always represents [ɛ], not [e]. Appendix E of The
Lord of the Rings describes it as the sound in English “were”, and I’m
not aware of any English dialect that pronounces “were” with an [e].

In Quenya, long ⟨é⟩ (and, presumably, ⟨ê⟩) is, according to Appendix E,
“tenser and ‘closer’”, which I assume means [e]. Several online sources
agree with this as well.

In Sindarin, Appendix E is quite clear that ⟨é⟩ has “the same quality”
as ⟨e⟩, only differring from it in length: I assume this must mean that
⟨é⟩ is [ɛː] in Sindarin. The online information on this is confusing and
sometimes contradictory even within the same page; several sources claim
that Sindarin has an [eː], but I have not seen this claim substantiated
with a source from Tolkien, and I suspect it’s simply a confusion with
Quenya. It scarcely matters, anyway: Sindarin words with ⟨é⟩ or ⟨ê⟩ seem
to be pretty rare. (I’m aware of a single word with an ⟨é⟩ – the name
Eluréd, son of Dior – and the Omikhleia Sindarin dictionary [1] features
some words with ⟨ê⟩, giving their pronunciation with [ɛː].)

The [[EI]] phoneme for Sindarin ⟨ei⟩ is copied from the base2 phonemes.

[1]: https://www.jrrvf.com/hisweloke/sindar/index.html
2021-07-18 13:28:03 +02:00
Lucas Werkmeister cc4b50f3f4 Replace Elvish [[ui]]/[[uI]] diphthong
Previously, we used vdiph/ui_4 for [[ui]]; I think the main reason for
that was that I didn’t like how the most common ⟨ui⟩, vdiph/ui, seemed
to almost vanish in “Cuiviénen”. However, vdiph/ui_4 has the curious
property that in some positions, e.g. ⟨uia⟩ in “tuia” or ⟨uil⟩
“tuilindo”, it sounds (to me) more like /ul/ than /ui/. (This also
affects Finnish, which seems to be the only other language that uses
vdiph/ui_4 [a few other languages also use it for [[ui]] but don’t seem
to emit that phoneme in their rules files] – listen to eSpeak NG
pronounce Finnish ”luiun”, for instance.) I eventually found out that
this can be worked around by substantially lengthening the phoneme
(length 500 seems to work in all positions), but this extreme length
(the absolute maximum is just 511) becomes rather noticeable whenever
the ui is used, including in positions where it had sounded just fine
before. Meanwhile, the more standard vdiph/ui can be made to sound
reasonably well in “Cuiviénen” with a much smaller increment to its
length: 290 (as also in ph_lithuanian) instead of 240 (as in ph_base2)
is enough. In this version, [[uI]] sounds acceptable enough for Elvish
⟨ui⟩ in all positions, as far as I can tell.
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 9a1bb4ccf9 Add Quenya ⟨hy⟩
According to Appendix E of The Lord of the Rings, this has the same
relation to ⟨y⟩ ([j]) as ⟨hw⟩ ([ʍ]) does to ⟨w⟩ ([w]) – this probably
means the voiceless palatal fricative [ç], though Wikipedia says a
voicless palatal approximant (which would be closer to [j], the voiced
palatal approximant) is sometimes also posited.

We previously emitted [[hj]] for ⟨hy⟩, which sounds fairly close to [ç],
similar to how [[hw]] is fairly close to [ʍ] (see previous commit) –
however, translating it into [[C]] again means better --ipa output.

(In Sindarin, ⟨hy⟩ does not occur.)
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 2f77829172 Add Elvish ⟨hw⟩
This is “a voiceless w, as in English white (in northern pronunciation)”
according to Appendix E of The Lord of the Rings, and so we copy the
[[w#]] phoneme from the English phonemes. I can’t actually hear much of
a difference from the previous [[hw]] (I know what the difference
between [[w]] and [[w#]] should be, but [[hw]] already sounds like
[[w#]] to me), but at least this improves the --ipa output, changing it
from [hw] to [ʍ].
2021-07-18 13:28:03 +02:00
Lucas Werkmeister a39b6b7079 Add Quenya ⟨hr⟩ and Sindarin ⟨rh⟩
Both represent a “voiceless R”, which I believe means a voiceless
alveolar trill, [r̥]. Ideally this would be one phoneme, but I’m not sure
eSpeak NG currently has a phoneme for this. The Wikipedia article [1][2]
lists occurrences in comparatively few languages, and I chose Welsh for
guidance: eSpeak NG currently turns Welsh “Rhagfyr” into [[hr'agvYr]],
and [[h]] and [[r]] are apparently just two separate phonemes, so for
now we do the same for Quenya and Sindarin, and emit hR.

[1]: https://en.wikipedia.org/wiki/Voiceless_alveolar_trill
[2]: https://en.wikipedia.org/wiki/Special:PermanentLink/1024721264
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 2d47c32ba9 Add Quenya ⟨hl⟩ and Sindarin ⟨lh⟩
Both represent a “voiceless L”; Appendix E of The Lord of the Rings
notes that the Quenya ⟨hl⟩ was pronounced like /l/ by the Third Age, but
for now we reproduce the original pronunciation. (Maybe we can later use
conditional rules for different pronunciations, but I think for now I
won’t go down that road.)
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 438be8ed50 Change short Elvish ⟨i⟩ from [[i]] to [[I]]
The B-side of the album Poems and Songs of Middle Earth begins with a
reading of the Sindarin poem A Elbereth Gilthoniel by J.R.R. Tolkien
himself, and in this recording, as best I can tell, he always pronounces
short i (i.e. ⟨i⟩, not ⟨í⟩ or ⟨î⟩) as /ɪ/ rather than /i/, regardless of
stress; for instance, the word “silivren” has the same i-sound twice (it
is not “silívren”). I believe this means that we should use the phoneme
[[I]], not [[i]], for ⟨i⟩ (in both Quenya and Sindarin).
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 8f9c458493 Fix Quenya ⟨ch⟩ pronunciation
Appendix E of The Lord of the Rings describes it as “the sound heard in
bach (in German or Welsh)”; I think that means [χ], not [x] (voiceless
uvular rather than velar fricative), and out of the base1 phonemes,
[[X]] is closer to that than [[x]]. (The German phonemes redefine [[x]]
to be closer to [[X]], if I’m not mistaken, but I don’t think we need
that. Note also that we actually need [[x]] for Quenya ⟨ht⟩.)
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 1c4aafbbfa Add Quenya ⟨ht⟩ digraph
According to Appendix E of The Lord of the Rings, “[t]he Quenya
combination ht has the sound of cht, as in German echt, acht”. As echt
and acht do not have the same cht sound in German, I assume this means
that they are allophones in Quenya just as in German, and ⟨ht⟩ means
[çt] after front vowels but [xt] after back vowels. Add tests for both:
Telumehtar, the Quenya name of the star Orion, is given in Appendix E as
an example of ⟨ht⟩; Mahtar is the father of Nerdanel, wife of Fëanor.
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 74ec56a192 Add Sindarin “muta cum liquida” words to sjn_list
According to the regular stress rules from Appendix E of The Lord of the
Rings, all three of these words should be stressed on the penultimate
(second) syllable, since that syllable is followed by two consonants;
however, the way they are used in poems suggests they should actually be
stressed on the antepenultimate (first) syllable (example: “in IMlaDRIS
it DWELLS”). According to Concerning Stress Placement In Sindarin [1],
this can be attributed to a hypothetical “muta cum liquida” rule like in
Latin, where some syllables count as light even if they’re followed by
two consonants, because both consonants belong to the following syllable
(e.g. IM-la-dris instead of im-LAD-ris). However, the rule is apparently
not applied systematically: according to [2], in another poem the word
“nogothrim”, which is quite similar in structure to “Nargothrond”, is
clearly stressed on the penultimate syllable. For this reason, we don’t
try to define the “muta cum liquida” rule in sjn_rules (or qya_rules),
but only add the three names Imladris, Menegroth and Nargothrond as
exceptions to the sjn_list.

[1]: https://menegroth.github.io/stress-in-sindarin.html
[2]: https://mildred-of-midgard.dreamwidth.org/158375.html#comment-cmt49575
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 9ac1a5bffb Fix treatment of diphthongs for stress in Elvish
Stress is determined based on the syllables, not the vowels, so the
diphthongs need to count as a single syllable. If there is a diphthong
at the end of a word, the penultimate syllable can still be unstressed
if it is light. (The name of Arvedui, last king of Arthedain, is one
example of this that I could think of, but I’m sure it’s not the only
one.)
2021-07-18 13:28:03 +02:00
Lucas Werkmeister 4e6ebdbfb6 Velarize [n] to [ŋ] before velar stops in Elvish
I’m not aware of any statement by Tolkien to this effect, but it just
seems natural to me, and the [ŋ] is at least found in the Omikhleia
Sindarin dictionary [1] (e.g. entry tinc, [tˈiŋk]).

Based on a similar phoneme rule in ph_english.

[1]: https://www.jrrvf.com/hisweloke/sindar/index.html
2021-07-18 13:28:03 +02:00
Lucas Werkmeister ca2ca4c5cb Add Sindarin ⟨ae⟩, ⟨ai⟩, ⟨oe⟩, ⟨ui⟩ diphthongs
For ⟨ae⟩, we used to use the Latin [[aI]] phoneme, which sounds like
/ae/. Call that phoneme [[aE]] for us and introduce a separate [[aI]]
one, which sounds more like /ai/ (since Sindarin has both, and they’re
supposed to sound different, though Appendix E of The Lord of the Rings
notes that there is nothing closely corresponding to ⟨ae⟩ in English and
that it may be pronounced like ⟨ai⟩). Furthermore, for ⟨oe⟩, just remove
the TODO – the Latin phoneme is called [[OI]] but sounds more like /oe/
than /oi/, so it’s actually just fine for our purposes. Finally, the
⟨ui⟩ diphthong is copied from Finnish, just like in Quenya.
2021-07-18 13:28:02 +02:00
Lucas Werkmeister 0928b3a432 Add more Quenya test cases
I had left out test cases with ⟨qu⟩ and/or ⟨y⟩ earlier, but it looks
like there wasn’t actually any need to do that, they work just fine.
2021-07-18 13:27:26 +02:00
Lucas Werkmeister c6e6f60154 Make ph between vowels long in Elvish
According to Appendix E of The Lord of the Rings, ⟨ph⟩ stands for /f/
when final (because ⟨f⟩ is pronounced as /v/ in that position), and
otherwise is used instead of ⟨f⟩ either because it’s derived from ⟨p⟩
(in which case it’s presumably pronounced just like ⟨f⟩), or to
represent an especially long /f/. We can’t really tell which case we
have, but from the Omikhleia Sindarin dictionary [1], it appears that
all the long ⟨ph⟩’s are between two vowels, and all the short ones have
at least one adjacent consonant, so let’s use that as a rule and hope it
works out. (The Ambar Eldaron Quenya dictionary [2] is less easily
searchable, so I’m just hoping that this rule works reasonably well for
both languages.)

[1]: https://www.jrrvf.com/hisweloke/sindar/index.html
[2]: https://ambar-eldaron.com/telechargements/quenya-engl-A4.pdf
2021-07-18 13:27:26 +02:00
Lucas Werkmeister f25fda6cd8 Define some Elvish diphthongs
Not all of the diphthongs in Quenya and Sindarin are defined in the
Latin phonemes, and for now we’re sticking to those, so some diphthongs
just get TODOs for now. Also, we’re temporarily using the same phoneme
for ⟨ae⟩/⟨ai⟩ and ⟨oe⟩/⟨oi⟩, which should really be different (though
Appendix E of The Lord of the Rings notes that ⟨ae⟩ and ⟨oe⟩ don’t have
close English equivalents, and that they “may be pronounced as ai, oi”).
2021-07-18 13:27:26 +02:00
Lucas Werkmeister ee7e057821 Fix extra-long vowels in Elvish languages
A circumflex “specially prolonged” vowels; according to Appendix E of
The Lord of the Rings, only in Sindarin, but the Ambar Eldaron Quenya
Dictionary [1] also has some very few circumflex words (sû, lîs), so
let’s support the circumflex in Quenya as well. Marking extra-long
vowels with two colons seems to work well and is also done in several
other languages.

[1]: https://ambar-eldaron.com/telechargements/quenya-engl-A4.pdf
2021-07-18 13:27:26 +02:00
Lucas Werkmeister db971c8201 Fix long vowels in Elvish languages
Long vowels, marked with an acute accent or a circumflex, are longer
than short vowels (duh) and always make a heavy syllable (i.e. we don’t
include the rules to move stress to the previous syllable). In Quenya,
⟨é⟩ and ⟨ó⟩ are “tenser and ‘closer’” than the short vowels, according
to Appendix E of The Lord of the Rings, while in Sindarin they’re
supposed to be the same; the phonemes we inherit from Latin seem to
reproduce this reasonably well for Quenya, and for now we use them for
Sindarin too, which works nicely for the most common Sindarin word with
a long o, “Lothlórien” (because Lórien is actually a Quenya name, and
therefore I assume *that* ⟨ó⟩ should actually be /o/ and not /ɔ/). I
might adjust the phonemes later (at which point Lothlórien will
presumably have to go in sjn_list).
2021-07-18 13:27:26 +02:00
Lucas Werkmeister d201e17418 Fix stress of Elvish ⟨ch⟩, ⟨dh⟩, ⟨th⟩
In Elvish languages, ⟨ch⟩, ⟨dh⟩, and ⟨th⟩ count as single consonants for
the purposes of stress, since they represent single letters in the
original scripts. The easiest way to implement this is to replace them
with single letters at the beginning – ⟨ð⟩ for ⟨dh⟩ and ⟨þ⟩ for ⟨th⟩ are
natural, and ⟨x⟩ for ⟨ch⟩ also makes some sense, though it means we need
to replace real ⟨x⟩ first (it’s not mentioned in Appendix E of The Lord
of the Rings, but does occur in some Quenya words, notably Helcaraxë).
Real ⟨x⟩ is pronounced like /ks/, but of course we need to spell that as
⟨cs⟩, since ⟨k⟩ does not occur in Elvish languages.
2021-07-18 13:27:26 +02:00
Lucas Werkmeister 35defe2c77 Add first tests for Elvish languages
This consists of the test cases from my Tolkien Stress Analyser [1],
minus the ones that aren’t properly handled yet for various reasons. I
expect to add more words here with most future commits for Elvish
languages.

[1]: https://github.com/lucaswerkmeister/tolkien-stress/blob/gh-pages/test/index.test.mjs
2021-07-18 13:27:26 +02:00