Browse Source

Merge branch 'master' into master

master
Filomena Rocca 11 months ago
parent
commit
11c7899511
No account linked to committer's email address

+ 1
- 0
ChangeLog.md View File

@@ -41,6 +41,7 @@ updated languages:
new languages:
* ti (Tigrinya) -- Biniam Gebremichael
* mto (Totontepec Mixe) -- Bill Dengler, Elizabeth Resendiz
* fo (Faroese) -- Andras Eliassen, iSolveIT ApS and Setur.fo/Ravnur
* kaa (Karakalpak) -- atabekm
* xex (Xextan) -- Filomena Rocca


+ 4
- 0
Makefile.am View File

@@ -471,6 +471,7 @@ dictionaries: \
espeak-ng-data/eu_dict \
espeak-ng-data/fa_dict \
espeak-ng-data/fi_dict \
espeak-ng-data/fo_dict \
espeak-ng-data/fr_dict \
espeak-ng-data/ga_dict \
espeak-ng-data/gd_dict \
@@ -657,6 +658,9 @@ espeak-ng-data/fa_dict: dictsource/fa_list dictsource/fa_rules dictsource/fa_ext
fi: espeak-ng-data/fi_dict
espeak-ng-data/fi_dict: dictsource/fi_list dictsource/fi_rules dictsource/fi_extra dictsource/fi_emoji

fo: espeak-ng-data/fo_dict
espeak-ng-data/fo_dict: dictsource/fo_list dictsource/fo_rules dictsource/fo_extra dictsource/fo_emoji

fr: espeak-ng-data/fr_dict
espeak-ng-data/fr_dict: dictsource/fr_list dictsource/fr_rules dictsource/fr_extra dictsource/fr_emoji


+ 0
- 0
dictsource/fo_emoji View File


+ 228272
- 0
dictsource/fo_list
File diff suppressed because it is too large
View File


+ 179
- 0
dictsource/fo_rules View File

@@ -0,0 +1,179 @@
// Faroese prepared by Andras Eliassen, iSolveIT ApS (VoisIT)
// This file is UTF8 encoded.

// letter group B voiceless consonants c,f,h,k,p,t,x,þ
// letter group F p,t,k,s
// letter group H j,r,v,

.L01 e i í y ý æ j // front vowels
.L02 c f h k p t x s // voiceless consonants
.L03 p t k

.replace
x xz // so that it behaves as 2 letters


.group a
a a


.group á
á %oa


.group b
b b
bb b

.group c
c k
c (e s
c (i s


.group d
d d
dd d


.group ð
ð v


.group e
e E:


.group é
é jE:


.group f
f f
ff f


.group g
g g
gg g
e) g
g (i dj


.group h
h h


.group i
i I:


.group í
í ui:


.group j
j j


.group k
_) k k
k k
k (i tj

.group l
l l

.group m
m m


.group n
n n
nn n:


.group o
o O:
o (CC o


.group ó
ó oU:


.group p
p p


.group q
q k


.group r
r r
o) rn dn
e) rn dn

.group s
s s
ss ss2


.group t
_) t t
t t
tt t

.group u
u u


.group ú
ú u:


.group v
v v


.group w
w v


.group x
x ks
xz ks

.group y
y y


.group ý
ý ui:


.group z
z z
zz ts // pizza


.group æ
æ @:


.group ö
ö W:


.group ø
ø W:


.group
$ dOllari



+ 4
- 0
espeak-ng-data/lang/gmq/fo View File

@@ -0,0 +1,4 @@
name Faroese
language fo
maintainer iSolveIT ApS (Andras Eliassen) <[email protected]>
status testing

+ 458
- 0
phsource/ph_faroese View File

@@ -0,0 +1,458 @@

//=========================================================
// Faroese
//=========================================================

phoneme : // Lengthen previous vowel by "length"
virtual
length 110
endphoneme


// Vowels
//=======

phoneme i
vwl starttype #i endtype #i
length 130
IfNextVowelAppend(;)
FMT(vowel/ii_6)
endphoneme

phoneme i:
vwl starttype #i endtype #i
length 230
IfNextVowelAppend(;)
ChangeIfNotStressed(i)
FMT(vowel/i_4)
endphoneme



phoneme I
vwl starttype #i endtype #i
length 130
IfNextVowelAppend(;)
FMT(vowel/ii)
endphoneme

phoneme I:
vwl starttype #i endtype #i
length 230
IfNextVowelAppend(;)
ChangeIfNotStressed(I)
FMT(vowel/ii)
endphoneme



phoneme E
vwl starttype #e endtype #e
length 130
FMT(vowel/e_mid)
endphoneme

phoneme E:
vwl starttype #e endtype #e
length 130
FMT(vowel/e_e)
endphoneme

