Browse Source

added basic support for faroese

master
Andras Eliassen 1 year ago
parent
commit
2f7baf70e2
8 changed files with 905 additions and 0 deletions
  1. 4
    0
      Makefile.am
  2. 0
    0
      dictsource/fo_emoji
  3. 356
    0
      dictsource/fo_list
  4. 179
    0
      dictsource/fo_rules
  5. 2
    0
      espeak-ng-data/lang/gmq/fo
  6. 350
    0
      phsource/ph_faroese
  7. 3
    0
      phsource/phonemes
  8. 11
    0
      src/libespeak-ng/tr_languages.c

+ 4
- 0
Makefile.am View File

espeak-ng-data/eu_dict \ espeak-ng-data/eu_dict \
espeak-ng-data/fa_dict \ espeak-ng-data/fa_dict \
espeak-ng-data/fi_dict \ espeak-ng-data/fi_dict \
espeak-ng-data/fo_dict \
espeak-ng-data/fr_dict \ espeak-ng-data/fr_dict \
espeak-ng-data/ga_dict \ espeak-ng-data/ga_dict \
espeak-ng-data/gd_dict \ espeak-ng-data/gd_dict \
fi: espeak-ng-data/fi_dict fi: espeak-ng-data/fi_dict
espeak-ng-data/fi_dict: dictsource/fi_list dictsource/fi_rules dictsource/fi_extra dictsource/fi_emoji 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 fr: espeak-ng-data/fr_dict
espeak-ng-data/fr_dict: dictsource/fr_list dictsource/fr_rules dictsource/fr_extra dictsource/fr_emoji espeak-ng-data/fr_dict: dictsource/fr_list dictsource/fr_rules dictsource/fr_extra dictsource/fr_emoji



+ 0
- 0
dictsource/fo_emoji View File


+ 356
- 0
dictsource/fo_list View File


// Exceptions dictionary for: Faroese
// Faroese prepared by Andras Eliassen, iSolveIT ApS (VoisIT)
// This file in UTF8 encoded

// Letters
// If a letter has a "word" pronunciation which is different from its
// "letter" name, then include the letter name here, with the letter
// prefixed by a _ character.

// numeric
//********
_0 n'ul#
_1 'aIt
_2 tv'eI
_3 Tr#'ui
_4 f'u:*iRa
_1f 'eIhd
_2f tv'W:
_3f Tr#j'u:
_4f fj'W:Qyrr#
_5 f'Im
_6 s'E:gs
_7 sj'Ei:
_8 'aUhda
_9 nu@-dju
_10 tu@-dju
_11 'EdlEv,y
_12 t'@oUlv
_13 t'rEhtan
_14 fj'yr#tan
_15 f'Imtan
_16 s'ExsdaUn
_17 s'Yy:djaUn
_18 'ua:tjaUn
_19 n'ui:tjaUn
_21 aI:nut'jeu,vu
_2X t'jeu,vu
_3X Tred'i,vu
_31 aI:nuTred'i,vu
_4X fj'W:*Ryt,i;y
_41 aI:nufj'W:*Ryt,i;y
_5X h'aultruisj
_51 aI:nuh'aultruisj
_6X t'ruisj
_61 aI:nut'ruisj
_7X h@-lfjers
_71 aI:nuh@-lfjers
_8X f'uirs
_81 aI:nuf'uirs
_9X h'aulfems
_91 aI:nuh'aulfems
_0C h'undra
_1C h'undra
_2C tv'@i:||h'undra
_3C Trui:||h'undra
_4C fuirr#||h'undra
_8C 'aUt||h'undra
_0M1 T'eu:sin
_0M2 m'IljoUn
_1M2 eI:n||m'IljoUn
_2M2 tv'ae:rr#||m'IdljoUnir
_3M2 Tr#j'a:rr#||m'IdljoUnir
_4M2 f'ui:ra||m'IdljoUnir
_dpt _k,Omma_
_0and u-o

_cap sd'oUrr#d
_?? t'aUghn#

// Characters


// abbreviations


// Function words
hin $u+
hitt $u+ // this
hina $u+
hinir $u+
hinar $u+
hinum $u+
hini $u+
hinu $u+
hins $u+
hinnar $u+
hinna $u+

// articles


// pronouns
eg $u // nominative
tú $u
hann $u
hon $u
tað $u
vit $u
tit $u
teir $u
tær $u
tey $u

meg $u+
teg $u+
hana $u+
okkara $u+
tykkara $u+


hetta $u+
hesir $u+
hesar $u+
hesi $u+


tann $u+
tá $u+
teim $u+
teirri $u+
hví $u+
tess $u+
teirra $u+
teir $u+
tær $u+

hvør $u+ $pause // who



