haw: fix issue #578: add initial support for Hawaiian language

This commit is contained in:
Valdis Vitolins
2020-04-13 19:23:04 +03:00
parent 7e69e33588
commit 0ee91aaa06
8 changed files with 468 additions and 0 deletions
+1
View File
@@ -20,6 +20,7 @@ updated languages:
* zh (Chinese) -- Silas S. Brown
new languages:
* haw (Hawaiian) -- Valdis Vitolins
* uk (Ukrainian) -- Valdis Vitolins
* qu (Quechua) -- Valdis Vitolins
+4
View File
@@ -489,6 +489,7 @@ dictionaries: \
espeak-ng-data/grc_dict \
espeak-ng-data/gu_dict \
espeak-ng-data/hak_dict \
espeak-ng-data/haw_dict \
espeak-ng-data/hi_dict \
espeak-ng-data/hr_dict \
espeak-ng-data/ht_dict \
@@ -633,6 +634,9 @@ espeak-ng-data/fr_dict: dictsource/fr_list dictsource/fr_rules dictsource/fr_ext
hak: espeak-ng-data/hak_dict
espeak-ng-data/hak_dict: dictsource/hak_list dictsource/hak_rules dictsource/hak_extra
haw: espeak-ng-data/haw_dict
espeak-ng-data/haw_dict: dictsource/haw_list dictsource/haw_rules dictsource/haw_extra
ht: espeak-ng-data/ht_dict
espeak-ng-data/ht_dict: dictsource/ht_list dictsource/ht_rules dictsource/ht_extra
+105
View File
@@ -0,0 +1,105 @@
// Names of letters
a a
e e
i i
o o
u u
'a: a::
ē e::
ī i::
ō o::
'u: u::
ai ai
ae ae
ao ao
au au
ei ei
eu eu
iu iu
oi oi
ou ou
ui ui
h he:
k ke:
l la:
m mu:
n nu:
p pi:
w ve:
‘ ?okina
// Numbers
_0 ?ole
_1 ?ekahi
_2 ?elua
_3 ?ekolu
_4 ?eh'a:
_5 ?elima
_6 ?eono
_7 ?ehiku
_8 ?ewalu
_9 ?eiwa
_10 ?umi
_11 ?umik'u:m'a:kahi
_12 ?umik'u:m'a:lua
_13 ?umik'u:m'a:kolu
_14 ?umik'u:m'a:h'a:
_15 ?umik'u:m'a:lima
_16 ?umik'u:m'a:ono
_17 ?umik'u:m'a:hiku
_18 ?umik'u:m'a:walu
_19 ?umik'u:m'a:iwa
_20 iwak'a:lua
_21 iwak'a:luak'u:m'a:kahi
_22 iwak'a:luak'u:m'a:lua
_23 iwak'a:luak'u:m'a:kolu
_24 iwak'a:luak'u:m'a:h'a:
_25 iwak'a:luak'u:m'a:lima
_26 iwak'a:luak'u:m'a:ono
_27 iwak'a:luak'u:m'a:hiku
_28 iwak'a:luak'u:m'a:walu
_29 iwak'a:luak'u:m'a:iwa
_30 kanakolu
_40 kanah'a:
_50 kanalima
_60 kanaono
_70 kanahiku
_80 kanawalu
_90 kanaiwa
_0C ho?okahi
_0M1 kaukani
_0M2 miliona
_0M3 piliona
// Unstressed words
a'ela $u
a'e $u
akula $u
aku $u
'ana $u
a'o $u
au $u
ho'i $u
'ia $u
ia $u
iā $u
ihola $u
iho $u
ilelo $u
kākou $u
lākou $u
lā $u
maila $u
mai $u
mau $u
nō $u
'oe $u
'o $u
'oukou $u
paha $u
po'e $u
pono $u
pū $u
ua $u
wale $u
wau $u
+115
View File
@@ -0,0 +1,115 @@
.replace
â ā
ê ē
î ī
ô ō
û ū
` '
‘ '
’ '
ʻ '
.L20 a o u
.L40 i e
.group a
a a
.group e
e e
.group i
i i
.group o
o o
.group u
u u
.group ā
ā 'a:
.group ē
ē 'e:
.group ī
ī 'i:
.group ō
ō 'o:
.group ū
ū 'u:
.group ai
ai ai
.group ae
ae ae
.group ao
ao ao
.group au
au au
.group ei
ei ei
.group eu
eu eu
.group iu
iu iu
.group oi
oi oi
.group ou
ou ou
.group ui
ui ui
.group h
h h
.group k
k k
.group l
l l
.group m
m m
.group n
n n
.group p
p p
.group v
v v
.group w
w (L20 w
w (L40 v
.group '
' _! // short non-breking pause instead of standard ? glottal stop
// other Latin letters, to not switch to standard English during pronunciation
.group
b b
c ts
d d
f f
g g
q k
r r
s s
t t
z z
+1
View File
@@ -31,6 +31,7 @@ The 111 supported languages and accents are:
| `roa` | `ca` | Romance | Catalan | |
| `sit` | `yue` | Sino-Tibetan | Chinese | Cantonese |
| `sit` | `hak` | Sino-Tibetan | Chinese | Hakka |
| `map` | `haw` | Austronesian | Hawaiian | |
| `sit` | `cmn` | Sino-Tibetan | Chinese | Mandarin |
| `zls` | `hr` | South Slavic | Croatian | |
| `zlw` | `cs` | West Slavic | Czech | |
+3
View File
@@ -0,0 +1,3 @@
name Hawaiian
language haw
status testing
+236
View File
@@ -0,0 +1,236 @@
phoneme a
vwl starttype #a endtype #a
length 130
FMT(vwl_lv/a, 100)
endphoneme
phoneme a:
vwl starttype #a endtype #a
length 310
lng
FMT(vwl_lv/aa, 90)
endphoneme
phoneme e
vwl starttype #e endtype #e
length 120
FMT(vwl_lv/e, 100)
endphoneme
phoneme e:
vwl starttype #e endtype #e
length 300
FMT(vwl_lv/ee, 100)
endphoneme
phoneme i
vwl starttype #i endtype #i
length 120
FMT(vwl_lv/i, 110)
endphoneme
phoneme i:
vwl starttype #i endtype #i
length 280
FMT(vwl_lv/ii, 90)
endphoneme
phoneme o
vwl starttype #o endtype #o
length 120
FMT(vwl_lv/o, 90)
endphoneme
phoneme o:
vwl starttype #o endtype #o
length 300
FMT(vwl_lv/oo, 75)
endphoneme
phoneme u
vwl starttype #u endtype #u
length 120
FMT(vwl_lv/u, 100)
endphoneme
phoneme u:
vwl starttype #u endtype #u
length 300
FMT(vwl_lv/uu, 90)
endphoneme
phoneme ai
vwl starttype #a endtype #i
length 280
lng
FMT(vdiph/aai, 100)
endphoneme
phoneme au
vwl starttype #a endtype #u
length 300
lng
FMT(vdiph/aau, 100)
endphoneme
phoneme ei
vwl starttype #e endtype #i
length 280
lng
FMT(vdiph/eei_2, 100)
endphoneme
phoneme ie
vwl starttype #i endtype #e
length 250
lng
FMT(vdiph2/ie_2, 100)
endphoneme
phoneme iu
vwl starttype #i endtype #u
length 250
lng
FMT(vdiph2/iu_2, 100)
endphoneme
phoneme ui
vwl starttype #u endtype #i
length 250
lng
FMT(vdiph/ui, 100)
endphoneme
phoneme uo
vwl starttype #u endtype #a
length 280
lng
FMT(vdiph2/ua, 110)
endphoneme
phoneme oi
vwl starttype #o endtype #i
length 250
lng
FMT(vdiph/ooi, 100)
endphoneme
phoneme k
vls vel stp
lengthmod 2
voicingswitch g
Vowelin f1=0 f2=2300 200 400 f3=-100 80
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
IF nextPh(isPause2) THEN
WAV(ustop/k_)
ENDIF
IF nextPh(#i) OR nextPh(l^) THEN
WAV(ustop/ki)
ENDIF
IF nextPh(l) THEN
WAV(ustop/kl)
ENDIF
WAV(ustop/k_unasp, 60)
endphoneme
phoneme l
liquid
IF nextPh(isNotVowel) THEN
PrevVowelEndings
VowelEnding(l/L1_@L)
VowelEnding(l/L1_aL)
VowelEnding(l/L1_eL)
VowelEnding(l/L1_iL)
VowelEnding(l/L1_oL)
VowelEnding(l/L1_uL)
EndSwitch
FMT(l/l_)
RETURN
ENDIF
CALL vowelstart_l
IF prevPh(a) OR prevPh(a:) THEN
VowelEnding(l/xl, 20)
ELSEIF prevPh(isVowel) THEN
VowelEnding(l/xl, 10)
ENDIF
IF prevPh(isPause) THEN
FMT(l/_l)
ENDIF
IF prevPh(t) THEN
FMT(l/tl)
ENDIF
IF prevPh(l/) THEN
FMT(l/l_long)
ENDIF
FMT(l/l)
endphoneme
phoneme m
vcd blb nas
Vowelout f1=2 f2=1000 -500 -350 f3=-200 80 brk
lengthmod 4
IF KlattSynth THEN
Vowelin f1=0 f2=1000 -50 -200 f3=-200 80
IF nextPh(isPause2) THEN
FMT(klatt/m_)
ENDIF
FMT(klatt/m)
ENDIF
NextVowelStarts
VowelStart(m/m@)
VowelStart(m/ma)
VowelStart(m/me)
VowelStart(m/mi)
VowelStart(m/mo)
VowelStart(m/mu)
EndSwitch
IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
FMT(m/mj)
ELIF prevPh(isPause) THEN
FMT(m/_m)
ELIF nextPh(isNotVowel) THEN
FMT(m/m_)
ELIF nextPh(m) THEN
FMT(m/mj)
ENDIF
endphoneme
phoneme p
vls blb stp
lengthmod 2
voicingswitch b
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
IF nextPh(isPause2) THEN
WAV(ustop/p_unasp_, 80)
ENDIF
IF nextPh(l) THEN
WAV(ustop/pl)
ENDIF
WAV(ustop/p_unasp, 120)
endphoneme
phoneme v
vcd lbd frc
ipa ʋ
lengthmod 6
voicingswitch f
Vowelin f1=0 f2=1000 -300 -200 f3=-300 100
Vowelout f1=0 f2=1000 -500 -300 f3=-300 60 len=50
IF nextPh(isPause2) THEN
FMT(voc/v#_)
ENDIF
FMT(voc/v#)
endphoneme
+3
View File
@@ -1722,6 +1722,9 @@ include ph_guarani
phonemetable hak base1
include ph_hakka
phonemetable haw base1
include ph_hawaiian
phonemetable hi_base base1
include ph_hindi_base