Files
espeak-ng/phsource/ph_cmn
T
Juho Hiltunen 1443c970cd cmn: search for dictionary matches instead of translating characters.
cmn (Mandarin chinese) has been broken since 4825905.

This fix makes mandarin behave more like Cantonese. Instead of
translating characters, we search for dictionary matches.

The functionality of normal vs Chao tones should be investigated more.
Looks like latin characters as pinyin still uses Chao tones whereas
the characters in cmn_list and cmn_listx do not.

See #1044 for discussion. See also #1028 and #1163.
2022-08-31 21:15:29 +03:00

534 lines
8.7 KiB
Plaintext

//====================================================
// Tone Numbers
// Note:
// For tones 1-5, both normal tones and Chao tones
// are defined
//====================================================
// tone: low level
phoneme 11
stress
Tone(12, 9, envelope/i_risefall, NULL)
endphoneme
phoneme 5
stress
Tone(12, 9, envelope/i_risefall, NULL)
endphoneme
phoneme 21 // tone: low fall
stress
Tone(20, 10, envelope/p_fall, NULL)
endphoneme
// tone: fall rise
phoneme 214
stress
Tone(18, 42, envelope/p_214, NULL)
endphoneme
phoneme 3
stress
Tone(18, 42, envelope/p_214, NULL)
endphoneme
phoneme 22 // tone: mid-low level
stress
Tone(22, 20, envelope/p_fall, NULL)
endphoneme
phoneme 33 // tone: mid level
stress
Tone(32, 30, envelope/p_fall, NULL)
endphoneme
// tone: mid rise
phoneme 35
stress
Tone(30, 50, envelope/p_rise, NULL)
endphoneme
phoneme 2
stress
Tone(30, 50, envelope/p_rise, NULL)
endphoneme
phoneme 44 // tone: mid-high level
stress
Tone(38, 41, envelope/p_rise, NULL)
endphoneme
// tone: high fall
phoneme 51
stress
Tone(50, 10, envelope/p_fall, NULL)
endphoneme
phoneme 4
stress
Tone(50, 10, envelope/p_fall, NULL)
endphoneme
phoneme 53 // tone: high fall
stress
Tone(50, 30, envelope/p_fall, NULL)
endphoneme
// tone: high level
phoneme 55
stress
Tone(55, 50, envelope/p_level, NULL)
endphoneme
phoneme 1
stress
Tone(55, 50, envelope/p_level, NULL)
endphoneme
//====================================================
// Consonants
//====================================================
phoneme n
vcd alv nas
Vowelout f1=2 f2=1700 -300 250 f3=-100 80 rms=20 brk
lengthmod 2
NextVowelStarts
VowelStart(n/n@)
VowelStart(n/na)
VowelStart(n/ne)
VowelStart(n/ni)
VowelStart(n/no)
VowelStart(n/nu)
EndSwitch
IF nextPh(isNotVowel) THEN
FMT(n/n_long_)
ENDIF
FMT(n/_n)
endphoneme
phoneme N
vcd vel nas
Vowelout f1=2 f2=1900 0 300 f3=400 80 len=50 rms=15 brk
lengthmod 7
NextVowelStarts
VowelStart(nn/nn@)
VowelStart(nn/nna)
VowelStart(nn/nne)
VowelStart(nn/nni)
VowelStart(nn/nno)
VowelStart(nn/nnu)
EndSwitch
IF prevPh(isPause) THEN
FMT(nn/_nn)
ELIF nextPh(isNotVowel) THEN
FMT(nn/nn2_)
ENDIF
endphoneme
phoneme l
liquid
lengthmod 2
CALL vowelstart_l
IF nextPhW(#i) THEN
VowelStart(l/li)
ENDIF
FMT(l/_l)
endphoneme
phoneme j
liquid pal
lengthmod 1
IF nextPh(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, -30)
FMT(j/_j)
ELSE
// no vowel follows
Vowelout len=70
FMT(j/j_)
ENDIF
endphoneme
phoneme p
vls blb stp
lengthmod 2
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
WAV(ustop/p_unasp)
endphoneme
phoneme ph
vls blb stp
lengthmod 2
Vowelin f1=0 f2=1000 -50 -100 f3=-200 80 amp=11
Vowelout f1=0 f2=1000 -500 -350 f3=-300 80 rms=22
WAV(ustop/p_asp)
endphoneme
phoneme f //not clear before some vowel
vls lbd frc
lengthmod 2
Vowelout f1=0 f2=1000 -500 -350 f3=-200 80
WAV(ufric/f)
endphoneme
phoneme t
vls alv stp
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80 rms=40
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
WAV(ustop/t_unasp2, 40)
endphoneme
phoneme th
vls alv stp
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
WAV(ustop/t_)
endphoneme
phoneme k
vls uvl stp
lengthmod 2
Vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
Vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
WAV(ustop/k_unasp_, 75)
endphoneme
phoneme kh
vls uvl stp
lengthmod 2
Vowelin f1=1 f2=1700 0 200 f3=-300 80 f4
Vowelout f1=1 f2=1700 0 200 f3=-300 80 f4 rms=30
WAV(ustop/k_asp, 80)
endphoneme
phoneme tS;
vls alp sib afr
ipa tɕ
lengthmod 2
Vowelin f1=0 f2=2700 400 600 f3=300 80
WAV(ustop/tsh_pzd_unasp)
endphoneme
phoneme tS;h
vls alp sib afr
ipa tɕh
lengthmod 2
Vowelin f1=0 f2=2700 400 600 f3=300 80
WAV(ustop/tsh_pzd, 80)
endphoneme
phoneme S;
vls pla frc sib
lengthmod 2
ipa ɕ
Vowelin f1=0 f2=2700 400 600 f3=300 80
WAV(ufric/sh_pzd2, 20)
endphoneme
phoneme s.
vls pla frc sib
lengthmod 3
Vowelin f1=0 f2=1800 -100 300 f3=-300 80
Vowelout f1=0 f2=1800 -100 300 f3=-300 80
IF nextPh(isPause2) THEN
WAV(ufric/sh_rfx, 50)
ENDIF
WAV(ufric/sh_rfx, 50) // quieter
endphoneme
phoneme ts
vls alv afr sib
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
WAV(ustop/ts_unasp, 70)
endphoneme
phoneme tsh
vls alv afr sib
lengthmod 2
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
WAV(ustop/ts, 60)
endphoneme
phoneme ts.
vls pla frc sib
lengthmod 3
Vowelin f1=0 f2=1800 -100 300 f3=-300 80
Vowelout f1=0 f2=1800 -100 300 f3=-300 80
WAV(ustop/ts_rfx_unasp)
endphoneme
phoneme ts.h
vls pla frc sib
lengthmod 3
Vowelin f1=0 f2=1800 -100 300 f3=-300 80
Vowelout f1=0 f2=1800 -100 300 f3=-300 80
WAV(ustop/ts_rfx)
endphoneme
//====================================================
// Vowels and Diphtnongs
//====================================================
phoneme N- // syllabic N
vwl starttype N endtype N
length 250
FMT(nn/nn2_)
endphoneme
phoneme a
vwl starttype #a endtype #a
length 250
IF nextPh(N) THEN
FMT(vwl_zh/a_n)
ENDIF
FMT(vowel/a)
endphoneme
phoneme A
vwl starttype #a endtype #a
length 250
IF nextPh(N) THEN
FMT(vowel/aa_2)
ENDIF
FMT(vowel/a_3)
endphoneme
phoneme ai
vwl starttype #a endtype #i
length 250
FMT(vdiph/ai_6)
endphoneme
phoneme Au
vwl starttype #a endtype #u
length 250
FMT(vwl_zh/aau)
endphoneme
phoneme @
vwl starttype #@ endtype #@
length 200
IF nextPh(N) THEN
FMT(vowel/@_bck)
ENDIF
FMT(vowel/3_2)
endphoneme
phoneme @r //tmp use V3_r
vwl starttype #@ endtype #@
length 350
FMT(vowelr/V3_r)
endphoneme
phoneme E
vwl starttype #e endtype #e
length 250
FMT(vowel/ee_2)
endphoneme
phoneme ei
vwl starttype #e endtype #i
length 250
FMT(vdiph2/ei_4)
endphoneme
phoneme i
vwl starttype #i endtype #i
length 250
IF nextPh(N) THEN
FMT(vowel/ii_2)
ENDIF
IF nextPh(n) THEN
FMT(vowel/ii_5)
ENDIF
FMT(vowel/i)
endphoneme
phoneme i[ //after ts tsh s
vwl starttype #i endtype #i
length 250
FMT(vowel/i#_7)
endphoneme
phoneme i. //after ts. ts.h s. z.
vwl starttype #i endtype #i
length 250
FMT(vowel/i#_6)
endphoneme
phoneme iA //try more before N
vwl starttype #i endtype #a
length 250
FMT(vwl_zh/iaa)
endphoneme
phoneme iAu
vwl starttype #i endtype #u
length 250
FMT(vwl_zh/iaau)
endphoneme
phoneme iE
vwl starttype #i endtype #e
length 250
FMT(vwl_zh/ie)
endphoneme
phoneme io
vwl starttype #i endtype #o
length 250
FMT(vdiph2/iioo)
endphoneme
phoneme iou
vwl starttype #i endtype #u
length 250
FMT(vwl_zh/iou)
endphoneme
phoneme o
vwl starttype #o endtype #o
length 250
IF nextPh(N) THEN
FMT(vnasal/oo_n2)
ENDIF
FMT(vdiph2/o_oo)
endphoneme
phoneme o-
vwl starttype #o endtype #o
length 250
FMT(vowel/8)
endphoneme
phoneme ou
vwl starttype #o endtype #u
length 250
FMT(vdiph/8u)
endphoneme
phoneme ong
vwl starttype #o endtype #o
length 500
FMT(vwl_zh/ong)
endphoneme
phoneme u //try more before N
vwl starttype #u endtype #u
length 250
IF nextPh(N) THEN
FMT(vnasal/u_n)
ENDIF
FMT(vowel/u_bck)
endphoneme
phoneme uA
vwl starttype #u endtype #a
length 250
FMT(vwl_zh/uaa)
endphoneme
phoneme ua
vwl starttype #u endtype #a
length 250
FMT(vdiph2/oa)
endphoneme
phoneme uai
vwl starttype #u endtype #i
length 511
FMT(vwl_zh/uai)
endphoneme
phoneme u@
vwl starttype #u endtype #@
length 230
FMT(vdiph2/o@)
endphoneme
phoneme uei
vwl starttype #u endtype #i
length 250
FMT(vwl_zh/uei)
endphoneme
phoneme uo
vwl starttype #u endtype #o
length 280
FMT(vwl_zh/uo)
endphoneme
phoneme y
vwl starttype #i endtype #u
length 250
IF nextPh(N) THEN
FMT(vowel/uu_3)
ENDIF
FMT(vowel/y_2)
endphoneme
phoneme yu //try more before N
vwl starttype #i endtype #u
length 250
FMT(vdiph2/yu)
endphoneme
phoneme y&
vwl starttype #i endtype #e
length 250
FMT(vwl_zh/y&)
endphoneme
phoneme yE //try more so not similar to iE
vwl starttype #i endtype #e
length 250
FMT(vwl_zh/yee)
endphoneme
phoneme y@
vwl starttype #i endtype #@
length 250
FMT(vdiph2/y@)
endphoneme
phoneme yi
vwl starttype #i endtype #i
length 250
FMT(vdiph/yi)
endphoneme