Browse Source

vi: modify Vietnamese phoneme rules and tone

master
Anh Hoang Nguyen 6 years ago
parent
commit
a3865a54b0
5 changed files with 207 additions and 86 deletions
  1. 18
    18
      dictsource/vi_list
  2. 13
    12
      dictsource/vi_rules
  3. 1
    1
      espeak-ng-data/lang/aav/vi
  4. BIN
      phsource/envelopes.png
  5. 175
    55
      phsource/ph_vietnam

+ 18
- 18
dictsource/vi_list View File

@@ -29,41 +29,41 @@ _2 h'a:I // hai
_3 _b'a: // ba
_4 _b'o3n // bốn
_5 n'am // năm
_6 s.'aU3 // sáu
_6 s'aU3 // sáu
_7 _b'aI4 // bảy
_8 t['a:3m // tám
_9 c'i3n // chín
_9 tSi3n // chín
_1X m'y@2j // mười
_2X h'a:I||m'y@7j // hai mươi
_3X _b'a:||m'y@7j // ba mươi
_4X _b'o3n||m'y@7j // bốn mươi
_5X n'am||m'y@7j // năm mươi
_6X s.'aU3||m'y@7j // sáu mươi
_6X s'aU3||m'y@7j // sáu mươi
_7X _b'aI4||m'y@7j // bảy mươi
_8X t['a:3m||m'y@7j // tám mươi
_9X c'i3n||m'y@7j // chín mươi
_9X tSi3n||m'y@7j // chín mươi

_21 h'a:I||m'y@7j||m'o3t[
_31 _b'a:||m'y@7j||m'o3t[
_41 _b'o3n||m'y@7j||m'o3t[
_51 n'am||m'y@7j||m'o3t[
_61 s.'aU3||m'y@7j||m'o3t[
_61 s'aU3||m'y@7j||m'o3t[
_71 _b'aI4||m'y@7j||m'o3t[
_81 t['a:3m||m'y@7j||m'o3t[
_91 c'i3n||m'y@7j||m'o3t[
_91 tSi3n||m'y@7j||m'o3t[

_25 h'a:I||m'y@7j||l'a7m
_35 _b'a:||m'y@7j||l'a7m
_45 _b'o3n||m'y@7j||l'a7m
_55 n'am||m'y@7j||l'a7m
_65 s.'aU3||m'y@7j||l'a7m
_65 s'aU3||m'y@7j||l'a7m
_75 _b'aI4||m'y@7j||l'a7m
_85 t['a:3m||m'y@7j||l'a7m
_95 c'i3n||m'y@7j||l'a7m
_95 tSi3n||m'y@7j||l'a7m

_0C cr'am // trăm
_0C tS'am // trăm
_0M1 N'a:2n // ngàn
_0M2 cr'i@6w // triệu
_0M2 tS'i@6w // triệu
_0M3 t['i4 // tỷ
_0and l,in^ // linh
_dpt _f,@I4_
@@ -71,14 +71,14 @@ _dpt _f,@I4_
// kí hiệu - symbols
~ J'@U3N'a:5
` J'@U3hw'i@2n
_! J'@U3c'@3mt'a:7n
_! J'@U3tS@3mt'a:7n
@ a:1k'O2N
# J'@U3t'a7N $max3
$ J'@U3_d'o1l'a:7
% f'@2ncr'a7m
% f'@2ntS'a7m
^ J'@U3m'u5
& J'@U3v,a:2
* J'@U3s.'a:U7 $max3
* J'@U3s'a:U7 $max3
_( m'@:4Nw'a6kh
_) _d'O3NNw'a6kh
_- Q'a:6cN'a:7N
@@ -91,16 +91,16 @@ _[ m'@:4Nw'a6khv'u@7N
_] _d'O3NNw'a6khv'u@7N
_| s'o4t'a4N
_\ s'o4f,a:I4
_: h'a:I1c'@3m
_; c'@3mf'@I4
_: h'a:I1tS@3m
_; tS@3mf'@I4
_' Nw'a6kh_d'@:7n
_“ Nw'a6khk'E3p
_, f'@I4
_. c'@3m
_/ s'o4cr'a:I3
_. tS@3m
_/ s'o4tS'a:I3
_< n^'O4h'@:7n
_> l'@:3nh'@:7n
_? h'OI4c'@3m
_? h'OI4tS@3m

// ?? found in festival wow_vi_ptn_phrasing.scm
bị $u

+ 13
- 12
dictsource/vi_rules View File

@@ -81,7 +81,7 @@ ỵ ỵ
//================================
.L01 t c ne nd k x s nt ch th me te le ce ny ry e o u re nch de p pe ph sh v ve ge r
.L02 n a
.L03 t ch nh
.L03 ch nh
.L04 a u ă â o ô á à ả ã ạ ù ú ủ ũ ụ ắ ằ ẳ ẵ ặ ấ ầ ẩ ẫ ậ ó ò ỏ õ ọ ố ồ ổ ỗ ộ ư ứ ừ ử ữ ự ơ ớ ờ ở ỡ ợ
.group b
b b
@@ -93,8 +93,8 @@ ỵ ỵ
.group c
c g //k
c (C _^_EN
c (_ kh
_) ch tS; // try [tS;] [tS] [c] c
c (_ c
_) ch tS // try [tS;] [tS] [c] c
?2 _) ch c
?1 _) ch c
ch (_ c
@@ -209,7 +209,7 @@ ỵ ỵ
.group k
_) k k
_) k g
_) kh x
//kh x
k (_ _^_EN
@@ -266,9 +266,9 @@ ỵ ỵ
.group q
q k
q g
q (_ kh
qu w //kw
qu gw //kw
@@ -286,7 +286,7 @@ ỵ ỵ
.group s
s s. // try [s.] [s] [S]
s s // try [s.] [s] [S]
_) sh _^_EN
@@ -390,7 +390,7 @@ ỵ ỵ
a (L01 _^_EN
ai (L02 _^_EN
a (@ _^_EN
a (L03 a
.group à
@@ -470,7 +470,7 @@ ỵ ỵ
.group ắ
ắ a3
ắk a3c
@@ -777,7 +777,7 @@ ỵ ỵ
oả o@4
oã o@5
oạ o@6
oo o@
oo O
oi OI
oì OI2
oí OI3
@@ -799,6 +799,7 @@ ỵ ỵ
oẳ o@4
oẵ o@5
oặ o@6
oc O#c
.group ò
ò O2
@@ -819,7 +820,7 @@ ỵ ỵ
óa o@3 //ó (A w3
óng O#3
óe o&3
óc O#3c
@@ -858,7 +859,7 @@ ỵ ỵ
ọa o@6 //ọ (A w6
ọng O#6
ọe o&6
ọc O#6c

+ 1
- 1
espeak-ng-data/lang/aav/vi View File

@@ -2,4 +2,4 @@ name Vietnamese (Northern)
language vi

words 1
pitch 80 118
pitch 100 180

BIN
phsource/envelopes.png View File


+ 175
- 55
phsource/ph_vietnam View File

@@ -6,44 +6,44 @@

phoneme 1 // ngang tone: level
stress
Tone(34,36, envelope/p_level, NULL) // 28 29
Tone(30, 28, envelope/p_level, NULL) // 28 29
endphoneme


phoneme 2 // huyền tone: low falling
stress
Tone(30, 8, envelope/p_fall, NULL) //20 8
Tone(20, 8, envelope/p_fall, NULL) //20 8
endphoneme


phoneme 3 // sắc Tone(rising
stress
Tone(30, 60, envelope/p_rise, NULL) // 30 60
Tone(30, 55, envelope/p_rise, NULL) // 30 60
endphoneme


phoneme 4 // hỏi Tone(curve (dipping rising)
stress
Tone(10, 55, envelope/p_fallrise, NULL) //33 31
Tone(10, 31, envelope/p_fallrise, NULL) //33 31
endphoneme


phoneme 5 // ngã tone: broken (creaking rising)
stress
Tone(28,58,envelope/p_214, envelope/vi_5amp) // 28,58 20 80
Tone(34, 60,envelope/p_214, envelope/vi_5amp) // 28,58 20 80
endphoneme


phoneme 6 // nặng Tone(drop (constricted)
stress
//length 150 // ignore because it make too short sound 75 // reduce the length of the vowel
Tone(25, 60, envelope/p_512, envelope/vi_6amp) //40 20
Tone(34, 10, envelope/p_512, envelope/vi_6amp) //40 20
endphoneme


phoneme 7 // Tone(1 (ngang) at end of clause
stress
Tone(40, 35, envelope/p_fall, NULL) //40 20
Tone(30, 28, envelope/p_fall, NULL) //40 20
endphoneme


@@ -54,16 +54,22 @@ endphoneme

phoneme a
vwl starttype #@ endtype #@
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/a_4) //a_4)
endphoneme

phoneme a:
vwl starttype #a endtype #a
IF nextPh(n^) OR nextPh(c) THEN
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd)THEN
length 240
ELIF nextPh(n^) OR nextPh(c) THEN
length 100
ELSE
length 140 //280
length 140 //200
ENDIF
FMT(vowel/a_8)
endphoneme
@@ -71,13 +77,21 @@ endphoneme

phoneme E
vwl starttype #e endtype #e
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/e_e) //ee_3)
endphoneme

phoneme e
vwl starttype #e endtype #e
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/e)
endphoneme

@@ -88,6 +102,9 @@ phoneme i
IF prevPhW(w) THEN
VowelStart(w/wi)
ENDIF
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ENDIF
IF nextPh(n^) OR nextPh(c) THEN
length 100
FMT(vnasal/ii_n)
@@ -102,16 +119,32 @@ phoneme O
vwl starttype #o endtype #o
IF nextPh(kh) OR nextPh(N) THEN
length 80
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/o_oo) //vowel/oo)
endphoneme

phoneme O+
vwl starttype #o endtype #o
IF nextPh(kh) OR nextPh(N) THEN
length 80
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/o) //vowel/oo)
endphoneme

phoneme o
vwl starttype #o endtype #o
IF nextPh(kh) OR nextPh(N) THEN
length 110
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
@@ -123,6 +156,8 @@ phoneme u
vwl starttype #u endtype #u
IF nextPh(kh) OR nextPh(N) THEN // hear as ung sound
length 120
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
@@ -133,8 +168,10 @@ phoneme y
vwl starttype #u endtype #u
IF nextPh(kh) OR nextPh(N) THEN
length 120
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 180
length 140
ENDIF
FMT(vowel/u#_5)
endphoneme
@@ -145,6 +182,8 @@ phoneme @
vwl starttype #@ endtype #a
IF nextPh(kh) OR nextPh(N) OR nextPh(n^) OR nextPh(c) THEN
length 120
ELIF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
@@ -154,7 +193,11 @@ endphoneme

phoneme @:
vwl starttype #@ endtype #@
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/@_2)
endphoneme

@@ -165,69 +208,81 @@ endphoneme

phoneme aI
vwl starttype #a endtype #i
length 140 //250
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/&i_2)
endphoneme


phoneme a:I
vwl starttype #a endtype #i
length 200 //250
length 240 //250
FMT(vdiph/ai)
endphoneme


phoneme @I
vwl starttype #@ endtype #i
length 200 //250
length 240 //250
FMT(vdiph/@i)
endphoneme


phoneme @:I
vwl starttype #@ endtype #i
length 200 //250
length 240 //250
FMT(vdiph/y#i)
endphoneme


phoneme eI
vwl starttype #e endtype #i
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/ei)
endphoneme


phoneme EI
vwl starttype #e endtype #i
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/eei)
endphoneme


phoneme OI
vwl starttype #o endtype #i
length 200
length 240
FMT(vdiph/ooi_4)
endphoneme


phoneme oI
vwl starttype #o endtype #i
length 200
length 240
FMT(vdiph/oi)
endphoneme


phoneme uI
vwl starttype #u endtype #i
length 200
length 240
FMT(vdiph/ui)
endphoneme

phoneme yI
vwl starttype #u endtype #i
length 200
length 240
FMT(vdiph/u-i)
endphoneme

@@ -236,46 +291,74 @@ endphoneme

phoneme aU
vwl starttype #a endtype #u
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/aau_4)
endphoneme


phoneme a:U
vwl starttype #a endtype #u
length 150 //270
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/au)
endphoneme


phoneme eU
vwl starttype #e endtype #u
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/eu)
endphoneme


phoneme EU
vwl starttype #e endtype #u
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/eeu)
endphoneme

phoneme iU
vwl starttype #i endtype #u
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/iu)
endphoneme

phoneme @U
vwl starttype #@ endtype #u
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/@u_3)
endphoneme

phoneme @:U
vwl starttype #@ endtype #u
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/@u)
endphoneme

@@ -283,19 +366,31 @@ endphoneme

phoneme i@
vwl starttype #i endtype #@
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/ii@_3)
endphoneme

phoneme y@
vwl starttype #i endtype #@
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/y-y#)
endphoneme

phoneme u@
vwl starttype #u endtype #@
length 100 //200
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/uu@)
endphoneme

@@ -303,38 +398,62 @@ endphoneme

phoneme o# // ông
vwl starttype #o endtype #o
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vnasal/a#u_n)
endphoneme

phoneme O# // ong
vwl starttype #o endtype #o
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vnasal/&u_n)
endphoneme


phoneme o@
vwl starttype #o endtype #a
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph2/oa)
endphoneme

phoneme o&
vwl starttype #o endtype #o
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vietnam/oe)
endphoneme

phoneme iE // iê : viết, giệc
vwl starttype #i endtype #e
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vietnam/ie_2)
endphoneme

phoneme Oi // oai sound
vwl starttype #o endtype #i
length 140
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/ooi_3)
endphoneme

@@ -342,30 +461,40 @@ endphoneme

phoneme O- // ôi southern sound
vwl starttype #o endtype #i
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vnasal/oi_n)
endphoneme

phoneme @- // ơi southern sound
vwl starttype #o endtype #i
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vdiph/@i_3)
endphoneme

phoneme u- // u southern sound
vwl starttype #u endtype #u
length 150
IF thisPh(isFirstVowel) AND thisPh(isFinalVowel) AND thisPh(isWordEnd) THEN
length 240
ELSE
length 140
ENDIF
FMT(vowel/u_3,70)
endphoneme



phoneme kh
vls vel frc
lengthmod 3
Vowelin f1=0 f2=2300 200 400 f3=200 80 len=30
Vowelout f1=0 f2=2300 300 400 f3=200 80 rms=20
WAV(vietnam/_c,5) //ufric/x, 50)
WAV(ustop/k_unasp) //ufric/x, 50)
endphoneme


@@ -433,15 +562,6 @@ phoneme p
endphoneme

phoneme n
vcd alv nas
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11 brk len=15
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk len=15
lengthmod 4
length 75
FMT(n/nr_)
endphoneme

phoneme t[ // dental variant of /t/
vls dnt stp
voicingswitch d[

Loading…
Cancel
Save