Browse Source

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

master
Valdis Vitolins 5 years ago
parent
commit
0ee91aaa06
8 changed files with 468 additions and 0 deletions
  1. 1
    0
      CHANGELOG.md
  2. 4
    0
      Makefile.am
  3. 105
    0
      dictsource/haw_list
  4. 115
    0
      dictsource/haw_rules
  5. 1
    0
      docs/languages.md
  6. 3
    0
      espeak-ng-data/lang/map/haw
  7. 236
    0
      phsource/ph_hawaiian
  8. 3
    0
      phsource/phonemes

+ 1
- 0
CHANGELOG.md 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
- 0
Makefile.am 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
- 0
dictsource/haw_list 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
- 0
dictsource/haw_rules 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
- 0
docs/languages.md 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
- 0
espeak-ng-data/lang/map/haw View File

@@ -0,0 +1,3 @@
name Hawaiian
language haw
status testing

+ 236
- 0
phsource/ph_hawaiian 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
- 0
phsource/phonemes 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


Loading…
Cancel
Save