Browse Source

Latvian language improvements

master
Valdis Vitolins 7 years ago
parent
commit
523777a0b9
3 changed files with 215 additions and 150 deletions
  1. 1
    0
      dictsource/lv_list
  2. 23
    13
      dictsource/lv_rules
  3. 191
    137
      phsource/ph_latvian

+ 1
- 0
dictsource/lv_list View File

eest $abbrev eest $abbrev
est $abbrev est $abbrev
eur 'euR eur 'euR
irir 'iR_!'iR
lnnk $abbrev $pause lnnk $abbrev $pause
lp $abbrev lp $abbrev
ls $abbrev ls $abbrev

+ 23
- 13
dictsource/lv_rules View File



// Default rules for o with succeeding consonants // Default rules for o with succeeding consonants
.L40 č ģ ķ ļ ņ ŗ š ž // uo indicators — o is spelled as uo in words with Latvian soft consonants .L40 č ģ ķ ļ ņ ŗ š ž // uo indicators — o is spelled as uo in words with Latvian soft consonants
.L41 eo f h ḩ io iē y q w x // o indicators — o is spelled as ȯ in words with Latin letters, also narrowers of e/ē
.L41 eo f h ḩ ia io iē y q w x // o indicators — o is spelled as ȯ in words with Latin letters, also narrowers of e/ē
.L42 e i o ng // o prefixes (no a, because of sao.., pao... where o is uo) .L42 e i o ng // o prefixes (no a, because of sao.., pao... where o is uo)
.L43 lg ng rb zn ļš ss // o postfixes .L43 lg ng rb zn ļš ss // o postfixes
.L44 gļ kļ šņ jā // uo postfixes .L44 gļ kļ šņ jā // uo postfixes
.group ā .group ā
ā a: ā a:
ā (A a:_! ā (A a:_!
C) ā (k a::


.group b .group b
b b b b
// international consonants // international consonants
e (JL41+ e e (JL41+ e
e (L41+++ e e (L41+++ e
L41) e (@ e // narrow only if there is another syllable for ending
L41J) e (@+ e
L41J) e (+ e


// narrowing vowels follow // narrowing vowels follow
e (Cinā e e (Cinā e
// specific words ----------------------------------------------------------------- // // specific words ----------------------------------------------------------------- //
b) e (dL82L05_ e // bedre b) e (dL82L05_ e // bedre
_b) e (t_ e _b) e (t_ e
_b) e (z e
_b) e (z+ e
_b) e (z_ e _b) e (z_ e
_C) e (_ e // re, te, ve _C) e (_ e // re, te, ve
c) e (tur e c) e (tur e
d) ebe (t ebe d) ebe (t ebe
_d) e (c e _d) e (c e
_d) e (poz e _d) e (poz e
d) e (taļ e
_dr) e (nL04_ e _dr) e (nL04_ e
_) e (dgarL01_ e // Edgars _) e (dgarL01_ e // Edgars
elem elem elem elem
int) ere (L83 eRe int) ere (L83 eRe
_j) e (b_ e _j) e (b_ e
_j) e (l_ e _j) e (l_ e
e (soš e
e (sot e
_L20) e (sam_+ _!e // esam _L20) e (sam_+ _!e // esam
_L20) e (sat_+ _!e // esat _L20) e (sat_+ _!e // esat
_L20) e (si_ _!e // esi _L20) e (si_ _!e // esi
_n) e (@+ e _n) e (@+ e
_n) ere (tL04_ ERE // Nereta _n) ere (tL04_ ERE // Nereta
n) e (rv E n) e (rv E
ns) e (r e
p) e (rs e p) e (rs e
pr) e (cL52z e pr) e (cL52z e
pr) e (L71L05_ e // prece pr) e (L71L05_ e // prece


// narrow ē ---------------------------------------------------------------------- // // narrow ē ---------------------------------------------------------------------- //
// narrowing international consonants // narrowing international consonants
ē (L41+ e:
ē (JL41+ e: ē (JL41+ e:
ē (L41+ e:
L41) ē (@+ e: // narrow only if there is another syllable for ending
L41J) ē (@ e:
L41J) ē (++ e:
// narrowing vowels follow // narrowing vowels follow
ē (CCCCL21 e: ē (CCCCL21 e:
ē (CCCL21 e: ē (CCCL21 e:
dz) ē (t e: dz) ē (t e:
ēcē e:tse: ēcē e:tse:
ēdē e:de: ēdē e:de:
L10) ē (du_ e:
ē (kL04_+ E: // ēka ē (kL04_+ E: // ēka
ē (L86L13_ e: // ēst ē (L86L13_ e: // ēst
ē (rkšķ e: ē (rkšķ e:
gr) ē (kL01_ E: gr) ē (kL01_ E:
izp) ē (t e: izp) ē (t e:
_kāp) ē (c_ e: // kāpēc _kāp) ē (c_ e: // kāpēc
kr) ē (t+ e:
ķ) ē (dL05_ e: // ķēde
_l) ē (L83+ e: // lēst _l) ē (L83+ e: // lēst
m) ē (L77L05 e:
m) ēne (L83 e:ne m) ēne (L83 e:ne
m) ē (rķ e: m) ē (rķ e:
_m) ē (s_ e: // mēs _m) ē (s_ e: // mēs
_n) ē (_ e: _n) ē (_ e:
ot) ē (k+ e:
_p) ē (c+ e: _p) ē (c+ e:
_p) ē (rL01_ e: // pērs _p) ē (rL01_ e: // pērs
p) ēte (r e:te // Pēter.. p) ēte (r e:te // Pēter..
.group m .group m
m m m m
C) m (C m- // more voiced variant between consonants C) m (C m- // more voiced variant between consonants
mm >m:
mm >m>


.group n .group n
n n n n
dil) o (L80 uo dil) o (L80 uo
dinam) o o: dinam) o o:
disp) o o disp) o o
eg) o o>
_eg) o o>
eir) o o eir) o o
_ek) o o _ek) o o
eks) o o eks) o o
j) odo odo j) odo odo
_kl) od (L01_ o:d // Klods _kl) od (L01_ o:d // Klods
k) od (L01_ o:d // ..kods k) od (L01_ o:d // ..kods
_k) od (L05_ uod // kode
_k) od (L05_ uo`d // kode
k) od (L51 od k) od (L51 od
k) odol uoduol k) odol uoduol
_kum) od (L05_ uod // kumode _kum) od (L05_ uod // kumode
k) op (ē_ op // ..kopē k) op (ē_ op // ..kopē
k) op (ij op // ..kopij.. k) op (ij op // ..kopij..
k) op (j uop // ..kopj.. k) op (j uop // ..kopj..
k) op (L65+ uop // ..kuop..
k) op (L04_+ uop // ..kopa k) op (L04_+ uop // ..kopa
k) opo uopuo k) opo uopuo
k) op (pr uop // ..koppr.. k) op (pr uop // ..koppr..
_) op (erL04_++++ o:p // opera _) op (erL04_++++ o:p // opera
op (er++++ op op (er++++ op
op (iā op op (iā op
@) op (L01_+ o:p // ..ops
@) op (L01_ o:p // ..ops
op (o op op (o op
op (tiL67 op op (tiL67 op
op (tim op op (tim op
.group ov .group ov
_k) ov (ārnL02_ uov // kovārnis _k) ov (ārnL02_ uov // kovārnis
k) ov ov k) ov ov
n) ov (ad uov
n) ov (at ov n) ov (at ov
n) ov (āci ov n) ov (āci ov
n) ov (elL05_ ov // novele n) ov (elL05_ ov // novele
_j) oz (a_ uoz // joza _j) oz (a_ uoz // joza
kl) oz (et oz kl) oz (et oz
k) ozlov ozlov k) ozlov ozlov
l) oz (ung oz
_m) oz (L03_ o:z // Mozus _m) oz (L03_ o:z // Mozus
_n) oz uoz _n) oz uoz
oz (L01_ o:z // ..ozs oz (L01_ o:z // ..ozs
_) vi (stk v'i // vistk.. _) vi (stk v'i // vistk..
_) vi (stL04_ v'i // vista _) vi (stL04_ v'i // vista
_) vi (sum v'i // visum _) vi (sum v'i // visum
_) vi (sur_ v'i // visur
_) vi (sur v'i // visur
_) vi (sval v'i // Visval.. _) vi (sval v'i // Visval..
_) vi (svar v'i // Visvar.. _) vi (svar v'i // Visvar..
_) vis v%is (P3 _) vis v%is (P3


.group y .group y
y y // y is used instead of simple "i", to distinguish them in writing y y // y is used instead of simple "i", to distinguish them in writing
y (A y_|


.group z .group z
z z z z

+ 191
- 137
phsource/ph_latvian View File

// IF thisPh(isStressed) THEN
// FMT(vowel/..., 100)
// ELIF thisPh(isDiminished) AND NOT prevVowel(isStressed) THEN
// FMT(vowel/..., 50)
// ELSE
// FMT(vowel/..., 75)
// ENDIF

phoneme a phoneme a
vwl starttype #a endtype #a vwl starttype #a endtype #a
length 130 length 130
WAV(ustop/tsh,40) WAV(ustop/tsh,40)
endphoneme endphoneme


phoneme n- // more voiced variant of n
vwl starttype #a endtype #a
ipa nU+0329
lengthmod 4
length 120
FMT(n/n-syl)
phoneme D // louder and shorter version of d
vcd alv stp
voicingswitch t
length 10
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 endphoneme


phoneme h // more quiet version of standard h phoneme h // more quiet version of standard h
WAV(h/ho, 20) WAV(h/ho, 20)
ELIF nextPh(#u) THEN ELIF nextPh(#u) THEN
WAV(h/hu, 20) WAV(h/hu, 20)
ELIF nextPh(isPause) THEN
WAV(h/h_, 40) // louder for foreign words
ENDIF ENDIF
WAV(h/h_, 20) // no vowel following WAV(h/h_, 20) // no vowel following
endphoneme endphoneme


phoneme R // Latvian hard r
liquid trl
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 r // Latvian soft r
liquid trl
lengthmod 6
Vowelin f1=0 f2=1700 -300 300 f3=-300 80
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
FMT(j/j_) addWav(r3/r_trill.wav, 25)
endphoneme
phoneme j // **y**es
liquid pal starttype #i


phoneme t
vls alv stp //lengthenstop
lengthmod 1
voicingswitch d
IF nextPh(isPause2) THEN
WAV(ustop/t_dnt, 40)
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, 70) // In difference with English, vowel is lengthened, not shortened
ELSE
Vowelout len=127 // no vowel follows
FMT(j/xj)
ENDIF ENDIF
WAV(ustop/t_dnt, 50)
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)
IF prevPh(isPause) THEN
FMT(j/_j)
ENDIF ENDIF
WAV(ustop/p_unasp, 120)
endphoneme endphoneme


phoneme k phoneme k
WAV(ustop/c, 80) WAV(ustop/c, 80)
endphoneme endphoneme


phoneme D // louder and shorter version of d
vcd alv stp
voicingswitch t
length 10
lengthmod 5
Vowelin f1=1 f2=1700 -300 300 f3=-100 80
Vowelout f1=2 f2=1700 -300 300 f3=-100 80 brk
phoneme l
liquid


IF PreVoicing THEN
FMT(d/xd, 110)
IF nextPh(isNotVowel) THEN
ChangePhoneme(l/)
ENDIF

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, 30) // FIXME
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) // double l, make it longer
ENDIF

FMT(l/l)
endphoneme

phoneme l^ // Latvian ļ, customized from standard l^
liquid
ipa ʎ
lengthmod 7
Vowelout len=60 lenadd rate
length 100

NextVowelStarts
VowelStart(l^/j2@)
VowelStart(l^/j2a)
VowelStart(l^/j2e)
VowelStart(l^/j2i)
VowelStart(l^/j2o)
VowelStart(l^/j2u)
EndSwitch

IF prevPh(isPause) THEN
FMT(l^/_l^)
ELSEIF nextPh(isPause) THEN
FMT(l^/l^_)
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 ENDIF
endphoneme


phoneme n- // more voiced variant of n
vwl starttype #a endtype #a
ipa nU+0329
lengthmod 4
length 120
FMT(n/n-syl)
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 IF nextPh(isPause2) THEN
FMT(d/d_, 120) addWav(x/d_,110)
WAV(ustop/p_unasp_, 80)
ENDIF ENDIF
IF nextPh(l) THEN
WAV(ustop/pl)
ENDIF
WAV(ustop/p_unasp, 120)
endphoneme


FMT(d/d, 110) addWav(x/d,110)
phoneme R // Latvian hard r
liquid trl
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 r // Latvian soft r
liquid trl
lengthmod 6
Vowelin f1=0 f2=1700 -300 300 f3=-300 80
Vowelout f1=2 f2=1700 -300 300 f3=-300 80 brk
FMT(j/j_) addWav(r3/r_trill.wav, 25)
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 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 z` // Shortened version of z for diphthong dz phoneme z` // Shortened version of z for diphthong dz
vcd alv frc sib vcd alv frc sib


phoneme } // Tiny, 5ms non-linked pause (used between phonemes in word) phoneme } // Tiny, 5ms non-linked pause (used between phonemes in word)
pause pause
// starttype _ endtype _
// lengthmod 1
nolink nolink
length 5 length 5
endphoneme 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 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, 70) // 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 l
liquid

IF nextPh(isNotVowel) THEN
ChangePhoneme(l/)
ENDIF

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, 30) // FIXME
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) // double l, make it longer
ENDIF

FMT(l/l)
endphoneme







Loading…
Cancel
Save