mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
Fix issue #868: add initial support for Klingon
This commit is contained in:
@@ -38,6 +38,7 @@ new languages:
|
||||
* io (Ido) -- José Miguel López, Valdis Vitolins
|
||||
* ltg (Latgalian) -- Valdis Vitolins
|
||||
* nog (Nogai) -- boracasli98, Valdis Vitolins
|
||||
* piqd (Klingon) -- Valdis Vitolins
|
||||
* qu (Quechua) -- Valdis Vitolins
|
||||
* qdb (Lang Belta) -- Da Def, Valdis Vitolins
|
||||
* th (Thai) -- Valdis Vitolins
|
||||
|
||||
@@ -369,6 +369,7 @@ phsource/phonemes.stamp: \
|
||||
phsource/ph_kannada \
|
||||
phsource/ph_kazakh \
|
||||
phsource/ph_kinyarwanda \
|
||||
phsource/ph_klingon \
|
||||
phsource/ph_korean \
|
||||
phsource/ph_kurdish \
|
||||
phsource/ph_kyrgyz \
|
||||
@@ -558,6 +559,7 @@ dictionaries: \
|
||||
espeak-ng-data/or_dict \
|
||||
espeak-ng-data/pa_dict \
|
||||
espeak-ng-data/pap_dict \
|
||||
espeak-ng-data/piqd_dict \
|
||||
espeak-ng-data/pl_dict \
|
||||
espeak-ng-data/pt_dict \
|
||||
espeak-ng-data/py_dict \
|
||||
@@ -815,6 +817,9 @@ espeak-ng-data/pa_dict: dictsource/pa_list dictsource/pa_rules dictsource/pa_ext
|
||||
pap: espeak-ng-data/pap_dict
|
||||
espeak-ng-data/pap_dict: dictsource/pap_list dictsource/pap_rules dictsource/pap_extra
|
||||
|
||||
piqd: espeak-ng-data/piqd_dict
|
||||
espeak-ng-data/piqd_dict: dictsource/piqd_list dictsource/piqd_rules
|
||||
|
||||
pl: espeak-ng-data/pl_dict
|
||||
espeak-ng-data/pl_dict: dictsource/pl_list dictsource/pl_rules dictsource/pl_extra dictsource/pl_emoji
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// Letters
|
||||
|
||||
a ?at
|
||||
b b'ai
|
||||
ch tS'ai
|
||||
d d'ai
|
||||
e ?et
|
||||
gh r-'i
|
||||
h h'i
|
||||
i 'it
|
||||
j j'i
|
||||
l l'i
|
||||
m m'i
|
||||
n n'i
|
||||
ng N'i
|
||||
o ?ot
|
||||
p p'i
|
||||
q q'i
|
||||
r R'i
|
||||
s s'i
|
||||
t t'i
|
||||
tlh dX'i
|
||||
u ?ut
|
||||
v v'i
|
||||
w w'i
|
||||
y j'i
|
||||
' ?
|
||||
|
||||
// Numbers
|
||||
_0 p'ar-
|
||||
_1 wa'
|
||||
_2 tSa'
|
||||
_3 w'edZ
|
||||
_4 l'os
|
||||
_5 v'ar-
|
||||
_6 dZ'av
|
||||
_7 s'otS
|
||||
_8 tS'orR-
|
||||
_9 tS'oRr-
|
||||
_10 h'ut
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
// Replace Klingon letters to Latin
|
||||
.replace
|
||||
a
|
||||
b
|
||||
ch
|
||||
D
|
||||
e
|
||||
gh
|
||||
H
|
||||
I
|
||||
j
|
||||
l
|
||||
m
|
||||
n
|
||||
ng
|
||||
o
|
||||
p
|
||||
q
|
||||
qh // should be Q, but eSpeak NG rules don't distinguish capital letters
|
||||
r
|
||||
S
|
||||
t
|
||||
th // should be tlh, but current .replace has limits of total bytes replaced
|
||||
u
|
||||
v
|
||||
w
|
||||
y
|
||||
'
|
||||
,
|
||||
.
|
||||
|
||||
.group a
|
||||
a a
|
||||
aw au
|
||||
ay ai
|
||||
|
||||
.group b
|
||||
b b
|
||||
|
||||
.group ch
|
||||
ch tS
|
||||
|
||||
.group d
|
||||
d D
|
||||
|
||||
.group e
|
||||
e e
|
||||
ey ei
|
||||
ew eu
|
||||
|
||||
.group g
|
||||
gh r-
|
||||
|
||||
.group h
|
||||
h h
|
||||
|
||||
.group i
|
||||
i i
|
||||
iy i:
|
||||
iw iu
|
||||
|
||||
.group j
|
||||
j dZ
|
||||
|
||||
.group l
|
||||
l l
|
||||
|
||||
.group m
|
||||
m m
|
||||
|
||||
.group n
|
||||
n n
|
||||
ng N
|
||||
|
||||
.group o
|
||||
o o
|
||||
oy oi
|
||||
|
||||
.group p
|
||||
p p
|
||||
|
||||
.group q
|
||||
q q
|
||||
qh qh // from replaced Klingon Q letter
|
||||
|
||||
.group r
|
||||
r R
|
||||
|
||||
.group s
|
||||
s s
|
||||
|
||||
.group t
|
||||
t t
|
||||
th dX // from replaced Klingon letter
|
||||
tlh dX
|
||||
|
||||
.group u
|
||||
u u
|
||||
uy ui
|
||||
|
||||
.group v
|
||||
v v
|
||||
|
||||
.group w
|
||||
w w
|
||||
|
||||
.group y
|
||||
y j
|
||||
|
||||
.group
|
||||
' ?
|
||||
+2
-1
@@ -1,6 +1,6 @@
|
||||
# Languages
|
||||
|
||||
Development version of eSpeak NG supports 122 languages and accents,
|
||||
Development version of eSpeak NG supports 123 languages and accents,
|
||||
which are listed in table below.
|
||||
|
||||
To check, what languages are supported by distributed version, run `espeak-ng --voices` command.
|
||||
@@ -101,6 +101,7 @@ To check, what languages are supported by distributed version, run `espeak-ng --
|
||||
| `myn` | `quc` | Mayan | K'iche' | |
|
||||
| `roa` | `pt` | Romance | Portuguese | Portugal |
|
||||
| `inc` | `pa` | Indic | Punjabi | |
|
||||
| `art` | `piqd` | Constructed | Klingon | |
|
||||
| `roa` | `ro` | Romance | Romanian | |
|
||||
| `zle` | `ru` | East Slavic | Russian | |
|
||||
| `zle` | `ru-lv` | East Slavic | Russian | Latvia |
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
name Klingon
|
||||
language piqd
|
||||
status testing
|
||||
stressRule 3
|
||||
|
||||
@@ -0,0 +1,339 @@
|
||||
phoneme a
|
||||
vwl starttype #a endtype #a
|
||||
length 130
|
||||
FMT(vwl_lv/a, 100) // adjusted from aa_3
|
||||
endphoneme
|
||||
|
||||
phoneme e
|
||||
vwl starttype #e endtype #e
|
||||
length 120
|
||||
FMT(vwl_lv/e, 100) // other alternative e_5
|
||||
endphoneme
|
||||
|
||||
phoneme i
|
||||
vwl starttype #i endtype #i
|
||||
length 120
|
||||
FMT(vwl_lv/i, 110) // was i_6
|
||||
endphoneme
|
||||
|
||||
phoneme o
|
||||
vwl starttype #o endtype #o
|
||||
length 120
|
||||
FMT(vwl_lv/o, 90)
|
||||
endphoneme
|
||||
|
||||
phoneme u
|
||||
vwl starttype #u endtype #u
|
||||
length 120
|
||||
FMT(vwl_lv/u, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme ai
|
||||
vwl starttype #a endtype #i
|
||||
length 280
|
||||
lng
|
||||
FMT(vwl_lv/ai, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme au
|
||||
vwl starttype #a endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vwl_lv/au, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme ei
|
||||
vwl starttype #e endtype #i
|
||||
length 280
|
||||
lng
|
||||
FMT(vwl_lv/ei, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme ie
|
||||
vwl starttype #i endtype #e
|
||||
length 250
|
||||
lng
|
||||
FMT(vwl_lv/ie, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme iu
|
||||
vwl starttype #i endtype #u
|
||||
length 250
|
||||
lng
|
||||
FMT(vwl_lv/iu, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme ui
|
||||
vwl starttype #u endtype #i
|
||||
length 250
|
||||
lng
|
||||
FMT(vwl_lv/ui, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme uo
|
||||
vwl starttype #u endtype #a
|
||||
length 280
|
||||
lng
|
||||
FMT(vwl_lv/ua, 110)
|
||||
endphoneme
|
||||
|
||||
phoneme oi
|
||||
vwl starttype #o endtype #i
|
||||
length 250
|
||||
lng
|
||||
FMT(vwl_lv/oi, 100)
|
||||
endphoneme
|
||||
|
||||
phoneme ts
|
||||
vls alv afr nolink
|
||||
ipa t͡s
|
||||
voicingswitch J
|
||||
length 55
|
||||
lengthmod 1
|
||||
WAV(ustop/ts2, 60)
|
||||
endphoneme
|
||||
|
||||
phoneme tS
|
||||
vls pla afr sib
|
||||
ipa t͡ʃ
|
||||
voicingswitch dZ
|
||||
lengthmod 2
|
||||
length 80
|
||||
WAV(ustop/tsh,40)
|
||||
endphoneme
|
||||
|
||||
phoneme D // louder and shorter version of d
|
||||
vcd alv stp
|
||||
ipa d
|
||||
voicingswitch t
|
||||
length 8
|
||||
lengthmod 5
|
||||
Vowelin f1=1 f2=1700 -300 300 f3=-100 80
|
||||
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
|
||||
|
||||
IF PreVoicing THEN
|
||||
FMT(d/xd, 110)
|
||||
ENDIF
|
||||
|
||||
IF nextPh(isPause2) THEN
|
||||
FMT(d/d_, 120) addWav(x/d_,110)
|
||||
ENDIF
|
||||
|
||||
FMT(d/d, 110) addWav(x/d,110)
|
||||
endphoneme
|
||||
|
||||
phoneme j // **y**es
|
||||
liquid pal starttype #i
|
||||
IF nextPhW(isVowel) THEN
|
||||
NextVowelStarts
|
||||
VowelStart(j/j@)
|
||||
VowelStart(j/ja)
|
||||
VowelStart(j/je)
|
||||
VowelStart(j/ji)
|
||||
VowelStart(j/jo)
|
||||
VowelStart(j/ju)
|
||||
EndSwitch
|
||||
VowelEnding(j/xj, 127) // In difference with English, vowel is lengthened, not shortened
|
||||
ELSE
|
||||
Vowelout len=127 // no vowel follows
|
||||
FMT(j/xj)
|
||||
ENDIF
|
||||
|
||||
IF prevPh(isPause) THEN
|
||||
FMT(j/_j)
|
||||
ENDIF
|
||||
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) // weaker
|
||||
endphoneme
|
||||
|
||||
phoneme c
|
||||
vls pal stp pzd
|
||||
voicingswitch J
|
||||
WAV(ustop/c, 80)
|
||||
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(isPause) THEN
|
||||
FMT(l/_l)
|
||||
ENDIF
|
||||
|
||||
IF prevPh(t) THEN
|
||||
FMT(l/tl)
|
||||
ENDIF
|
||||
|
||||
IF prevPh(l/) THEN
|
||||
FMT(l/l_long) // double l, make it longer
|
||||
ENDIF
|
||||
|
||||
FMT(l/l)
|
||||
endphoneme
|
||||
|
||||
phoneme m // copied from standard m phoneme with rule for 'mm'
|
||||
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 // m/mj has no volume change, so doubled 'mm' merges better
|
||||
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 R
|
||||
liquid trl
|
||||
ipa r
|
||||
lengthmod 6
|
||||
Vowelin f1=0 f2=1700 -300 300 f3=-300 80
|
||||
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
|
||||
FMT(r3/r_trill) addWav(r3/r_trill.wav, 60)
|
||||
endphoneme
|
||||
|
||||
phoneme s
|
||||
vls alv frc sib
|
||||
voicingswitch z
|
||||
lengthmod 3
|
||||
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
|
||||
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
|
||||
WAV(ufric/s,60)
|
||||
endphoneme
|
||||
|
||||
phoneme t
|
||||
vls alv stp //lengthenstop
|
||||
lengthmod 1
|
||||
voicingswitch d
|
||||
IF nextPh(isPause2) THEN
|
||||
WAV(ustop/t_dnt, 40)
|
||||
ENDIF
|
||||
WAV(ustop/t_dnt, 50)
|
||||
endphoneme
|
||||
|
||||
phoneme v // from v# in standard phonemes
|
||||
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
|
||||
|
||||
|
||||
phoneme gH // arabic Ghain, the phoneme is derived from Q
|
||||
vcd vel frc
|
||||
voicingswitch R2
|
||||
ipa ɣ
|
||||
Vowelin f1=2 f2=2300 200 300 f3=-300 80
|
||||
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
|
||||
FMT(g/g) addWav(vwl_ar/dhad)
|
||||
endphoneme
|
||||
|
||||
phoneme dH //arabic Dhad TODO this probably should be simple d from standard phonemes
|
||||
vcd alv stp
|
||||
ipa dˤ
|
||||
Vowelin f1=1 f2=1700 -300 300 f3=-100 80
|
||||
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
|
||||
IF PreVoicing THEN
|
||||
FMT(d/xd)
|
||||
ENDIF
|
||||
IF nextPh(isPause2) THEN
|
||||
FMT(d/d_) addWav(x/d_)
|
||||
ENDIF
|
||||
FMT(d/d) addWav(x/d)
|
||||
endphoneme
|
||||
|
||||
phoneme s[
|
||||
vls dnt stp
|
||||
voicingswitch s
|
||||
IF nextPh(s[) THEN
|
||||
length 50
|
||||
ELSE
|
||||
length 160
|
||||
ENDIF
|
||||
lengthmod 7
|
||||
WAV(vwl_ar/shin)
|
||||
endphoneme
|
||||
|
||||
phoneme X
|
||||
vls uvl frc
|
||||
voicingswitch Q
|
||||
lengthmod 7
|
||||
Vowelin f1=0 f2=2300 200 400 f3=-100 80
|
||||
Vowelout f1=0 f2=2300 300 400 f3=-100 80 rms=20
|
||||
WAV(ufric/xx, 70)
|
||||
endphoneme
|
||||
|
||||
|
||||
@@ -1854,6 +1854,8 @@ include ph_nahuatl
|
||||
phonemetable pt base2
|
||||
include ph_pt_brazil
|
||||
|
||||
phonemetable piqd base2
|
||||
include ph_klingon
|
||||
|
||||
phonemetable ro base2
|
||||
include ph_romanian
|
||||
|
||||
Reference in New Issue
Block a user