// possessive adjectives
mín $u+
mítt $u+
mína $u+
mínum $u+
mínar $u+
míni $u+
mínu $u+
míns $u+
mínir $u+

tín $u+
títt $u+
tína $u+
tínum $u+
tíni $u+
// etc

sín $u+
sítt $u+
sín $u+
sínum $u+
sína $u+
síni $u+

vár $u+
várt $u+
vára $u+
várar $u+
okkara $u+
tykkara $u+
// etc...


// prepositions
á $u+ $brk
at $u+ $brk // towards
av $u+ $brk // from,off of
eftir $u+ $pause // after,by
frá $u+ $brk // off
fyri $u+ $pause // for,by
í $u+ $brk
við $u+ $brk // with
til $u+ $brk // to
um $u+ $brk // about
við $u+ $brk // with,at,against

úr $u+ $brk // out of
uttan $u+ $pause // without
hjá $u+ $brk // by, with
millum $pause // between
mót $u+ $brk // against
móti $u+ $brk // against
afturat $brk // in addition to, besides
gjøgnum $brk // through
undir $u $brk // under
yvir $brk // over
framvið $brk // by, past
handan $brk // behind
áðrenn $pause // before
vegna $pause // because of
síðan $pause // since



// conjunctions
men $u+ $pause // but
ella $u+ $pause // or
hvørki $pause // nor
og $u+ $pause // and
tá $pause // when, as soon as
um $u+ $pause // if
men $pause // but, however
tó $pause // although
vegna $pause // because of
hvørt $pause // whether
hóast $pause // thus, so
meðan $pause // while, as long as
annars $pause // else, otherwise
so $pause // so (that)
sum $u+ $brk // as
hví $u+ $pause // the..the..


// negative
ikki $u+
nei $u+


// questions


// auxillary verbs (be, have, can, etc)
//****************

var $u // was
verða $u // to be
er $u // is, present
eru $u
kunnu $u
kann $u
hava $u
hevur $u
havi $u


var $u // was, past
varst $u
vóru $u
verið $u

eiga $u+ // to have (own)
eigi $u+

átti $u+ // to have (own) past
áttu $u+
átt $u+

hava $u // to have
havi $u
hevur $u

høvdu $u
hevði $u

verð $u // to become
verður $u
verði $u
verða $u
gjørdist $u
gjørdust $u
bleiv $u


varð $u // became, past
varðst $u
vóru $u
blivu $u

kann $u+ // can
kannst $u+
kunnu $u+

kundi $u+ // could, past
kundu $u+

vil $u+ // will
vilt $u+
vilja $u+
vildi $u+
vildu $u+


fá $u+ // get
fáa $u+
fær $u+
færst $u+
fái $u+

fekk $u+ // got, past
fekkst $u+
fingu $u+


// some common adjectives and adverbs
nøkur $u+ // any, some, a few
nakar $u+
nøkrum $u+
nakað $u+
nakars $u+
nakrir $u+
nakrar $u+

summir $u+ // some
summum $u+
summi $u+


// common adverbs etc.
fram $u+ // forward
aftur $u+ // backwards


// character names
//****************
_á ua:
á ua: $atend
b bE:
c sE:
d dE:
ð E:D
f Ef
g gE:
h ho'a:
i i:
_í ui:
í ui: $atend
j j'O:D
k k'@a:
l El
m Em
n En
p p'E:
q ku:
r Er:
s Es:
t tE:
ú e'u
v vE:
w tv'uivE:
x E:xs
_y 'yfsilOn||,I:
_ý 'yfsilOn||,i:
y 'yfsilOn||,I: $atend
ý 'yfsilOn||,i: $atend
z sE:ta
þ T'Ordn#


// MAIN WORD DICTIONARY
//*********************

bolla bOlla
halló halloU
mylla mIlla

+ 179
- 0
dictsource/fo_rules View File

// 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



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

name Faroese
language fo

+ 350
- 0
phsource/ph_faroese View File


//=========================================================
// Faroese
// Faroese prepared by Andras Eliassen, iSolveIT ApS (VoisIT)
//=========================================================

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 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 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 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 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 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 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

phonemetable fi base1 phonemetable fi base1
include ph_finnish include ph_finnish


phonemetable fo base1
include ph_faroese

phonemetable smj base1 phonemetable smj base1
include ph_lule_saami include ph_lule_saami



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

case L('e', 't'): // Estonian case L('e', 't'): // Estonian
tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4; tr->encoding = ESPEAKNG_ENCODING_ISO_8859_4;
// fallthrough: // fallthrough:
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', 'i'): // Finnish case L('f', 'i'): // Finnish
{ {
tr->langopts.long_stop = 130; tr->langopts.long_stop = 130;

Loading…
Cancel
Save