mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
smj: Support for new language Lule Saami
Co-authored-by: Sebastien Le Maguer <lemagues@tcd.ie>
This commit is contained in:
committed by
Juho Hiltunen
co-authored by
Sebastien Le Maguer
parent
899b268468
commit
93d3c67df6
@@ -58,6 +58,7 @@ new languages:
|
||||
* piqd (Klingon) -- Valdis Vitolins
|
||||
* qu (Quechua) -- Valdis Vitolins
|
||||
* qdb (Lang Belta) -- Da Def, Valdis Vitolins
|
||||
* smj (Lule Saami) -- Katri Hiovain, Sebastien Le Maguer
|
||||
* th (Thai) -- Valdis Vitolins
|
||||
* tk (Turkmen) -- boracasli98, Valdis Vitolins
|
||||
* ug (Uyghur) -- boracasli98, Valdis Vitolins
|
||||
|
||||
@@ -383,6 +383,7 @@ phsource/phonemes.stamp: \
|
||||
phsource/ph_latvian \
|
||||
phsource/ph_lithuanian \
|
||||
phsource/ph_lojban \
|
||||
phsource/ph_lule_saami \
|
||||
phsource/ph_macedonian \
|
||||
phsource/ph_malayalam \
|
||||
phsource/ph_maltese \
|
||||
@@ -578,6 +579,7 @@ dictionaries: \
|
||||
espeak-ng-data/si_dict \
|
||||
espeak-ng-data/sk_dict \
|
||||
espeak-ng-data/sl_dict \
|
||||
espeak-ng-data/smj_dict \
|
||||
espeak-ng-data/sq_dict \
|
||||
espeak-ng-data/sr_dict \
|
||||
espeak-ng-data/sv_dict \
|
||||
@@ -870,6 +872,9 @@ espeak-ng-data/sk_dict: dictsource/sk_list dictsource/sk_rules dictsource/sk_ext
|
||||
sl: espeak-ng-data/sl_dict
|
||||
espeak-ng-data/sl_dict: dictsource/sl_list dictsource/sl_rules dictsource/sl_extra dictsource/sl_emoji
|
||||
|
||||
smj: espeak-ng-data/smj_dict
|
||||
espeak-ng-data/smj_dict: dictsource/smj_list dictsource/smj_rules
|
||||
|
||||
sq: espeak-ng-data/sq_dict
|
||||
espeak-ng-data/sq_dict: dictsource/sq_list dictsource/sq_rules dictsource/sq_extra dictsource/sq_emoji
|
||||
|
||||
|
||||
+8637
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,282 @@
|
||||
// SMJ translation rules
|
||||
// This file is UTF-8 encoded
|
||||
|
||||
// _) a // "a" at the start of a word
|
||||
// a (CC // "a" followed by two consonants
|
||||
// a (C% // "a" followed by a double consonant (the same letter twice)
|
||||
// a (/% // "a" followed by a percent sign
|
||||
// %C) a // "a" preceded by a double consonants
|
||||
|
||||
// @@) bi // "bi" preceded by at least two syllables
|
||||
// @@a) bi // "bi" preceded by at least 2 syllables and following 'a'
|
||||
|
||||
// START SMJ HERE
|
||||
|
||||
// groups
|
||||
|
||||
//.L01 i j // used in palatalization rules
|
||||
|
||||
.L01 b d g k p t // Plosives
|
||||
|
||||
.L02 r l j v // Sonorants
|
||||
|
||||
//.L02 b d f g h j l m n r s v
|
||||
|
||||
//.L03 l m n r
|
||||
|
||||
//.L04 a b c d e f g h i j k l m n o p q r s t u v õ ä ö ü
|
||||
|
||||
//.L05 a e i l m n o r u õ ä ö ü
|
||||
|
||||
|
||||
// Epenthetic vowels in Q3 consonant clusters
|
||||
// r l j v followed by homorganic consonants (geminates)
|
||||
// barggo, dárbbo, tjoarvve, girjje, álggo, galbba, gålmmå, dálvve, nijbbe, bievdde
|
||||
|
||||
// separate rules for all cons. clusters and vowel nucleai?
|
||||
// a (L02%C // possible to generalize?
|
||||
// A) rgg r@^g // Any vowel + schwaa - more general?
|
||||
|
||||
//Orthographically homonymous Q3: f, l, m, n, nj, ń, ñ, ŋ, r, s, sj, v
|
||||
// After numeral 1 -- Q3; after any numeral <1 -- Q2?
|
||||
// akta @) ff ff:
|
||||
// Word order? -- Impossible to have a syntactic disambiguator in Espeak to recognize homonymous sg.nom & sg.gen forms...
|
||||
// OR if adjusted orthography would be used, e.g.: f'f/fff ff:
|
||||
// Vowel compensation/readjustment: V1 and V2 longest in Q1, gradually decreasing in length, but differences very small/not significant.
|
||||
|
||||
|
||||
|
||||
|
||||
.group a
|
||||
// a A
|
||||
a (@ A // back vowel
|
||||
@) a a:
|
||||
artihkal ar.t'ihkAl
|
||||
%CC) a A // short after Q3 consonant/cluster
|
||||
|
||||
.group á
|
||||
%CC) á a // short after Q3 consonant/cluster
|
||||
á (@ A: //
|
||||
@) á a: // in 2nd syll
|
||||
C) á A: // after Q1 (single) consonant
|
||||
|
||||
.group ä
|
||||
ä (@ &
|
||||
ä &: //
|
||||
// ä i& // in Sweden
|
||||
ä e& // in Sweden
|
||||
|
||||
.group æ // same as ä
|
||||
æ (@ &
|
||||
æ &: //
|
||||
// æ i& // in Sweden
|
||||
æ e& // in Sweden
|
||||
%CC) æ & // short after Q3 consonant/cluster
|
||||
|
||||
.group å
|
||||
å O
|
||||
@) å O: // in 2nd syll
|
||||
%CC) å O // short after Q3 consonant/cluster
|
||||
|
||||
.group b
|
||||
b p
|
||||
A) b (A b // voiced in an intervocalic position
|
||||
bb b: // voiced within a geminate
|
||||
bussa p'u-s:A // Scandinavian loanword
|
||||
|
||||
.group c
|
||||
c ts
|
||||
|
||||
.group d
|
||||
d t
|
||||
dal dAl
|
||||
A) d (A d // voiced in an intervocalic position
|
||||
dd d:
|
||||
dj c // palatal plosive
|
||||
A) dj (A J\ // voiced palatal plosive between vowels
|
||||
A) ddj (A J\: // voiced palatal plosive between vowels
|
||||
dts dz // [d͡z]
|
||||
dtj dZ // [d͡ʒ]
|
||||
|
||||
.group e
|
||||
e (@ E: // open-mid
|
||||
e (_ iE // open 2nd syll
|
||||
@) e iE // in 2nd syll
|
||||
e E // other environments
|
||||
|
||||
.group f
|
||||
f f
|
||||
ff f:
|
||||
akta @) ff (A ff: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group g
|
||||
g k
|
||||
A) g (A g // voiced in an intervocalic position
|
||||
gg g:
|
||||
|
||||
.group h
|
||||
h h
|
||||
hk hk
|
||||
hkk k: // [h] not audible in Q3 cons. cluster
|
||||
hp hp
|
||||
hpp p: // [h] not audible in Q3 cons. cluster
|
||||
ht ht
|
||||
htt t: // [h] not audible in Q3 cons. cluster
|
||||
hts hts
|
||||
htts h:ts
|
||||
htj htS
|
||||
httj ht:S
|
||||
|
||||
.group i
|
||||
i i: // can be long as well?
|
||||
ie (@ iE
|
||||
%CC) i i // short after Q3 consonant
|
||||
|
||||
.group j
|
||||
j j
|
||||
ja ja
|
||||
i) jbb jIb
|
||||
journalissta Sur.nal'isstA
|
||||
|
||||
.group k
|
||||
k k
|
||||
k (á kh // Aspirated in Scandinavian loanwords, like this?
|
||||
káffa kh'A:f:A
|
||||
kásus kh'A:su-s
|
||||
kássa kh'A:S:A
|
||||
kk k:
|
||||
|
||||
.group l
|
||||
l l // Can be a copula itself
|
||||
ll l:
|
||||
akta @) ll (A ll: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
á) lgg lAg // Q3
|
||||
a) lbb lab // Q3
|
||||
u) lpp lub // Q3
|
||||
á) lmm lAm // Q3
|
||||
á) lvv lAv // Q3
|
||||
|
||||
.group m
|
||||
m m
|
||||
mm m:
|
||||
akta @) mm (A mm: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group n
|
||||
n n
|
||||
nj n_j
|
||||
nnj n_j:
|
||||
akta @) nnj (A nn_j: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
|
||||
.group ñ
|
||||
ñ N
|
||||
ññ N:
|
||||
akta @) ññ (A NN: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group ń
|
||||
ń N
|
||||
ńń N:
|
||||
akta @) ńń (A NN: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group ŋ
|
||||
ŋ N
|
||||
ŋŋ N:
|
||||
akta @) ŋŋ (A NN: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group o
|
||||
o oO
|
||||
@) o uo
|
||||
oa ua //
|
||||
oa (@ oA //
|
||||
|
||||
.group ö
|
||||
%CC) ö Y
|
||||
ö Y: //
|
||||
|
||||
.group ø
|
||||
%CC) ø Y
|
||||
ø Y: //
|
||||
|
||||
.group p
|
||||
p p
|
||||
p (á ph // Aspirated in Scandinavian loanwords
|
||||
pp p:
|
||||
parlamænnta par.lAm'&ntA
|
||||
|
||||
.group r
|
||||
r r
|
||||
rd rt
|
||||
rl rl
|
||||
// rl l. // Retroflex. in Scandinavian loanwords
|
||||
rn rn
|
||||
// rn n. // Retroflex. in Scandinavian loanwords
|
||||
rt rt
|
||||
// rt t. // Retroflex. in Scandinavian loanwords
|
||||
|
||||
a) rgg rag // Q3
|
||||
e) rgg reg // Q3
|
||||
æ) rgg r&g // Q3
|
||||
a) rvv rav // Q3
|
||||
á) rbb rAb // Q3
|
||||
i) rjj rij // Q3
|
||||
u) rŋŋ ruN // Q3
|
||||
|
||||
rr r:
|
||||
akta @) rr (A rr: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group s
|
||||
s s
|
||||
ss s:
|
||||
akta @) ss (A ss: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
sj S
|
||||
ssj S: // Q2 or Q3
|
||||
akta @) ssj (A SS: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group t
|
||||
t t
|
||||
t (á th // Aspirated in Scandinavian loanwords
|
||||
t (_ ht // at the end of a word
|
||||
tt t:
|
||||
tj tS // voiceless alveo-palatal fricative in Sweden
|
||||
ts ts // voiceless alveo-palatal fricative in Sweden e.g. <subtsas>
|
||||
tts ts:
|
||||
|
||||
.group u
|
||||
u u
|
||||
uo (@ uo
|
||||
// u u: //
|
||||
// u U- //
|
||||
// u u- // in newish Scand. loanwords like <komuvnna>
|
||||
|
||||
// List some of most common scand. loanwords?
|
||||
|
||||
.group v
|
||||
v v
|
||||
vv v:
|
||||
L01) v f // before a plosive
|
||||
v (_ P // in the end of a word, e.g. 1sg suffix
|
||||
|
||||
e) vdd ved // Q3
|
||||
i) vdd vid // Q3
|
||||
å) vdd vOd // Q3
|
||||
|
||||
akta @) vv (A vv: // (Q3/sg.nom when with numeral 1)
|
||||
|
||||
.group w
|
||||
w v
|
||||
|
||||
.group x
|
||||
x ks
|
||||
xx k:s
|
||||
|
||||
.group y
|
||||
y y
|
||||
|
||||
.group z
|
||||
z ts
|
||||
zz t:s // pizza
|
||||
K) zh Z
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
name Lule Saami
|
||||
language smj
|
||||
|
||||
status testing
|
||||
@@ -0,0 +1,427 @@
|
||||
|
||||
//====================================================
|
||||
// Lule Saami
|
||||
//====================================================
|
||||
|
||||
phoneme : // Lengthen previous vowel by "length"
|
||||
virtual
|
||||
length 160
|
||||
endphoneme
|
||||
|
||||
phoneme @ // close schwa
|
||||
vwl starttype #@ endtype #@
|
||||
unstressed
|
||||
length 120
|
||||
FMT(vowel/@_4)
|
||||
endphoneme
|
||||
|
||||
phoneme i
|
||||
vwl starttype #i endtype #i
|
||||
length 140
|
||||
IfNextVowelAppend(;)
|
||||
ChangeIfUnstressed(I)
|
||||
FMT(vowel/i_4)
|
||||
endphoneme
|
||||
|
||||
phoneme I
|
||||
vwl starttype #i endtype #i
|
||||
length 140
|
||||
IfNextVowelAppend(;)
|
||||
FMT(vowel/ii_3)
|
||||
endphoneme
|
||||
|
||||
phoneme e
|
||||
vwl starttype #e endtype #e
|
||||
length 150
|
||||
FMT(vowel/e_mid2)
|
||||
endphoneme
|
||||
|
||||
phoneme E
|
||||
vwl starttype #e endtype #e
|
||||
length 160
|
||||
FMT(vowel/ee_4)
|
||||
endphoneme
|
||||
|
||||
phoneme &
|
||||
vwl starttype #a endtype #a
|
||||
length 150
|
||||
FMT(vowel/&)
|
||||
endphoneme
|
||||
|
||||
phoneme a
|
||||
vwl starttype #a endtype #a
|
||||
length 170
|
||||
// ChangeIfUnstressed(a2)
|
||||
FMT(vowel/aa_9)
|
||||
endphoneme
|
||||
|
||||
phoneme a2
|
||||
vwl starttype #a endtype #a
|
||||
length 170
|
||||
FMT(vowel/aa#)
|
||||
endphoneme
|
||||
|
||||
phoneme A
|
||||
vwl starttype #a endtype #a
|
||||
length 170
|
||||
FMT(vowel/aa_8)
|
||||
endphoneme
|
||||
|
||||
phoneme o
|
||||
vwl starttype #o endtype #o
|
||||
length 155
|
||||
FMT(vowel/oo_1)
|
||||
endphoneme
|
||||
|
||||
phoneme O
|
||||
vwl starttype #o endtype #o
|
||||
length 150
|
||||
FMT(vowel/o_mid)
|
||||
endphoneme
|
||||
|
||||
phoneme Y
|
||||
vwl starttype #@ endtype #@
|
||||
length 155
|
||||
FMT(vowel/y#)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme u
|
||||
vwl starttype #u endtype #u
|
||||
length 140
|
||||
FMT(vowel/u_bck)
|
||||
endphoneme
|
||||
|
||||
phoneme u1 // TEST
|
||||
vwl starttype #u endtype #u
|
||||
length 140
|
||||
FMT(vowel/u_2)
|
||||
endphoneme
|
||||
|
||||
phoneme U // TEST
|
||||
vwl starttype #u endtype #u
|
||||
length 140
|
||||
FMT(vowel/uu_4)
|
||||
endphoneme
|
||||
|
||||
phoneme u-
|
||||
vwl starttype #u endtype #u
|
||||
ipa ʉ
|
||||
length 200
|
||||
FMT(vowel/u#_2)
|
||||
endphoneme
|
||||
|
||||
phoneme y
|
||||
vwl starttype #u endtype #u
|
||||
length 150
|
||||
FMT(vowel/y)
|
||||
endphoneme
|
||||
|
||||
phoneme W
|
||||
vwl starttype #@ endtype #@
|
||||
length 120
|
||||
FMT(vowel/oe_2)
|
||||
endphoneme
|
||||
|
||||
phoneme w
|
||||
liquid
|
||||
lengthmod 7
|
||||
starttype #u
|
||||
|
||||
IF nextPh(isVowel) THEN
|
||||
NextVowelStarts
|
||||
VowelStart(w/w@)
|
||||
VowelStart(w/wa)
|
||||
VowelStart(w/we)
|
||||
VowelStart(w/wi)
|
||||
VowelStart(w/wo)
|
||||
VowelStart(w/wu)
|
||||
EndSwitch
|
||||
|
||||
VowelEnding(w/xw, -30)
|
||||
|
||||
IF prevPhW(isNasal) THEN
|
||||
FMT(w/w)
|
||||
ELSEIF prevPhW(h) THEN
|
||||
// none, [hw]
|
||||
ELSE
|
||||
FMT(w/_w)
|
||||
ENDIF
|
||||
ELSE
|
||||
// no vowel follows
|
||||
Vowelout len=50
|
||||
IF prevPh(#i) THEN
|
||||
FMT(w/iw_)
|
||||
ENDIF
|
||||
FMT(w/w_)
|
||||
ENDIF
|
||||
endphoneme
|
||||
|
||||
|
||||
// Diphthongs
|
||||
//===========
|
||||
|
||||
phoneme ai
|
||||
vwl starttype #a endtype #i
|
||||
length 310
|
||||
lng
|
||||
FMT(vdiph/aai_3)
|
||||
endphoneme
|
||||
|
||||
phoneme &i
|
||||
vwl starttype #a endtype #i
|
||||
length 290
|
||||
lng
|
||||
FMT(vdiph/&i)
|
||||
endphoneme
|
||||
|
||||
phoneme oi
|
||||
vwl starttype #o endtype #i
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/ooi)
|
||||
endphoneme
|
||||
|
||||
phoneme ei
|
||||
vwl starttype #e endtype #i
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/eei_2)
|
||||
endphoneme
|
||||
|
||||
phoneme Yi
|
||||
vwl starttype #@ endtype #i
|
||||
length 270
|
||||
lng
|
||||
FMT(vdiph/y#i)
|
||||
endphoneme
|
||||
|
||||
phoneme ui
|
||||
vwl starttype #u endtype #i
|
||||
length 270
|
||||
lng
|
||||
FMT(vdiph/ui_4)
|
||||
endphoneme
|
||||
|
||||
phoneme yi
|
||||
vwl starttype #u endtype #i
|
||||
length 270
|
||||
lng
|
||||
FMT(vdiph/yi)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme au
|
||||
vwl starttype #a endtype #u
|
||||
length 300
|
||||
lng
|
||||
FMT(vdiph/aau)
|
||||
endphoneme
|
||||
|
||||
phoneme ou
|
||||
vwl starttype #o endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/ou)
|
||||
endphoneme
|
||||
|
||||
phoneme eu
|
||||
vwl starttype #e endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/eu_2)
|
||||
endphoneme
|
||||
|
||||
phoneme iu
|
||||
vwl starttype #i endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph2/iu_2)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme &y
|
||||
vwl starttype #a endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/&y)
|
||||
endphoneme
|
||||
|
||||
phoneme ey
|
||||
vwl starttype #e endtype #u
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph/eey)
|
||||
endphoneme
|
||||
|
||||
phoneme Yy
|
||||
vwl starttype #@ endtype #u
|
||||
length 270
|
||||
lng
|
||||
FMT(vdiph/y#y)
|
||||
endphoneme
|
||||
|
||||
phoneme iy
|
||||
vwl starttype #i endtype #u
|
||||
length 260
|
||||
lng
|
||||
FMT(vdiph2/iy)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme uo
|
||||
vwl starttype #u endtype #o
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph2/uo)
|
||||
endphoneme
|
||||
|
||||
phoneme ie
|
||||
vwl starttype #i endtype #e
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph2/ie)
|
||||
endphoneme
|
||||
|
||||
phoneme yY
|
||||
vwl starttype #u endtype #@
|
||||
length 280
|
||||
lng
|
||||
FMT(vdiph2/y-y#)
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
|
||||
// CONSONANTS
|
||||
//===========
|
||||
|
||||
|
||||
|
||||
phoneme r
|
||||
import_phoneme base1/R
|
||||
endphoneme
|
||||
|
||||
phoneme r. // retroflex
|
||||
liquid rfx
|
||||
lengthmod 3
|
||||
Vowelout f1=3 f2=1400 -400 300 f3=-400 80 rms=35 len=15 colr=2
|
||||
Vowelin f1=2 f2=1400 -400 300 f3=-400 80 len=20
|
||||
|
||||
IF nextPh(isNotVowel) THEN
|
||||
FMT(r3/@tap_rfx_)
|
||||
ENDIF
|
||||
FMT(r3/@tap_rfx)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme R2 // this is [R2], but shorter
|
||||
liquid trl
|
||||
lengthmod 6
|
||||
ipa r
|
||||
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_short) addWav(r3/r_trill.wav, 50)
|
||||
endphoneme
|
||||
|
||||
phoneme P
|
||||
vls blb stp
|
||||
lengthmod 2
|
||||
voicingswitch b
|
||||
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 gpaus
|
||||
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=30
|
||||
WAV(ustop/p_unasp)
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme v // approximant, not fricative
|
||||
vcd lbd frc
|
||||
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 t // dental variant of /t/
|
||||
import_phoneme base1/t[
|
||||
voicingswitch d
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme d
|
||||
vcd dnt stp
|
||||
voicingswitch t
|
||||
lengthmod 5
|
||||
Vowelin f1=2 f2=1700 -100 200 f3=0 80
|
||||
Vowelout f1=2 f2=1700 -100 200 f3=0 80 rms=20
|
||||
|
||||
IF PreVoicing THEN
|
||||
FMT(d/xd)
|
||||
ENDIF
|
||||
|
||||
IF nextPh(isPause2) THEN
|
||||
FMT(d/d_) addWav(x/d_)
|
||||
ELIF nextPh(r) THEN
|
||||
FMT(d/dr) addWav(x/d_dnt, 60)
|
||||
ENDIF
|
||||
|
||||
FMT(d/d) addWav(x/d_dnt, 60)
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme n
|
||||
vcd alv nas
|
||||
lengthmod 4
|
||||
ipa n
|
||||
IF nextPhW(isVelar) THEN // /n/ is velarized to /N/ when before velar stops
|
||||
ChangePhoneme(N)
|
||||
ENDIF
|
||||
CALL base1/n
|
||||
endphoneme
|
||||
|
||||
phoneme p
|
||||
import_phoneme base2/p
|
||||
voicingswitch b
|
||||
endphoneme
|
||||
|
||||
|
||||
|
||||
phoneme k
|
||||
import_phoneme base2/k
|
||||
voicingswitch g
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme s2 // second part of long [s]
|
||||
import_phoneme consonants/s2
|
||||
endphoneme
|
||||
|
||||
|
||||
phoneme h
|
||||
vls glt apr
|
||||
lengthmod 3
|
||||
|
||||
IF nextPh(#@) THEN
|
||||
WAV(h/h@)
|
||||
ELIF nextPh(#a) THEN
|
||||
WAV(h/ha)
|
||||
ELIF nextPh(#e) THEN
|
||||
WAV(h/he)
|
||||
ELIF nextPh(#i) THEN
|
||||
WAV(h/hi)
|
||||
ELIF nextPh(#o) THEN
|
||||
WAV(h/hu_fi, 70)
|
||||
ELIF nextPh(#u) THEN
|
||||
WAV(h/hu_fi, 80)
|
||||
ENDIF
|
||||
WAV(h/h_, 70) // no vowel following
|
||||
endphoneme
|
||||
|
||||
|
||||
+3
-2
@@ -602,7 +602,6 @@ endphoneme
|
||||
|
||||
|
||||
|
||||
|
||||
phoneme w
|
||||
liquid
|
||||
lengthmod 7
|
||||
@@ -639,7 +638,6 @@ endphoneme
|
||||
|
||||
|
||||
|
||||
|
||||
phoneme j // **y**es
|
||||
liquid pal starttype #i
|
||||
lengthmod 7
|
||||
@@ -1710,6 +1708,9 @@ include ph_farsi
|
||||
phonemetable fi base1
|
||||
include ph_finnish
|
||||
|
||||
phonemetable smj base1
|
||||
include ph_lule_saami
|
||||
|
||||
phonemetable fr base1
|
||||
include ph_french
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
a 0 712 1160 2780 696 1160 2780
|
||||
e 0 504 1900 2540 504 1900 2540
|
||||
i 0 312 2300 2820 304 2300 2820
|
||||
o 0 512 860 2648 512 860 2648
|
||||
u 0 320 740 2400 320 740 2400
|
||||
I 0 360 2120 2680 360 2120 2660
|
||||
& 0 736 1540 2500 752 1540 2500
|
||||
a2 0 657 1100 2703 657 1120 2703
|
||||
Y 0 448 1520 2420 463 1520 2400
|
||||
u1 0 344 800 2360 344 800 2360
|
||||
U 0 368 800 2660 368 800 2660
|
||||
y 0 280 1720 2340 280 1720 2340
|
||||
ai 0 688 1064 2806 312 2300 2820
|
||||
&i 0 744 1540 2500 328 2280 2720
|
||||
oi 0 545 780 2720 310 2002 2500
|
||||
ei 0 547 1855 2536 320 2300 2740
|
||||
Yi 0 448 1520 2420 355 2222 2720
|
||||
ui 0 320 740 2400 272 2247 3100
|
||||
yi 0 280 1720 2320 296 2280 2780
|
||||
au 0 688 1060 2580 368 900 2540
|
||||
ou 0 516 860 2648 312 860 2360
|
||||
eu 0 460 1929 2512 327 947 2367
|
||||
iu 0 296 2180 2820 320 920 2360
|
||||
&y 0 744 1520 2500 296 1720 2340
|
||||
ey 0 547 1855 2536 280 1720 2340
|
||||
Yy 0 448 1520 2420 280 1720 2340
|
||||
iy 0 280 2280 2820 280 1720 2340
|
||||
uo 0 344 896 2375 494 864 2468
|
||||
ie 0 280 2280 2820 728 1562 2520
|
||||
yY 0 280 1720 2340 448 1520 2420
|
||||
@@ -811,7 +811,8 @@ Translator *SelectTranslator(const char *name)
|
||||
tr->langopts.param[LOPT_IT_DOUBLING] = 1;
|
||||
tr->langopts.long_stop = 130;
|
||||
|
||||
tr->langopts.numbers = NUM_DECIMAL_COMMA + NUM_ALLOW_SPACE;
|
||||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT;
|
||||
// tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_ORDINAL_DOT;
|
||||
SetLetterVowel(tr, 'y');
|
||||
tr->langopts.spelling_stress = 1;
|
||||
tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma
|
||||
@@ -1400,6 +1401,26 @@ Translator *SelectTranslator(const char *name)
|
||||
tr->langopts.numbers2 = NUM2_THOUSANDS_VAR4;
|
||||
tr->langopts.thousands_sep = ' '; // don't allow dot as thousands separator
|
||||
break;
|
||||
|
||||
case L3('s', 'm', 'j'): // Lule Saami
|
||||
{
|
||||
static const unsigned char stress_amps_fi[8] = { 18, 16, 22, 22, 20, 22, 22, 22 };
|
||||
static const short stress_lengths_fi[8] = { 150, 180, 200, 200, 0, 0, 210, 250 };
|
||||
|
||||
SetupTranslator(tr, stress_lengths_fi, stress_amps_fi);
|
||||
|
||||
tr->langopts.stress_rule = STRESSPOSN_1L;
|
||||
tr->langopts.stress_flags = S_FINAL_DIM_ONLY | S_FINAL_NO_2 | S_2_TO_HEAVY; // move secondary stress from light to a following heavy syllable
|
||||
tr->langopts.param[LOPT_IT_DOUBLING] = 1;
|
||||
tr->langopts.long_stop = 130;
|
||||
|
||||
tr->langopts.numbers = NUM_DECIMAL_COMMA | NUM_ALLOW_SPACE | NUM_SWAP_TENS | NUM_OMIT_1_HUNDRED | NUM_DFRACTION_2 | NUM_ORDINAL_DOT;
|
||||
SetLetterVowel(tr, 'y');
|
||||
tr->langopts.spelling_stress = 1;
|
||||
tr->langopts.intonation_group = 3; // less intonation, don't raise pitch at comma
|
||||
}
|
||||
break;
|
||||
|
||||
case L('s', 'q'): // Albanian
|
||||
{
|
||||
static const short stress_lengths_sq[8] = { 150, 150, 180, 180, 0, 0, 300, 300 };
|
||||
|
||||
Reference in New Issue
Block a user