mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 21:39:47 +00:00
Switch to Portuguese /&~/ for <v>. Use aveolar /d/ instead of dental /d[/. The base phonemes file defines alveolar /d/ with the definition for a dental /d[/ ????
474 lines
9.0 KiB
Plaintext
474 lines
9.0 KiB
Plaintext
//*******************************************************************
|
||
// TONES
|
||
//*******************************************************************
|
||
|
||
//*******************************************************************
|
||
// REFERENCE MATERIALS
|
||
//*******************************************************************
|
||
// Collaborative Documentation and Revitalization of Cherokee Tone
|
||
// https://scholarspace.manoa.hawaii.edu/bitstream/handle/10125/24630/herrick.pdf
|
||
// Tones fall within a range of 80–140 H (pg 21, footnote)
|
||
// the mid tone (2) starts at 104 Hz (P1) and falls approximately 2 Hz at of the next four points ending at 96 Hz at P5.
|
||
//
|
||
// Building Tone Resources for Second Language Learners from Phonetic Documentation
|
||
// https://scholarspace.manoa.hawaii.edu/bitstream/10125/24737/hirata-edds_herrick.pdf
|
||
//
|
||
// Pitch contours taken from Praat chart, pg 295
|
||
//
|
||
// (¹) low fall: 106, 102, 97, 92, 88
|
||
// (²) low/mid: 104, 100, 98, 97, 96
|
||
// (³) high: 108, 109, 110, 111, 112
|
||
// (⁴) super high: 109, 113, 118, 122, 127
|
||
// (²³) rising: 97, 98, 101, 104, 109
|
||
// (³²) falling: 122, 120, 115, 106, 97
|
||
|
||
// A REFERENCE GRAMMAR OF OKLAHOMA CHEROKEE (2008)
|
||
// Short vowels preceding /h/ are devoiced, pg 45 (how to do this espeak-ng?)
|
||
// Word final vowels are nasalized
|
||
// Vowels are nasalized after a nasal consonant
|
||
// Vowels are either long or short; a long vowel takes
|
||
// approximately twice as long to pronounce as its
|
||
// short counterpart., pg 46
|
||
|
||
//int pitch1 = 0;
|
||
//int pitch2 = 0;
|
||
//int pitch_env = 0;
|
||
//int amp_env = 0;
|
||
//IF (pitch1 >= pitch2) the pitch values get swapped (???)
|
||
|
||
phoneme 1 // low fall (¹), long vowels only
|
||
stress
|
||
ipa ˨˩
|
||
Tone(28, 7, envelope/chr_fall21, NULL) //need a pitch contour of 106-88 for a
|
||
endphoneme
|
||
|
||
phoneme 2 // low (²)
|
||
stress
|
||
ipa ˨
|
||
Tone(27, 16, envelope/chr_level2, NULL) //need a pitch contour of 104-96 for a
|
||
endphoneme
|
||
|
||
phoneme 23 // rising (²³)
|
||
stress
|
||
ipa ˨˧
|
||
Tone(16, 30, envelope/chr_rise23, NULL) //need a pitch contour of 97-109 for a
|
||
endphoneme
|
||
|
||
phoneme 32 // falling (³²)
|
||
stress
|
||
ipa ˧˨
|
||
Tone(45, 15, envelope/chr_fall32, NULL) //need a pitch contour of 122-97 for a
|
||
endphoneme
|
||
|
||
phoneme 3 // high (³)
|
||
stress
|
||
ipa ˧
|
||
//Tone(109, 116, envelope/p_rise, NULL) //need a pitch contour of 108-112 for a
|
||
Tone(29, 35, envelope/chr_level3, NULL) //need a pitch contour of 108-112 for a
|
||
endphoneme
|
||
|
||
phoneme 4 // extra high rise (⁴)
|
||
stress
|
||
ipa ˧˦
|
||
Tone(29, 52, envelope/chr_rise4, NULL) //need a pitch contour of 109-127 for a
|
||
endphoneme
|
||
|
||
phoneme 43 // extra high fall (⁴³) - end of word tone
|
||
stress
|
||
ipa ˦˧
|
||
//need a pitch contour of 122-75 for a~
|
||
Tone(44, 0, envelope/chr_fall43, NULL)
|
||
endphoneme
|
||
|
||
//from phonemes
|
||
phoneme : // lengthen previous vowel by "length"
|
||
virtual
|
||
length 300
|
||
endphoneme
|
||
|
||
phoneme 0
|
||
vwl starttype #o endtype #o
|
||
length 300
|
||
FMT(vowel/0_3)
|
||
endphoneme
|
||
|
||
phoneme 0`
|
||
vwl starttype #o endtype #o
|
||
length 100
|
||
FMT(vowel/0_3)
|
||
endphoneme
|
||
|
||
phoneme 0~
|
||
vwl starttype #o endtype #o
|
||
length 300
|
||
FMT(vnasal/aa_n4)
|
||
endphoneme
|
||
|
||
phoneme 0~`
|
||
vwl starttype #o endtype #o
|
||
length 100
|
||
FMT(vnasal/aa_n4)
|
||
endphoneme
|
||
|
||
phoneme e
|
||
vwl starttype #e endtype #e
|
||
length 300
|
||
FMT(vowel/e_mid)
|
||
endphoneme
|
||
|
||
phoneme e`
|
||
vwl starttype #e endtype #e
|
||
length 100
|
||
FMT(vowel/e_mid)
|
||
endphoneme
|
||
|
||
phoneme e~
|
||
vwl starttype #e endtype #e
|
||
length 300
|
||
FMT(vnasal/ee_n2)
|
||
endphoneme
|
||
|
||
phoneme e~`
|
||
vwl starttype #e endtype #e
|
||
length 100
|
||
FMT(vnasal/ee_n2)
|
||
endphoneme
|
||
|
||
phoneme i
|
||
vwl starttype #i endtype #i
|
||
length 300
|
||
//IfNextVowelAppend(;)
|
||
FMT(vowel/i)
|
||
endphoneme
|
||
|
||
phoneme i`
|
||
vwl starttype #i endtype #i
|
||
length 100
|
||
//IfNextVowelAppend(;)
|
||
FMT(vowel/i)
|
||
endphoneme
|
||
|
||
phoneme i~
|
||
vwl starttype #i endtype #i
|
||
length 300
|
||
//IfNextVowelAppend(;)
|
||
FMT(vnasal/i_n)
|
||
endphoneme
|
||
|
||
phoneme i~`
|
||
vwl starttype #i endtype #i
|
||
length 100
|
||
//IfNextVowelAppend(;)
|
||
FMT(vnasal/i_n)
|
||
endphoneme
|
||
|
||
// o, ọ
|
||
phoneme o
|
||
vwl starttype #o endtype #o
|
||
length 300
|
||
FMT(vowel/o)
|
||
endphoneme
|
||
|
||
phoneme o`
|
||
vwl starttype #o endtype #o
|
||
length 100
|
||
FMT(vowel/o)
|
||
endphoneme
|
||
|
||
// o, ọ, final word vowel
|
||
phoneme o~
|
||
vwl starttype #o endtype #o
|
||
length 300
|
||
FMT(vnasal/o_n)
|
||
endphoneme
|
||
|
||
phoneme o~`
|
||
vwl starttype #o endtype #o
|
||
|
||
length 100
|
||
FMT(vnasal/o_n)
|
||
endphoneme
|
||
|
||
// u, ụ
|
||
//from ph_base2
|
||
phoneme u
|
||
vwl starttype #u endtype #u
|
||
length 300
|
||
FMT(vowel/u_bck)
|
||
endphoneme
|
||
|
||
phoneme u`
|
||
vwl starttype #u endtype #u
|
||
length 100
|
||
FMT(vowel/u_bck)
|
||
endphoneme
|
||
|
||
// u, ụ, final word vowel
|
||
phoneme u~
|
||
vwl starttype #u endtype #u
|
||
length 300
|
||
FMT(vnasal/u_n)
|
||
endphoneme
|
||
|
||
phoneme u~`
|
||
vwl starttype #u endtype #u
|
||
length 100
|
||
FMT(vnasal/u_n)
|
||
endphoneme
|
||
|
||
//ṿ, v
|
||
phoneme V~
|
||
vwl lng starttype #@ endtype #@
|
||
// vwl lng starttype #@ endtype #@
|
||
// length 300
|
||
// FMT(vnasal/V_n, 100)
|
||
ChangePhoneme(&~)
|
||
endphoneme
|
||
|
||
phoneme &~
|
||
vwl starttype #@ endtype #@
|
||
ipa ɐU+0303
|
||
length 180
|
||
IF thisPh(isFinalVowel) THEN
|
||
FMT(vnasal/a#_n2)
|
||
ELSE
|
||
FMT(vnasal/a#_n)
|
||
ENDIF
|
||
endphoneme
|
||
|
||
phoneme V~`
|
||
vwl lng starttype #@ endtype #@
|
||
length 100
|
||
FMT(vnasal/V_n)
|
||
endphoneme
|
||
|
||
phoneme h
|
||
vls glt apr
|
||
ipa h
|
||
|
||
IF prevPhW(isVowel) AND nextPhW(isNotVowel) THEN
|
||
length 25
|
||
lengthmod 1
|
||
ENDIF
|
||
|
||
IF nextPhW(#@) THEN
|
||
length 50
|
||
WAV(h/h@, 70)
|
||
ELIF nextPhW(#a) THEN
|
||
WAV(h/ha)
|
||
ELIF nextPhW(#e) THEN
|
||
length 60
|
||
WAV(h/he, 75)
|
||
ELIF nextPhW(#i) THEN
|
||
length 75
|
||
WAV(h/hi)
|
||
ELIF nextPhW(#o) THEN
|
||
length 75
|
||
WAV(h/ho)
|
||
ELIF nextPhW(#u) THEN
|
||
length 80
|
||
WAV(h/hu)
|
||
ELSE
|
||
length 60
|
||
WAV(h/h_) // no vowel following
|
||
ENDIF
|
||
endphoneme
|
||
|
||
phoneme h`
|
||
vls glt apr
|
||
ipa h
|
||
length 10
|
||
WAV(h/h_) // no vowel following
|
||
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
|
||
|
||
IF nextPh(isPause) THEN
|
||
WAV(ufric/s_)
|
||
ELIF nextPh(p) OR nextPh(t) OR nextPh(k) THEN
|
||
WAV(ufric/s!)
|
||
ENDIF
|
||
WAV(ufric/s)
|
||
endphoneme
|
||
|
||
phoneme g
|
||
vcd vel stp
|
||
voicingswitch k
|
||
lengthmod 5
|
||
Vowelin f1=2 f2=2300 200 300 f3=-300 80
|
||
Vowelout f1=2 f2=2300 250 300 f3=-300 80 brk
|
||
|
||
// IF PreVoicing THEN
|
||
//FMT(g/xg)
|
||
//ENDIF
|
||
|
||
IF nextPh(isPause2) THEN
|
||
//addWav(ustop/k_)
|
||
FMT(g/g_) addWav(ustop/k_)
|
||
//addWav(x/g_)
|
||
ELSE
|
||
//addWav(ustop/k_asp)
|
||
FMT(g/g) addWav(ustop/k_asp)
|
||
//addWav(x/g)
|
||
ENDIF
|
||
|
||
endphoneme
|
||
|
||
phoneme t
|
||
vls alv stp
|
||
voicingswitch d
|
||
lengthmod 2
|
||
Vowelin f1=0 f2=1700 -300 300 f3=-100 80
|
||
Vowelout f1=0 f2=1700 -300 250 f3=-100 80 rms=20
|
||
|
||
IF nextPh(isPause2) THEN
|
||
WAV(ustop/t_)
|
||
ELIF nextPh(r) OR nextPh(R) OR nextPh(R2) THEN
|
||
WAV(ustop/tr)
|
||
ELIF nextPh(@-) THEN
|
||
WAV(ustop/t_dnt, 50)
|
||
ENDIF
|
||
WAV(ustop/t, 90)
|
||
endphoneme
|
||
|
||
phoneme d
|
||
vcd alv stp
|
||
voicingswitch t
|
||
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)
|
||
ENDIF
|
||
|
||
IF nextPh(isPause2) THEN
|
||
FMT(d/d_) addWav(x/d_)
|
||
// ELIF nextPh(r) THEN
|
||
// FMT(d/dr) addWav(x/d)
|
||
ENDIF
|
||
|
||
FMT(d/d) addWav(x/d)
|
||
endphoneme
|
||
|
||
phoneme dZ // **j**udge
|
||
ipa dZ
|
||
vcd pla afr sib
|
||
voicingswitch tS
|
||
lengthmod 5
|
||
Vowelin f1=2 f2=2300 200 400 f3=100 80
|
||
Vowelout f1=2 f2=2300 250 300 f3=100 80 brk
|
||
|
||
IF PreVoicing THEN
|
||
FMT(dzh/xdz_pzd, 250)
|
||
ENDIF
|
||
|
||
IF nextPh(isPause2) THEN
|
||
FMT(dzh/dz_pzd_, 250) addWav(x/dz_pzd_, 250)
|
||
ENDIF
|
||
FMT(dzh/dz_pzd, 250) addWav(x/dz_pzd, 250)
|
||
endphoneme
|
||
|
||
phoneme n
|
||
vcd alv nas
|
||
Vowelout f1=2 f2=1500 -300 250 f3=-100 80 rms=20 brk
|
||
Vowelin rate
|
||
lengthmod 4
|
||
|
||
IF KlattSynth THEN
|
||
Vowelin f1=0 f2=1500 -200 200 f3=0 80
|
||
FMT(klatt/n)
|
||
ENDIF
|
||
|
||
NextVowelStarts
|
||
VowelStart(n/n@)
|
||
VowelStart(n/na)
|
||
VowelStart(n/ne)
|
||
VowelStart(n/ni)
|
||
VowelStart(n/no)
|
||
VowelStart(n/nu)
|
||
EndSwitch
|
||
|
||
IF prevPh(isNotVowel) AND nextPhW(isLiquid) THEN
|
||
FMT(n/nj)
|
||
ELIF prevPh(isPause) OR prevPh(n) THEN
|
||
FMT(n/_n)
|
||
ELIF nextPh(isNotVowel) THEN
|
||
FMT(n/n_)
|
||
ENDIF
|
||
|
||
endphoneme
|
||
|
||
phoneme m
|
||
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_)
|
||
ENDIF
|
||
endphoneme
|
||
|
||
phoneme w
|
||
liquid
|
||
lengthmod 7
|
||
starttype #u
|
||
|
||
IF nextPh(isVowel) THEN
|
||
|
||
NextVowelStarts
|
||
VowelStart(w/w2)
|
||
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/w2)
|
||
ELSEIF prevPhW(h) THEN
|
||
// none, [hw]
|
||
ELSE
|
||
FMT(w/w2)
|
||
//FMT(w/_w)
|
||
ENDIF
|
||
ELSE
|
||
// no vowel follows
|
||
Vowelout len=50
|
||
IF prevPh(#i) THEN
|
||
FMT(w/iw_)
|
||
ENDIF
|
||
FMT(w/w_)
|
||
ENDIF
|
||
endphoneme
|
||
|