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

@@ -477,6 +477,7 @@ dz $abbrev
eest $abbrev
est $abbrev
eur 'euR
irir 'iR_!'iR
lnnk $abbrev $pause
lp $abbrev
ls $abbrev

+ 23
- 13
dictsource/lv_rules View File

@@ -66,7 +66,7 @@

// Default rules for o with succeeding 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)
.L43 lg ng rb zn ļš ss // o postfixes
.L44 gļ kļ šņ jā // uo postfixes
@@ -144,6 +144,7 @@
.group ā
ā a:
ā (A a:_!
C) ā (k a::

.group b
b b
@@ -174,8 +175,7 @@
// international consonants
e (JL41+ 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
e (Cinā e
@@ -223,7 +223,7 @@
// specific words ----------------------------------------------------------------- //
b) e (dL82L05_ e // bedre
_b) e (t_ e
_b) e (z e
_b) e (z+ e
_b) e (z_ e
_C) e (_ e // re, te, ve
c) e (tur e
@@ -232,6 +232,7 @@
d) ebe (t ebe
_d) e (c e
_d) e (poz e
d) e (taļ e
_dr) e (nL04_ e
_) e (dgarL01_ e // Edgars
elem elem
@@ -251,6 +252,8 @@
int) ere (L83 eRe
_j) e (b_ e
_j) e (l_ e
e (soš e
e (sot e
_L20) e (sam_+ _!e // esam
_L20) e (sat_+ _!e // esat
_L20) e (si_ _!e // esi
@@ -263,6 +266,7 @@
_n) e (@+ e
_n) ere (tL04_ ERE // Nereta
n) e (rv E
ns) e (r e
p) e (rs e
pr) e (cL52z e
pr) e (L71L05_ e // prece
@@ -305,11 +309,8 @@

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

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

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

.group z
z z

+ 191
- 137
phsource/ph_latvian View File

@@ -1,11 +1,3 @@
// 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
vwl starttype #a endtype #a
length 130
@@ -171,12 +163,23 @@ phoneme tS
WAV(ustop/tsh,40)
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

phoneme h // more quiet version of standard h
@@ -194,49 +197,33 @@ phoneme h // more quiet version of standard h
WAV(h/ho, 20)
ELIF nextPh(#u) THEN
WAV(h/hu, 20)
ELIF nextPh(isPause) THEN
WAV(h/h_, 40) // louder for foreign words
ENDIF
WAV(h/h_, 20) // no vowel following
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
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
WAV(ustop/p_unasp, 120)
endphoneme

phoneme k
@@ -263,25 +250,169 @@ phoneme c
WAV(ustop/c, 80)
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
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
FMT(d/d_, 120) addWav(x/d_,110)
WAV(ustop/p_unasp_, 80)
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

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
vcd alv frc sib
@@ -330,87 +461,10 @@ endphoneme

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