phoneme A
vwl starttype #@ endtype #@
length 130
FMT(vowel/a#_2)
endphoneme

phoneme a
vwl starttype #a endtype #a
length 130
FMT(vowel/a#_2)
endphoneme

phoneme a:
vwl starttype #a endtype #a
length 230
ChangeIfNotStressed(a)
FMT(vowel/aa_8)
endphoneme



phoneme O
vwl starttype #o endtype #o
length 130
FMT(vowel/oo_5)
endphoneme

phoneme O:
vwl starttype #o endtype #o
length 230
ChangeIfNotStressed(O)
FMT(vdiph2/o_oo)
endphoneme


phoneme 2
vwl starttype #o endtype #e
length 130
FMT(vowel/oe)
endphoneme

phoneme 2:
vwl starttype #o endtype #e
length 230
ChangeIfNotStressed(2)
FMT(vowel/oe_4)
endphoneme

phoneme 3
vwl starttype #e endtype #u
length 130
FMT(vowel/e_6)
endphoneme

phoneme 3:
vwl starttype #e endtype #u
length 230
ChangeIfNotStressed(2)
FMT(vowel/e_6)
endphoneme

phoneme 4
vwl starttype d endtype d
length 130
WAV(x/d)
endphoneme

phoneme 4:
vwl starttype d endtype d
length 230
ChangeIfNotStressed(4)
WAV(x/d_)
endphoneme

phoneme 5
vwl starttype t endtype h
length 130
WAV(ustop/th_rfx)
endphoneme

phoneme 5:
vwl starttype t endtype h
length 230
ChangeIfNotStressed(5)
WAV(ustop/th_rfx2)
endphoneme

phoneme 8
vwl starttype #@ endtype #@
length 130
FMT(vowel/@)
endphoneme

phoneme 8:
vwl starttype #@ endtype #@
length 230
ChangeIfNotStressed(2)
FMT(vowel/@)
endphoneme

phoneme 9
vwl starttype #e endtype #a
length 130
FMT(vowel/@_2)
endphoneme

phoneme 9:
vwl starttype #e endtype #a
length 230
ChangeIfNotStressed(9)
FMT(vowel/@_4)
endphoneme


phoneme u
vwl starttype #u endtype #u
length 130
FMT(vowel/u_2)
endphoneme

phoneme u:
vwl starttype #u endtype #u
length 230
ChangeIfNotStressed(u)
FMT(vowel/u_bck)
endphoneme

phoneme U
vwl starttype #u endtype #u
length 110
FMT(vowel/u_2)
endphoneme


phoneme y
vwl starttype #@ endtype #@
length 130
FMT(vowel/y##)
endphoneme


phoneme y:
vwl starttype #i endtype #i
length 230
ChangeIfNotStressed(y)
FMT(vowel/yy_4)
endphoneme


phoneme W
vwl starttype #@ endtype #@
length 130
FMT(vowel/y#_3)
endphoneme

phoneme W:
vwl starttype #@ endtype #@
length 130
ChangeIfNotStressed(W)
FMT(vowel/y#_3)
endphoneme


phoneme aI
vwl starttype #a endtype #i
length 170
FMT(vdiph/ai_7)
endphoneme

phoneme aI:
vwl starttype #a endtype #i
length 230
ChangeIfNotStressed(aI)
FMT(vdiph/ai_7)
endphoneme


phoneme eI
vwl starttype #e endtype #i
length 170
FMT(vdiph/ei)
endphoneme

phoneme eI:
vwl starttype #e endtype #i
length 230
ChangeIfNotStressed(eI)
FMT(vdiph/ei)
endphoneme



phoneme aU
vwl starttype #a endtype #u
length 170
FMT(vdiph/aau)
endphoneme

phoneme aU:
vwl starttype #a endtype #u
length 230
ChangeIfNotStressed(aU)
FMT(vdiph/aau)
endphoneme


phoneme oU
vwl starttype #o endtype #u
length 170
FMT(vdiph/ou_3)
endphoneme

phoneme oU: // long version for óf
vwl starttype #o endtype #u
length 230
ChangeIfNotStressed(oU)
FMT(vdiph/ou_3)
endphoneme


phoneme Yy
vwl starttype #@ endtype #i
length 150
FMT(vdiph/y#i_2)
endphoneme

phoneme Y
vwl starttype #@ endtype #i
length 150
FMT(vdiph/y#i_2)
endphoneme

phoneme Yy:
vwl starttype #@ endtype #i
length 220
ChangeIfNotStressed(Yy)
FMT(vdiph/y#i_2)
endphoneme


phoneme OI
vwl starttype #o endtype #i
length 210
FMT(vdiph/oi)
endphoneme

phoneme yI
vwl starttype #i endtype #i
length 180
FMT(vowel/yy_4)
endphoneme



// Consonants
//===========

phoneme m#
vcd blb nas
lengthmod 6
ipa m#
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
FMT(m/m#_)
endphoneme

phoneme M
vcd blb nas
lengthmod 6
ipa m#
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
FMT(m/m#_)
endphoneme

phoneme n#
vcd alv nas
lengthmod 6
ipa n#
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk

NextVowelStarts
VowelStart(n/n@)
VowelStart(n/na)
VowelStart(n/ne)
VowelStart(n/ni)
VowelStart(n/no)
VowelStart(n/nu)
EndSwitch

FMT(n/n#_)
endphoneme


phoneme n^#
vcd pal nas pzd
lengthmod 6
ipa ɲ#
Vowelout f1=3 f2=2300 300 400 f3=100 80 brk rate
FMT(n^/n^#_)
endphoneme



phoneme N#
vcd vel nas
lengthmod 6
ipa ŋ#
Vowelout f1=3 f2=2300 300 400 f3=-200 80 len=40 rms=20 brk

NextVowelStarts
VowelStart(nn/nn@)
VowelStart(nn/nna)
VowelStart(nn/nne)
VowelStart(nn/nni)
VowelStart(nn/nno)
VowelStart(nn/nnu)
EndSwitch

FMT(nn/nn#_)
endphoneme

phoneme l#
vls alv frc
lengthmod 3
ipa l#
WAV(ufric/l#, 25)
endphoneme


phoneme tl#
vls alv stp
lengthmod 2
ipa tl#
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
WAV(ufric/tl#, 50)
endphoneme


phoneme r# // used for [r] when not preceding a vowel
liquid
lengthmod 2 //
ipa r#
FMT(r3/r#_) addWav(r3/rx)
// before n r3/r_n+r3/rx
endphoneme


phoneme b
vls blb stp
lengthmod 5
Vowelin f1=1 f2=1000 -300 -200 f3=-200 80 amp=11
Vowelout f1=2 f2=1000 -300 -300 f3=-300 80 brk
WAV(x/b)
endphoneme


phoneme d
vls alv stp
lengthmod 5
Vowelin f1=2 f2=1700 -300 300 f3=-100 80
Vowelout f1=2 f2=1700 -300 300 f3=-100 80
IF nextPh(isPause2) THEN
WAV(x/d_)
ENDIF
WAV(x/d, 80)
endphoneme


phoneme g
vls vel stp
lengthmod 5
Vowelin f1=2 f2=2300 200 300 f3=-300 80
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
IF nextPh(isPause2) THEN
WAV(x/g_)
ENDIF
WAV(x/g2, 150)
endphoneme


phoneme H
vls glt frc
ipa h
WAV(h/h_phr)
endphoneme


phoneme v // no fricative noise
import_phoneme base1/v#
voicingswitch f
endphoneme


phoneme s2 // 2nd part of geminated s
import_phoneme consonants/s2
endphoneme


+ 3
- 0
phsource/phonemes View File

@@ -1708,6 +1708,9 @@ include ph_farsi
phonemetable fi base1
include ph_finnish

phonemetable fo base1
include ph_faroese

phonemetable smj base1
include ph_lule_saami


+ 11
- 0
src/libespeak-ng/tr_languages.c View File

@@ -834,6 +834,17 @@ Translator *SelectTranslator(const char *name)
SetLetterVowel(tr, 'y');
}
break;
case L('f', 'o'): // Faroese
{
//static const short stress_lengths_da[8] = { 160, 140, 200, 200, 0, 0, 220, 230 };
//SetupTranslator(tr, stress_lengths_da, NULL);

//tr->langopts.stress_rule = STRESSPOSN_1L;
//tr->langopts.param[LOPT_PREFIXES] = 1;
//SetLetterVowel(tr, 'y');
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_SWAP_TENS | NUM_HUNDRED_AND | NUM_OMIT_1_HUNDRED | NUM_ORDINAL_DOT | NUM_1900 | NUM_ROMAN | NUM_ROMAN_CAPITALS | NUM_ROMAN_ORDINAL;
}
break;
case L('f', 'r'): // french
{
SetupTranslator(tr, stress_lengths_fr, stress_amps_fr);

+ 8
- 0
src/windows/installer/Product.wxs View File

@@ -144,6 +144,9 @@
<Component Id="fi_dict" Guid="A940BAEF-840D-4A76-AF8E-1971E88F9057">
<File Id="fi_dict" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\fi_dict" />
</Component>
<Component Id="fo_dict" Guid="68CBDAF4-8D0E-44CC-8523-3E0CF5343024">
<File Id="fo_dict" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\fo_dict" />
</Component>
<Component Id="fr_dict" Guid="437EC744-1AF9-49CF-8058-BEBDE579EF79">
<File Id="fr_dict" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\fr_dict" />
</Component>
@@ -532,6 +535,9 @@
<Component Id="da" Guid="F2056D5A-95BE-4141-9884-BDECCD20911F">
<File Id="da" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\lang\gmq\da" />
</Component>
<Component Id="fo" Guid="0786F902-D75C-4A41-956B-A6D2F25180A2">
<File Id="fo" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\lang\gmq\fo" />
</Component>
<Component Id="is" Guid="D77DC66C-17BA-425C-A1E4-18D9CAC03284">
<File Id="is" KeyPath="yes" Source="$(var.ProjectDir)\..\..\..\espeak-ng-data\lang\gmq\is" />
</Component>
@@ -1490,6 +1496,7 @@
<ComponentRef Id="eu_dict" />
<ComponentRef Id="fa_dict" />
<ComponentRef Id="fi_dict" />
<ComponentRef Id="fo_dict" />
<ComponentRef Id="fr_dict" />
<ComponentRef Id="ga_dict" />
<ComponentRef Id="gd_dict" />
@@ -1695,6 +1702,7 @@
<ComponentRef Id="uz" />
<ComponentRef Id="et" />
<ComponentRef Id="fi" />
<ComponentRef Id="fo" />
<ComponentRef Id="hu" />
<ComponentRef Id="smj" />
<ComponentRef Id="be" />

+ 1
- 0
tests/language-phonemes.test View File

@@ -53,6 +53,7 @@ test_phwav eu 804e3829faa40e6e48aa43ad5a372372808d66f6 "ma na n^a pa ta ca ka ba
test_phwav fa d2bdd62b68a21cea12d095b5032c7eb19759c133 "ma na Na pa ba ta da ka ga qa ?a fa va sa za Sa Za xa Qa ha tSa dZa Ra la ja _:_ mA mi mu ma me mo meI moU"
test_phwav fa-Latn d2bdd62b68a21cea12d095b5032c7eb19759c133 "ma na Na pa ba ta da ka ga qa ?a fa va sa za Sa Za xa Qa ha tSa dZa Ra la ja _:_ mA mi mu ma me mo meI moU"
test_phwav fi 38e641b031af4f2d39ee150ca3f26f4bc84d9aa0 "ma na Na pa ba ta da ka ga ?a fa sa Sa ha va la ja Ra R2a s2a _:_ mi mI me m& ma ma2 mo mY mu mu1 mU my mai m&i moi mei mYi mui myi mau mou meu miu m&y mey mYy miy muo mie myY"
test_phwav fo 13c22fcd8aa140bd22e3299fdcc75b5b2c2308ca "m#a ma n#a na n^#a n^a N#a Na pa ta ca ka fa va Ta Da sa Ca J^a xa Qa ha l#a la tl#a r#a ra _:_ mi mi: mI mI: mE mE: ma ma: mO mO: mu mu: my my: mW mW: maI maI: meI meI: maU maU: moU moU: mYy mOI myI"
test_phwav fr 4e312a224c8976da90a7faec8edabbc2fe311310 "ma na n^a Na pa ta ka ba da ga fa sa Sa va za Za la ja ra Ra wa r2a r/a r/2a l/a l/2a w/a n2a p2a t2a t3a z2a z3a _:_ m@ m@- ma ma- me me- mE mE- mi mj/ mo mO moU mu mu: my my- mW mY mA~ mE~ mO~ mW~ _:_ ma# mI mI2 mW2 mV"
test_phwav fr-BE 4e312a224c8976da90a7faec8edabbc2fe311310 "ma na n^a Na pa ta ka ba da ga fa sa Sa va za Za la ja ra Ra wa r2a r/a r/2a l/a l/2a w/a n2a p2a t2a t3a z2a z3a _:_ m@ m@- ma ma- me me- mE mE- mi mj/ mo mO moU mu mu: my my- mW mY mA~ mE~ mO~ mW~ _:_ ma# mI mI2 mW2 mV"
test_phwav fr-CH 4e312a224c8976da90a7faec8edabbc2fe311310 "ma na n^a Na pa ta ka ba da ga fa sa Sa va za Za la ja ra Ra wa r2a r/a r/2a l/a l/2a w/a n2a p2a t2a t3a z2a z3a _:_ m@ m@- ma ma- me me- mE mE- mi mj/ mo mO moU mu mu: my my- mW mY mA~ mE~ mO~ mW~ _:_ ma# mI mI2 mW2 mV"

Loading…
Cancel
Save